Merge pull request #2433 from RyanDwyer/fix-sticky-infinite-loop

Fix infinite loop when focusing sticky containers via workspace command
This commit is contained in:
Drew DeVault 2018-08-07 10:27:25 -04:00 committed by GitHub
commit 84845adb8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -411,12 +411,14 @@ bool workspace_switch(struct sway_container *workspace,
struct sway_container *floating = struct sway_container *floating =
next_output_prev_ws->sway_workspace->floating; next_output_prev_ws->sway_workspace->floating;
bool has_sticky = false; bool has_sticky = false;
if (workspace != next_output_prev_ws) {
for (int i = 0; i < floating->children->length; ++i) { for (int i = 0; i < floating->children->length; ++i) {
struct sway_container *floater = floating->children->items[i]; struct sway_container *floater = floating->children->items[i];
if (floater->is_sticky) { if (floater->is_sticky) {
has_sticky = true; has_sticky = true;
container_remove_child(floater); container_remove_child(floater);
container_add_child(workspace->sway_workspace->floating, floater); container_add_child(workspace->sway_workspace->floating,
floater);
if (floater == focus) { if (floater == focus) {
seat_set_focus(seat, NULL); seat_set_focus(seat, NULL);
seat_set_focus(seat, floater); seat_set_focus(seat, floater);
@ -424,6 +426,7 @@ bool workspace_switch(struct sway_container *workspace,
--i; --i;
} }
} }
}
wlr_log(WLR_DEBUG, "Switching to workspace %p:%s", wlr_log(WLR_DEBUG, "Switching to workspace %p:%s",
workspace, workspace->name); workspace, workspace->name);