mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +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 double-click
 | 
						|
    // 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
 |