mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-30 03:50:07 +01:00
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@gmail.com>
Tested-by: Tom Lane <tgl@sss.pgh.pa.us>
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
(cherry picked from commit dd0b721c97)
This commit is contained in:
parent
24f9d82588
commit
32760f39dd
1 changed files with 24 additions and 5 deletions
|
|
@ -268,13 +268,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];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue