aboutsummaryrefslogtreecommitdiff
path: root/sway/tree/output.c
diff options
context:
space:
mode:
authorRyan Dwyer <ryandwyer1@gmail.com>2019-01-17 20:16:23 +1000
committeremersion <contact@emersion.fr>2019-01-22 09:55:13 +0100
commit2301349ad59751640ed9e59dd22edeafaf09da39 (patch)
tree1726c2f8ec1cd9baaf27fbed62aa6a337bc85ce7 /sway/tree/output.c
parentab0248a54564b2f644b6fb367f9eb44fe0bf5f3c (diff)
Use noop output when there's no outputs connected
Instead of having NULL workspace->output pointers, use a noop output. This should be safer.
Diffstat (limited to 'sway/tree/output.c')
-rw-r--r--sway/tree/output.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/sway/tree/output.c b/sway/tree/output.c
index 50a2c535..5a992f2d 100644
--- a/sway/tree/output.c
+++ b/sway/tree/output.c
@@ -57,12 +57,12 @@ static void restore_workspaces(struct sway_output *output) {
}
// Saved workspaces
- for (int i = 0; i < root->saved_workspaces->length; ++i) {
- struct sway_workspace *ws = root->saved_workspaces->items[i];
+ while (root->noop_output->workspaces->length) {
+ struct sway_workspace *ws = root->noop_output->workspaces->items[0];
+ workspace_detach(ws);
output_add_workspace(output, ws);
ipc_event_workspace(NULL, ws, "move");
}
- root->saved_workspaces->length = 0;
output_sort_workspaces(output);
}
@@ -177,6 +177,9 @@ static void output_evacuate(struct sway_output *output) {
if (!new_output) {
new_output = fallback_output;
}
+ if (!new_output) {
+ new_output = root->noop_output;
+ }
if (workspace_is_empty(workspace)) {
// If floating is not empty, there are sticky containers to move
@@ -187,14 +190,10 @@ static void output_evacuate(struct sway_output *output) {
continue;
}
- if (new_output) {
- workspace_output_add_priority(workspace, new_output);
- output_add_workspace(new_output, workspace);
- output_sort_workspaces(new_output);
- ipc_event_workspace(NULL, workspace, "move");
- } else {
- list_add(root->saved_workspaces, workspace);
- }
+ workspace_output_add_priority(workspace, new_output);
+ output_add_workspace(new_output, workspace);
+ output_sort_workspaces(new_output);
+ ipc_event_workspace(NULL, workspace, "move");
}
}