From c7646de5dd9ea11811896be9505aee0564431ef8 Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Tue, 18 May 2004 00:15:45 +0000 Subject: [PATCH] ITLoginItem functions work for the most part. The AliasData isn't completely correct yet though. --- ITLoginItem.h | 3 +++ ITLoginItem.m | 51 +++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/ITLoginItem.h b/ITLoginItem.h index ecb9daa..c145094 100755 --- a/ITLoginItem.h +++ b/ITLoginItem.h @@ -11,3 +11,6 @@ #import #import +//These functions check for a match with just the lastPathComponent, so it will handle people moving the app +void ITSetApplicationLaunchOnLogin(NSString *path, BOOL flag); +BOOL ITDoesApplicationLaunchOnLogin(NSString *path); \ No newline at end of file diff --git a/ITLoginItem.m b/ITLoginItem.m index ec2e582..f2f9e19 100755 --- a/ITLoginItem.m +++ b/ITLoginItem.m @@ -10,26 +10,33 @@ #import "ITLoginItem.h" #import "ITDebug.h" -BOOL ITSetLaunchApplicationOnLogin(NSString *path, BOOL flag) +void ITSetApplicationLaunchOnLogin(NSString *path, BOOL flag) { + if ( (flag && ITDoesApplicationLaunchOnLogin(path)) || ![[NSFileManager defaultManager] fileExistsAtPath:path] ) { + return; + } NSUserDefaults *df = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *loginwindow; NSMutableArray *loginarray; - FSRef fileRef; - AliasHandle alias; - NSData *aliasData; - ITDebugLog(@"Set if MenuPrefs launches at login to %i.", flag); + ITDebugLog(@"Set if \"%@\" launches at login to %i.", path, flag); [df synchronize]; loginwindow = [[df persistentDomainForName:@"loginwindow"] mutableCopy]; loginarray = [loginwindow objectForKey:@"AutoLaunchedApplicationDictionary"]; - //Create the alias data - FSPathMakeRef([path UTF8String], &fileRef, NULL); - FSNewAlias(NULL, &fileRef, &alias); - aliasData = [NSData dataWithBytes:&alias length:sizeof(alias)]; - if (flag) { + FSRef fileRef; + AliasHandle alias; + NSData *aliasData; + FSPathMakeRef([path UTF8String], &fileRef, NULL); + FSNewAlias(NULL, &fileRef, &alias); + aliasData = [NSData dataWithBytes:&alias length:GetHandleSize((Handle)alias)]; + + if (!loginarray) { //If there is no loginarray of autolaunch items, create one + loginarray = [[[NSMutableArray alloc] init] autorelease]; + [loginwindow setObject:loginarray forKey:@"AutoLaunchedApplicationDictionary"]; + } + NSDictionary *itemDict = [NSDictionary dictionaryWithObjectsAndKeys: [[NSBundle mainBundle] bundlePath], @"Path", [NSNumber numberWithInt:0], @"Hide", @@ -39,7 +46,7 @@ BOOL ITSetLaunchApplicationOnLogin(NSString *path, BOOL flag) int i; for (i = 0; i < [loginarray count]; i++) { NSDictionary *tempDict = [loginarray objectAtIndex:i]; - if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:[[[NSBundle mainBundle] bundlePath] lastPathComponent]]) { + if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:[path lastPathComponent]]) { [loginarray removeObjectAtIndex:i]; break; } @@ -48,5 +55,25 @@ BOOL ITSetLaunchApplicationOnLogin(NSString *path, BOOL flag) [df setPersistentDomain:loginwindow forName:@"loginwindow"]; [df synchronize]; [loginwindow release]; - return YES; +} + +BOOL ITDoesApplicationLaunchOnLogin(NSString *path) +{ + NSUserDefaults *df = [NSUserDefaults standardUserDefaults]; + NSDictionary *loginwindow; + NSMutableArray *loginarray; + NSEnumerator *loginEnum; + id anItem; + ITDebugLog(@"Checking if \"%@\" launches at login.", path); + [df synchronize]; + loginwindow = [df persistentDomainForName:@"loginwindow"]; + loginarray = [loginwindow objectForKey:@"AutoLaunchedApplicationDictionary"]; + + loginEnum = [loginarray objectEnumerator]; + while ( (anItem = [loginEnum nextObject]) ) { + if ( [[[anItem objectForKey:@"Path"] lastPathComponent] isEqualToString:[path lastPathComponent]] ) { + return YES; + } + } + return NO; } \ No newline at end of file -- 2.20.1