1#import "MyAppDelegate.h" 2#import "PreferencesWindowController.h" 3#import <Carbon/Carbon.h> 4#import <ApplicationServices/ApplicationServices.h> 5 6@implementation MyAppDelegate 7 8- (id)init 9{ 10 self = [super init]; 11 initial_action_done = NO; 12 should_terminate = NO; 13 return self; 14} 15 16- (IBAction)showPreferences:(id)sender 17{ 18 [PreferencesWindowController getPreferencesWindow]; 19} 20 21- (void)applicationDidFinishLaunching:(NSNotification *)notification 22{ 23 // Test that the file mappings are correct 24 [self testFileTypeBinding]; 25 // If we were opened because of a file drag or doubleclick 26 // we've set initial_action_done in shouldShowUI 27 // Otherwise we open a preferences dialog. 28 if (!initial_action_done) { 29 initial_action_done = YES; 30 [self showPreferences: self]; 31 } 32} 33 34- (BOOL)shouldShowUI 35{ 36 // if this call comes before applicationDidFinishLaunching: we 37 // should terminate immediately after starting the script. 38 if (!initial_action_done) 39 should_terminate = YES; 40 initial_action_done = YES; 41 if( GetCurrentKeyModifiers() & optionKey ) 42 return YES; 43 return NO; 44} 45 46- (BOOL)shouldTerminate 47{ 48 return should_terminate; 49} 50 51- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender 52{ 53 return NO; 54} 55 56- (void)testFileTypeBinding 57{ 58 NSURL *ourUrl; 59 OSStatus err; 60 FSRef appRef; 61 NSURL *appUrl; 62 static NSString *extensions[] = { @"py", @"pyw", @"pyc", NULL}; 63 NSString **ext_p; 64 int i; 65 66 if ([[NSUserDefaults standardUserDefaults] boolForKey: @"SkipFileBindingTest"]) 67 return; 68 ourUrl = [NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]; 69 for( ext_p = extensions; *ext_p; ext_p++ ) { 70 err = LSGetApplicationForInfo( 71 kLSUnknownType, 72 kLSUnknownCreator, 73 (CFStringRef)*ext_p, 74 kLSRolesViewer, 75 &appRef, 76 (CFURLRef *)&appUrl); 77 if (err || ![appUrl isEqual: ourUrl] ) { 78 i = NSRunAlertPanel(@"File type binding", 79 @"PythonLauncher is not the default application for all " \ 80 @"Python script types. You should fix this with the " \ 81 @"Finder's \"Get Info\" command.\n\n" \ 82 @"See \"Changing the application that opens a file\" in " \ 83 @"Mac Help for details.", 84 @"OK", 85 @"Don't show this warning again", 86 NULL); 87 if ( i == 0 ) { // Don't show again 88 [[NSUserDefaults standardUserDefaults] 89 setObject:@"YES" forKey:@"SkipFileBindingTest"]; 90 } 91 return; 92 } 93 } 94} 95 96@end 97