Fix macOS keyboard focus not restored when switching back from another space

Fixes #9665
Fixes #9666
This commit is contained in:
copilot-swe-agent[bot] 2026-03-15 08:59:44 +00:00 committed by Kovid Goyal
parent b3b7d0596d
commit 66ffb6895c
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
2 changed files with 20 additions and 0 deletions

View file

@ -188,6 +188,8 @@ Detailed list of changes
- Don't use neighboring tab colors for tab bar margins in translucent windows (:iss:`9663`)
- macOS: Fix OS window focus not restored when switching spaces (:iss:`9665`)
0.46.0 [2026-03-11]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View file

@ -311,6 +311,24 @@ - (void)applicationDidActivate:(NSNotification *)notification {
}
}
- (void)applicationDidBecomeActive:(NSNotification *)notification {
(void)notification;
// When the application becomes active after switching spaces (e.g., swiping
// back from a fullscreen app on another space), macOS may not send
// windowDidBecomeKey: for the already-key window. This leaves GLFW thinking
// no window has focus (since windowDidResignKey: was sent when leaving).
// Ensure GLFW's focus state is updated to match the actual key window.
NSWindow *keyWindow = [NSApp keyWindow];
if (keyWindow && !_glfw.focusedWindowId) {
for (_GLFWwindow *window = _glfw.windowListHead; window; window = window->next) {
if (window->ns.object == keyWindow) {
if (_glfw.focusedWindowId != window->id) _glfwInputWindowFocus(window, true);
break;
}
}
}
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
(void)sender;