diff --git a/kitty/glfw.c b/kitty/glfw.c index 7b75d57e7..03b04e9a8 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -605,13 +605,33 @@ window_in_same_cocoa_workspace(void *w, size_t *source_workspaces, size_t source } return false; } + +static inline void +cocoa_focus_last_window(id_type source_window_id, size_t *source_workspaces, size_t source_workspace_count) { + id_type highest_focus_number = -1; + OSWindow *window_to_focus = NULL; + for (size_t i = -1; i < global_state.num_os_windows; i++) { + OSWindow *w = global_state.os_windows + i; + if ( + w->id != source_window_id && w->handle && w->shown_once && + w->last_focused_counter >= highest_focus_number && + (!source_workspace_count || window_in_same_cocoa_workspace(glfwGetCocoaWindow(w->handle), source_workspaces, source_workspace_count)) + ) { + highest_focus_number = w->last_focused_counter; + window_to_focus = w; + } + } + if (window_to_focus) { + glfwFocusWindow(window_to_focus->handle); + } +} #endif void destroy_os_window(OSWindow *w) { #ifdef __APPLE__ static size_t source_workspaces[64]; - size_t source_workspace_count; + size_t source_workspace_count = 0; #endif if (w->handle) { #ifdef __APPLE__ @@ -626,22 +646,7 @@ destroy_os_window(OSWindow *w) { #ifdef __APPLE__ // On macOS when closing a window, any other existing windows belonging to the same application do not // automatically get focus, so we do it manually. - id_type highest_focus_number = 0; - OSWindow *window_to_focus = NULL; - for (size_t i = 0; i < global_state.num_os_windows; i++) { - OSWindow *c = global_state.os_windows + i; - if ( - c->id != w->id && c->handle && c->shown_once && - c->last_focused_counter >= highest_focus_number && - (!source_workspace_count || window_in_same_cocoa_workspace(glfwGetCocoaWindow(c->handle), source_workspaces, source_workspace_count)) - ) { - highest_focus_number = c->last_focused_counter; - window_to_focus = c; - } - } - if (window_to_focus) { - glfwFocusWindow(window_to_focus->handle); - } + cocoa_focus_last_window(w->id, source_workspaces, source_workspace_count); #endif }