Fix crash when showing scratchpad hidden split containers

master
Ronan Pigott 5 years ago committed by Brian Ashworth
parent 18507e62fd
commit d88d4bbd9d

@ -357,4 +357,6 @@ void container_raise_floating(struct sway_container *con);
bool container_is_scratchpad_hidden(struct sway_container *con); bool container_is_scratchpad_hidden(struct sway_container *con);
bool container_is_scratchpad_hidden_or_child(struct sway_container *con);
#endif #endif

@ -365,7 +365,7 @@ struct cmd_results *cmd_focus(int argc, char **argv) {
} }
if (argc == 0 && container) { if (argc == 0 && container) {
if (container_is_scratchpad_hidden(container)) { if (container_is_scratchpad_hidden_or_child(container)) {
root_scratchpad_show(container); root_scratchpad_show(container);
} }
seat_set_focus_container(seat, container); seat_set_focus_container(seat, container);

@ -1527,3 +1527,10 @@ void container_raise_floating(struct sway_container *con) {
bool container_is_scratchpad_hidden(struct sway_container *con) { bool container_is_scratchpad_hidden(struct sway_container *con) {
return con->scratchpad && !con->workspace; return con->scratchpad && !con->workspace;
} }
bool container_is_scratchpad_hidden_or_child(struct sway_container *con) {
while (con->parent) {
con = con->parent;
}
return con->scratchpad && !con->workspace;
}

@ -132,6 +132,11 @@ void root_scratchpad_show(struct sway_container *con) {
if (old_ws) { if (old_ws) {
container_detach(con); container_detach(con);
workspace_consider_destroy(old_ws); workspace_consider_destroy(old_ws);
} else {
// Act on the ancestor of scratchpad hidden split containers
while (con->parent) {
con = con->parent;
}
} }
workspace_add_floating(new_ws, con); workspace_add_floating(new_ws, con);

Loading…
Cancel
Save