summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@apple.com>2011-06-21 21:14:46 -0700
committerJeremy Huddleston <jeremyhu@apple.com>2011-06-29 21:39:03 -0700
commitf0ee98584c909b503691d72c01f76602d0a28ba2 (patch)
treea379d318e7f5d162f8784f84c9564d93ad6287bf
parent1834e82b42a876195d12dda28c80004d37c4fa0c (diff)
XQuartz: Make a call to activateIgnoringOtherApps in our NSApplicationActivatedEventType handler
In addition, this change will not call into the X11 activation unless an X11 window was active when we deactivated. We can't rely on the event and current key windows because the key window will be nil until activated, and the event will only reference the window if the window was clicked (whereas it will be nil if we activated via dock or cmd-tab). Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> (cherry picked from commit c8b80a82d97d92d445c1c0af6dba42c9de7c56cd)
-rw-r--r--hw/xquartz/X11Application.m25
1 files changed, 16 insertions, 9 deletions
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index a5159b6a8..17e6b2751 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -334,18 +334,21 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
case NSAppKitDefined:
switch ([e subtype]) {
+ static BOOL x_was_active = NO;
+
case NSApplicationActivatedEventType:
for_x = NO;
- if ([self modalWindow] == nil) {
+ if ([e window] == nil && x_was_active) {
BOOL order_all_windows = YES, workspaces, ok;
for_appkit = NO;
-
- /* FIXME: hack to avoid having to pass the event to appkit,
- which would cause it to raise one of its windows. */
+
+ /* FIXME: This is a hack to avoid passing the event to AppKit which
+ * would result in it raising one of its windows.
+ */
_appFlags._active = YES;
-
- [self activateX:YES];
-
+
+ X11ApplicationSetFrontProcess();
+
/* Get the Spaces preference for SwitchOnActivate */
(void)CFPreferencesAppSynchronize(CFSTR("com.apple.dock"));
workspaces = CFPreferencesGetAppBooleanValue(CFSTR("workspaces"), CFSTR("com.apple.dock"), &ok);
@@ -366,8 +369,9 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
* If there are no active windows, and there are minimized windows, we should
* be restoring one of them.
*/
- if ([e data2] & 0x10) // 0x10 is set when we use cmd-tab or the dock icon
+ if ([e data2] & 0x10) { // 0x10 (bfCPSOrderAllWindowsForward) is set when we use cmd-tab or the dock icon
DarwinSendDDXEvent(kXquartzBringAllToFront, 1, order_all_windows);
+ }
}
break;
@@ -377,7 +381,10 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
case NSApplicationDeactivatedEventType:
for_x = NO;
- [self activateX:NO];
+
+ x_was_active = _x_active;
+ if(_x_active)
+ [self activateX:NO];
break;
}
break;