diff options
Diffstat (limited to 'sway/tree/output.c')
-rw-r--r-- | sway/tree/output.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sway/tree/output.c b/sway/tree/output.c index 1202ba3c..7867c6bc 100644 --- a/sway/tree/output.c +++ b/sway/tree/output.c | |||
@@ -60,6 +60,27 @@ static void restore_workspaces(struct sway_output *output) { | |||
60 | struct sway_workspace *ws = root->noop_output->workspaces->items[0]; | 60 | struct sway_workspace *ws = root->noop_output->workspaces->items[0]; |
61 | workspace_detach(ws); | 61 | workspace_detach(ws); |
62 | output_add_workspace(output, ws); | 62 | output_add_workspace(output, ws); |
63 | |||
64 | // If the floater was made floating while on the NOOP output, its width | ||
65 | // and height will be zero and it should be reinitialized as a floating | ||
66 | // container to get the appropriate size and location. Additionally, if | ||
67 | // the floater is wider or taller than the output or is completely | ||
68 | // outside of the output's bounds, do the same as the output layout has | ||
69 | // likely changed and the maximum size needs to be checked and the | ||
70 | // floater re-centered | ||
71 | for (int i = 0; i < ws->floating->length; i++) { | ||
72 | struct sway_container *floater = ws->floating->items[i]; | ||
73 | if (floater->width == 0 || floater->height == 0 || | ||
74 | floater->width > output->width || | ||
75 | floater->height > output->height || | ||
76 | floater->x > output->lx + output->width || | ||
77 | floater->y > output->ly + output->height || | ||
78 | floater->x + floater->width < output->lx || | ||
79 | floater->y + floater->height < output->ly) { | ||
80 | container_init_floating(floater); | ||
81 | } | ||
82 | } | ||
83 | |||
63 | ipc_event_workspace(NULL, ws, "move"); | 84 | ipc_event_workspace(NULL, ws, "move"); |
64 | } | 85 | } |
65 | 86 | ||