diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-08-07 10:27:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-07 10:27:25 -0400 |
commit | 84845adb8e60448de1e91633294e31f2030a5038 (patch) | |
tree | 00955b8114f5c960f27e2065a7e8478953ec441b | |
parent | 1818c58e4060624ccb9102f88dd977702b688008 (diff) | |
parent | 50f3a7ff5cf2f30b6644dc578723b60ab3f0d26d (diff) |
Merge pull request #2433 from RyanDwyer/fix-sticky-infinite-loop
Fix infinite loop when focusing sticky containers via workspace command
-rw-r--r-- | sway/tree/workspace.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c index 3fcad631..395c6c10 100644 --- a/sway/tree/workspace.c +++ b/sway/tree/workspace.c @@ -411,17 +411,20 @@ bool workspace_switch(struct sway_container *workspace, struct sway_container *floating = next_output_prev_ws->sway_workspace->floating; bool has_sticky = false; - for (int i = 0; i < floating->children->length; ++i) { - struct sway_container *floater = floating->children->items[i]; - if (floater->is_sticky) { - has_sticky = true; - container_remove_child(floater); - container_add_child(workspace->sway_workspace->floating, floater); - if (floater == focus) { - seat_set_focus(seat, NULL); - seat_set_focus(seat, floater); + if (workspace != next_output_prev_ws) { + for (int i = 0; i < floating->children->length; ++i) { + struct sway_container *floater = floating->children->items[i]; + if (floater->is_sticky) { + has_sticky = true; + container_remove_child(floater); + container_add_child(workspace->sway_workspace->floating, + floater); + if (floater == focus) { + seat_set_focus(seat, NULL); + seat_set_focus(seat, floater); + } + --i; } - --i; } } |