mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
| #import "MyAppDelegate.h"
 | |
| #import "PreferencesWindowController.h"
 | |
| #import <Carbon/Carbon.h>
 | |
| #import <ApplicationServices/ApplicationServices.h>
 | |
| 
 | |
| @implementation MyAppDelegate
 | |
| 
 | |
| - (id)init
 | |
| {
 | |
|     self = [super init];
 | |
|     initial_action_done = NO;
 | |
|     should_terminate = NO;
 | |
|     return self;
 | |
| }
 | |
| 
 | |
| - (IBAction)showPreferences:(id)sender
 | |
| {
 | |
|     [PreferencesWindowController getPreferencesWindow];
 | |
| }
 | |
| 
 | |
| - (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.
 | |
|     if (!initial_action_done) {
 | |
|         initial_action_done = YES;
 | |
|         [self showPreferences: self];
 | |
|     }
 | |
| }
 | |
| 
 | |
| - (BOOL)shouldShowUI
 | |
| {
 | |
|     // if this call comes before applicationDidFinishLaunching: we
 | |
|     // should terminate immediately after starting the script.
 | |
|     if (!initial_action_done)
 | |
|         should_terminate = YES;
 | |
|     initial_action_done = YES;
 | |
|     if( GetCurrentKeyModifiers() & optionKey )
 | |
|         return YES;
 | |
|     return NO;
 | |
| }
 | |
| 
 | |
| - (BOOL)shouldTerminate
 | |
| {
 | |
|     return should_terminate;
 | |
| }
 | |
| 
 | |
| - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
 | |
| {
 | |
|     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
 | 
