xserver: Branch 'master'
Jeremy Huddleston
jeremyhu at kemper.freedesktop.org
Thu Jul 20 08:18:13 UTC 2017
hw/xquartz/X11Application.m | 29 ++++++++++++++++++++++++-----
1 file changed, 24 insertions(+), 5 deletions(-)
New commits:
commit dd0b721c977e88d7c3830cc2a672c2793bca4fa0
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date: Tue Jul 18 21:35:49 2017 -0700
XQuartz: Hack around an issue that can occur on macOS due to background apps incorrectly stealing focus
Works around <rdar://problem/7150340>.
Tested-by: Martin Otte <martinjotte at gmail.com>
Tested-by: Tom Lane <tgl at sss.pgh.pa.us>
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 768eecf68..821e1c5a1 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -275,13 +275,32 @@ message_kit_thread(SEL selector, NSObject *arg)
if (_x_active) [self activateX:NO];
}
else if ([self modalWindow] == nil) {
- /* Must be an X window. Tell appkit it doesn't have focus. */
+ /* Must be an X window. Tell appkit windows to resign main/key */
for_appkit = NO;
- if ([self isActive]) {
- [self deactivate];
- if (!_x_active && quartzProcs->IsX11Window([e windowNumber]))
- [self activateX:YES];
+ if (!_x_active && quartzProcs->IsX11Window([e windowNumber])) {
+ if ([self respondsToSelector:@selector(_setKeyWindow:)] && [self respondsToSelector:@selector(_setMainWindow:)]) {
+ NSWindow *keyWindow = [self keyWindow];
+ if (keyWindow) {
+ [self _setKeyWindow:nil];
+ [keyWindow resignKeyWindow];
+ }
+
+ NSWindow *mainWindow = [self mainWindow];
+ if (mainWindow) {
+ [self _setMainWindow:nil];
+ [mainWindow resignMainWindow];
+ }
+ } else {
+ /* This has a side effect of causing background apps to steal focus from XQuartz.
+ * Unfortunately, there is no public and stable API to do what we want, but this
+ * is a decent fallback in the off chance that the above selectors get dropped
+ * in the future.
+ */
+ [self deactivate];
+ }
+
+ [self activateX:YES];
}
}
More information about the xorg-commit
mailing list