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 immedeately 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
|
---|