17db96d56Sopenharmony_ci#import "MyAppDelegate.h" 27db96d56Sopenharmony_ci#import "PreferencesWindowController.h" 37db96d56Sopenharmony_ci#import <Carbon/Carbon.h> 47db96d56Sopenharmony_ci#import <ApplicationServices/ApplicationServices.h> 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ci@implementation MyAppDelegate 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci- (id)init 97db96d56Sopenharmony_ci{ 107db96d56Sopenharmony_ci self = [super init]; 117db96d56Sopenharmony_ci initial_action_done = NO; 127db96d56Sopenharmony_ci should_terminate = NO; 137db96d56Sopenharmony_ci return self; 147db96d56Sopenharmony_ci} 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ci- (IBAction)showPreferences:(id)sender 177db96d56Sopenharmony_ci{ 187db96d56Sopenharmony_ci [PreferencesWindowController getPreferencesWindow]; 197db96d56Sopenharmony_ci} 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci- (void)applicationDidFinishLaunching:(NSNotification *)notification 227db96d56Sopenharmony_ci{ 237db96d56Sopenharmony_ci // Test that the file mappings are correct 247db96d56Sopenharmony_ci [self testFileTypeBinding]; 257db96d56Sopenharmony_ci // If we were opened because of a file drag or double-click 267db96d56Sopenharmony_ci // we've set initial_action_done in shouldShowUI 277db96d56Sopenharmony_ci // Otherwise we open a preferences dialog. 287db96d56Sopenharmony_ci if (!initial_action_done) { 297db96d56Sopenharmony_ci initial_action_done = YES; 307db96d56Sopenharmony_ci [self showPreferences: self]; 317db96d56Sopenharmony_ci } 327db96d56Sopenharmony_ci} 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci- (BOOL)shouldShowUI 357db96d56Sopenharmony_ci{ 367db96d56Sopenharmony_ci // if this call comes before applicationDidFinishLaunching: we 377db96d56Sopenharmony_ci // should terminate immediately after starting the script. 387db96d56Sopenharmony_ci if (!initial_action_done) 397db96d56Sopenharmony_ci should_terminate = YES; 407db96d56Sopenharmony_ci initial_action_done = YES; 417db96d56Sopenharmony_ci if( GetCurrentKeyModifiers() & optionKey ) 427db96d56Sopenharmony_ci return YES; 437db96d56Sopenharmony_ci return NO; 447db96d56Sopenharmony_ci} 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci- (BOOL)shouldTerminate 477db96d56Sopenharmony_ci{ 487db96d56Sopenharmony_ci return should_terminate; 497db96d56Sopenharmony_ci} 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender 527db96d56Sopenharmony_ci{ 537db96d56Sopenharmony_ci return NO; 547db96d56Sopenharmony_ci} 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci- (void)testFileTypeBinding 577db96d56Sopenharmony_ci{ 587db96d56Sopenharmony_ci NSURL *ourUrl; 597db96d56Sopenharmony_ci OSStatus err; 607db96d56Sopenharmony_ci FSRef appRef; 617db96d56Sopenharmony_ci NSURL *appUrl; 627db96d56Sopenharmony_ci static NSString *extensions[] = { @"py", @"pyw", @"pyc", NULL}; 637db96d56Sopenharmony_ci NSString **ext_p; 647db96d56Sopenharmony_ci int i; 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci if ([[NSUserDefaults standardUserDefaults] boolForKey: @"SkipFileBindingTest"]) 677db96d56Sopenharmony_ci return; 687db96d56Sopenharmony_ci ourUrl = [NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]; 697db96d56Sopenharmony_ci for( ext_p = extensions; *ext_p; ext_p++ ) { 707db96d56Sopenharmony_ci err = LSGetApplicationForInfo( 717db96d56Sopenharmony_ci kLSUnknownType, 727db96d56Sopenharmony_ci kLSUnknownCreator, 737db96d56Sopenharmony_ci (CFStringRef)*ext_p, 747db96d56Sopenharmony_ci kLSRolesViewer, 757db96d56Sopenharmony_ci &appRef, 767db96d56Sopenharmony_ci (CFURLRef *)&appUrl); 777db96d56Sopenharmony_ci if (err || ![appUrl isEqual: ourUrl] ) { 787db96d56Sopenharmony_ci i = NSRunAlertPanel(@"File type binding", 797db96d56Sopenharmony_ci @"PythonLauncher is not the default application for all " \ 807db96d56Sopenharmony_ci @"Python script types. You should fix this with the " \ 817db96d56Sopenharmony_ci @"Finder's \"Get Info\" command.\n\n" \ 827db96d56Sopenharmony_ci @"See \"Changing the application that opens a file\" in " \ 837db96d56Sopenharmony_ci @"Mac Help for details.", 847db96d56Sopenharmony_ci @"OK", 857db96d56Sopenharmony_ci @"Don't show this warning again", 867db96d56Sopenharmony_ci NULL); 877db96d56Sopenharmony_ci if ( i == 0 ) { // Don't show again 887db96d56Sopenharmony_ci [[NSUserDefaults standardUserDefaults] 897db96d56Sopenharmony_ci setObject:@"YES" forKey:@"SkipFileBindingTest"]; 907db96d56Sopenharmony_ci } 917db96d56Sopenharmony_ci return; 927db96d56Sopenharmony_ci } 937db96d56Sopenharmony_ci } 947db96d56Sopenharmony_ci} 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci@end 97