This commit is contained in:
Scott Leggett 2026-06-07 22:04:18 +02:00 committed by GitHub
commit 5b8805d3c7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 1 deletions

View file

@ -1360,10 +1360,19 @@ struct sway_node *seat_get_focus_inactive(struct sway_seat *seat,
return node; return node;
} }
struct sway_seat_node *current; struct sway_seat_node *current;
struct sway_node *fallback = NULL;
wl_list_for_each(current, &seat->focus_stack, link) { wl_list_for_each(current, &seat->focus_stack, link) {
// prioritize a focused descendant
if (node_has_ancestor(current->node, node)) { if (node_has_ancestor(current->node, node)) {
return current->node; return current->node;
} }
// if the node itself is in the focus stack, save it as a fallback
if (!fallback && current->node == node) {
fallback = current->node;
}
}
if (fallback) {
return fallback;
} }
if (node->type == N_WORKSPACE) { if (node->type == N_WORKSPACE) {
return node; return node;

View file

@ -565,7 +565,7 @@ static void check_focus_follows_mouse(struct sway_seat *seat,
struct sway_output *hovered_output = wlr_output->data; struct sway_output *hovered_output = wlr_output->data;
if (focus && hovered_output != node_get_output(focus)) { if (focus && hovered_output != node_get_output(focus)) {
struct sway_workspace *ws = output_get_active_workspace(hovered_output); struct sway_workspace *ws = output_get_active_workspace(hovered_output);
seat_set_focus(seat, &ws->node); seat_set_focus(seat, seat_get_focus_inactive(seat, &ws->node));
transaction_commit_dirty(); transaction_commit_dirty();
} }
return; return;