Refactor code to focus previous window on cocoa into a separate function

This commit is contained in:
Kovid Goyal 2019-02-19 20:09:24 +05:30
parent 442f2adf23
commit 6507fd1ac2
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -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
}