aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree
diff options
context:
space:
mode:
Diffstat (limited to 'sway/tree')
-rw-r--r--sway/tree/container.c4
-rw-r--r--sway/tree/root.c27
2 files changed, 19 insertions, 12 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index c4d21f0a..89a47151 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -1378,10 +1378,12 @@ void container_replace(struct sway_container *container,
1378 struct sway_container *replacement) { 1378 struct sway_container *replacement) {
1379 enum sway_fullscreen_mode fullscreen = container->fullscreen_mode; 1379 enum sway_fullscreen_mode fullscreen = container->fullscreen_mode;
1380 bool scratchpad = container->scratchpad; 1380 bool scratchpad = container->scratchpad;
1381 struct sway_workspace *ws = NULL;
1381 if (fullscreen != FULLSCREEN_NONE) { 1382 if (fullscreen != FULLSCREEN_NONE) {
1382 container_fullscreen_disable(container); 1383 container_fullscreen_disable(container);
1383 } 1384 }
1384 if (scratchpad) { 1385 if (scratchpad) {
1386 ws = container->workspace;
1385 root_scratchpad_show(container); 1387 root_scratchpad_show(container);
1386 root_scratchpad_remove_container(container); 1388 root_scratchpad_remove_container(container);
1387 } 1389 }
@@ -1390,7 +1392,7 @@ void container_replace(struct sway_container *container,
1390 container_detach(container); 1392 container_detach(container);
1391 } 1393 }
1392 if (scratchpad) { 1394 if (scratchpad) {
1393 root_scratchpad_add_container(replacement); 1395 root_scratchpad_add_container(replacement, ws);
1394 } 1396 }
1395 switch (fullscreen) { 1397 switch (fullscreen) {
1396 case FULLSCREEN_WORKSPACE: 1398 case FULLSCREEN_WORKSPACE:
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
57void root_scratchpad_add_container(struct sway_container *con) { 57void 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}