diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2018-11-28 12:57:58 -0500 |
---|---|---|
committer | Brian Ashworth <bosrsf04@gmail.com> | 2018-11-28 13:02:54 -0500 |
commit | f52277f66e85d13589b51a851b9e97c3457ed654 (patch) | |
tree | b377b8b22ac59ab8cd40285d731f45b57d6f1c93 | |
parent | Merge pull request #3212 from martinetd/move_floating (diff) | |
download | sway-f52277f66e85d13589b51a851b9e97c3457ed654.tar.gz sway-f52277f66e85d13589b51a851b9e97c3457ed654.tar.zst sway-f52277f66e85d13589b51a851b9e97c3457ed654.zip |
Fix scratchpad segfault - NULL focused workspace
When adding a container to the scratchpad, it was possible for focus to
be removed from the seat. This occurred when a single child was moved
from it's parent to the scratchpad due to the focus_inactive for the
parent being NULL. If the focus_inactive for the parent is NULL, the
focus_inactive for the workspace should be focused.
-rw-r--r-- | sway/tree/root.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sway/tree/root.c b/sway/tree/root.c index 9f6bf607..22c46aba 100644 --- a/sway/tree/root.c +++ b/sway/tree/root.c | |||
@@ -69,13 +69,16 @@ void root_scratchpad_add_container(struct sway_container *con) { | |||
69 | list_add(root->scratchpad, con); | 69 | list_add(root->scratchpad, con); |
70 | 70 | ||
71 | struct sway_seat *seat = input_manager_current_seat(); | 71 | struct sway_seat *seat = input_manager_current_seat(); |
72 | struct sway_node *new_focus = NULL; | ||
72 | if (parent) { | 73 | if (parent) { |
73 | arrange_container(parent); | 74 | arrange_container(parent); |
74 | seat_set_focus(seat, seat_get_focus_inactive(seat, &parent->node)); | 75 | new_focus = seat_get_focus_inactive(seat, &parent->node); |
75 | } else { | 76 | } |
77 | if (!new_focus) { | ||
76 | arrange_workspace(workspace); | 78 | arrange_workspace(workspace); |
77 | seat_set_focus(seat, seat_get_focus_inactive(seat, &workspace->node)); | 79 | new_focus = seat_get_focus_inactive(seat, &workspace->node); |
78 | } | 80 | } |
81 | seat_set_focus(seat, new_focus); | ||
79 | 82 | ||
80 | ipc_event_window(con, "move"); | 83 | ipc_event_window(con, "move"); |
81 | } | 84 | } |