Skip to content

Commit 877c61f

Browse files
committed
Run app switching in main thread always - it calls 'NSApp'
1 parent 9bc948a commit 877c61f

File tree

2 files changed

+39
-34
lines changed

2 files changed

+39
-34
lines changed

Quicksilver/Code-QuickStepCore/QSProcessSource.m

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -78,46 +78,49 @@ - (QSObject *)activateApplication:(QSObject *)dObject {
7878
}
7979

8080
- (QSObject *)switchToApplication:(QSObject *)dObject {
81-
NSArray *array = [dObject arrayForType:QSProcessType];
82-
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
81+
QSGCDMainAsync(^{
82+
NSArray *array = [dObject arrayForType:QSProcessType];
83+
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
8384

84-
if (!array) {
85-
array = [dObject arrayForType:QSFilePathType];
85+
if (!array) {
86+
array = [dObject arrayForType:QSFilePathType];
8687

87-
for(NSString * app in array) {
88-
[workspace openFile:app];
88+
for(NSString * app in array) {
89+
[workspace openFile:app];
90+
}
91+
return;
8992
}
90-
return nil;
91-
}
92-
93-
if ([[NSApp currentEvent] type] == NSEventTypeKeyDown && [[NSApp currentEvent] modifierFlags] & NSEventModifierFlagOption)
94-
[workspace hideOtherApplications:array];
95-
96-
NSDictionary *procDict;
9793

98-
for(procDict in array) {
99-
100-
if (!procDict ) {
101-
[workspace launchApplication:[procDict objectForKey:@"NSApplicationPath"]];
102-
continue;
103-
}
104-
BOOL frontmost = [workspace applicationIsFrontmost:procDict];
105-
NSInteger behavior = [[NSUserDefaults standardUserDefaults] integerForKey:@"QSActionAppReopenBehavior"];
106-
if (frontmost) behavior = 2;
107-
108-
switch (behavior) {
109-
case 0:
110-
[workspace reopenApplication:procDict];
111-
break;
112-
case 1:
113-
[workspace activateApplication:procDict];
114-
break;
115-
case 2:
116-
[workspace switchToApplication:procDict frontWindowOnly:NO];
117-
break;
94+
if ([[NSApp currentEvent] type] == NSEventTypeKeyDown && [[NSApp currentEvent] modifierFlags] & NSEventModifierFlagOption)
95+
[workspace hideOtherApplications:array];
96+
97+
NSDictionary *procDict;
98+
99+
for(procDict in array) {
100+
101+
if (!procDict ) {
102+
[workspace launchApplication:[procDict objectForKey:@"NSApplicationPath"]];
103+
continue;
104+
}
105+
BOOL frontmost = [workspace applicationIsFrontmost:procDict];
106+
NSInteger behavior = [[NSUserDefaults standardUserDefaults] integerForKey:@"QSActionAppReopenBehavior"];
107+
if (frontmost) behavior = 2;
108+
109+
switch (behavior) {
110+
case 0:
111+
[workspace reopenApplication:procDict];
112+
break;
113+
case 1:
114+
[workspace activateApplication:procDict];
115+
break;
116+
case 2:
117+
[workspace switchToApplication:procDict frontWindowOnly:NO];
118+
break;
119+
}
118120
}
119-
}
120121

122+
return;
123+
});
121124
return nil;
122125
}
123126

Quicksilver/PlugIns-Main/QSCorePlugIn/QSCorePlugIn-Info.plist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,6 +1110,8 @@
11101110
</array>
11111111
<key>icon</key>
11121112
<string>QSDirectObjectIconProxy</string>
1113+
<key>runInMainThread</key>
1114+
<true/>
11131115
</dict>
11141116
<key>QSObjectShowChildMenu</key>
11151117
<dict>

0 commit comments

Comments
 (0)