diff options
Diffstat (limited to 'Mac/OSX/PythonLauncher/MyAppDelegate.m')
-rw-r--r-- | Mac/OSX/PythonLauncher/MyAppDelegate.m | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Mac/OSX/PythonLauncher/MyAppDelegate.m b/Mac/OSX/PythonLauncher/MyAppDelegate.m index cb97972..a5ba751 100644 --- a/Mac/OSX/PythonLauncher/MyAppDelegate.m +++ b/Mac/OSX/PythonLauncher/MyAppDelegate.m @@ -1,6 +1,7 @@ #import "MyAppDelegate.h" #import "PreferencesWindowController.h" #import <Carbon/Carbon.h> +#import <ApplicationServices/ApplicationServices.h> @implementation MyAppDelegate @@ -19,6 +20,8 @@ - (void)applicationDidFinishLaunching:(NSNotification *)notification { + // Test that the file mappings are correct + [self testFileTypeBinding]; // If we were opened because of a file drag or doubleclick // we've set initial_action_done in shouldShowUI // Otherwise we open a preferences dialog. @@ -50,4 +53,44 @@ return NO; } +- (void)testFileTypeBinding +{ + NSURL *ourUrl; + OSStatus err; + FSRef appRef; + NSURL *appUrl; + static NSString *extensions[] = { @"py", @"pyw", @"pyc", NULL}; + NSString **ext_p; + int i; + + if ([[NSUserDefaults standardUserDefaults] boolForKey: @"SkipFileBindingTest"]) + return; + ourUrl = [NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]; + for( ext_p = extensions; *ext_p; ext_p++ ) { + err = LSGetApplicationForInfo( + kLSUnknownType, + kLSUnknownCreator, + (CFStringRef)*ext_p, + kLSRolesViewer, + &appRef, + (CFURLRef *)&appUrl); + if (err || ![appUrl isEqual: ourUrl] ) { + i = NSRunAlertPanel(@"File type binding", + @"PythonLauncher is not the default application for all " \ + @"Python script types. You should fix this with the " \ + @"Finder's \"Get Info\" command.\n\n" \ + @"See \"Changing the application that opens a file\" in " \ + @"Mac Help for details.", + @"OK", + @"Don't show this warning again", + NULL); + if ( i == 0 ) { // Don't show again + [[NSUserDefaults standardUserDefaults] + setObject:@"YES" forKey:@"SkipFileBindingTest"]; + } + return; + } + } +} + @end |