diff options
Diffstat (limited to 'sway/tree/root.c')
-rw-r--r-- | sway/tree/root.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/sway/tree/root.c b/sway/tree/root.c index 1dabc287..55d78487 100644 --- a/sway/tree/root.c +++ b/sway/tree/root.c | |||
@@ -54,7 +54,7 @@ void root_destroy(struct sway_root *root) { | |||
54 | free(root); | 54 | free(root); |
55 | } | 55 | } |
56 | 56 | ||
57 | void root_scratchpad_add_container(struct sway_container *con) { | 57 | void root_scratchpad_add_container(struct sway_container *con, struct sway_workspace *ws) { |
58 | if (!sway_assert(!con->scratchpad, "Container is already in scratchpad")) { | 58 | if (!sway_assert(!con->scratchpad, "Container is already in scratchpad")) { |
59 | return; | 59 | return; |
60 | } | 60 | } |
@@ -77,18 +77,23 @@ void root_scratchpad_add_container(struct sway_container *con) { | |||
77 | container_detach(con); | 77 | container_detach(con); |
78 | con->scratchpad = true; | 78 | con->scratchpad = true; |
79 | list_add(root->scratchpad, con); | 79 | list_add(root->scratchpad, con); |
80 | 80 | if (ws) { | |
81 | struct sway_seat *seat = input_manager_current_seat(); | 81 | workspace_add_floating(ws, con); |
82 | struct sway_node *new_focus = NULL; | ||
83 | if (parent) { | ||
84 | arrange_container(parent); | ||
85 | new_focus = seat_get_focus_inactive(seat, &parent->node); | ||
86 | } | 82 | } |
87 | if (!new_focus) { | 83 | |
88 | arrange_workspace(workspace); | 84 | if (!ws) { |
89 | new_focus = seat_get_focus_inactive(seat, &workspace->node); | 85 | struct sway_seat *seat = input_manager_current_seat(); |
86 | struct sway_node *new_focus = NULL; | ||
87 | if (parent) { | ||
88 | arrange_container(parent); | ||
89 | new_focus = seat_get_focus_inactive(seat, &parent->node); | ||
90 | } | ||
91 | if (!new_focus) { | ||
92 | arrange_workspace(workspace); | ||
93 | new_focus = seat_get_focus_inactive(seat, &workspace->node); | ||
94 | } | ||
95 | seat_set_focus(seat, new_focus); | ||
90 | } | 96 | } |
91 | seat_set_focus(seat, new_focus); | ||
92 | 97 | ||
93 | ipc_event_window(con, "move"); | 98 | ipc_event_window(con, "move"); |
94 | } | 99 | } |