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