mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-24 01:08:10 +02:00
Refactor code to focus previous window on cocoa into a separate function
This commit is contained in:
39
kitty/glfw.c
39
kitty/glfw.c
@@ -605,13 +605,33 @@ window_in_same_cocoa_workspace(void *w, size_t *source_workspaces, size_t source
|
|||||||
}
|
}
|
||||||
return false;
|
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
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
destroy_os_window(OSWindow *w) {
|
destroy_os_window(OSWindow *w) {
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
static size_t source_workspaces[64];
|
static size_t source_workspaces[64];
|
||||||
size_t source_workspace_count;
|
size_t source_workspace_count = 0;
|
||||||
#endif
|
#endif
|
||||||
if (w->handle) {
|
if (w->handle) {
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
@@ -626,22 +646,7 @@ destroy_os_window(OSWindow *w) {
|
|||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
// On macOS when closing a window, any other existing windows belonging to the same application do not
|
// 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.
|
// automatically get focus, so we do it manually.
|
||||||
id_type highest_focus_number = 0;
|
cocoa_focus_last_window(w->id, source_workspaces, source_workspace_count);
|
||||||
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);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user