summaryrefslogtreecommitdiff
path: root/sway/tree/workspace.c
diff options
context:
space:
mode:
authorBrian Ashworth <[email protected]>2019-08-12 22:03:50 -0400
committerDrew DeVault <[email protected]>2019-08-13 11:30:28 +0900
commitacd3db4fe1f8bfabc2e9edb8ac6cff706fdfaaf3 (patch)
tree0e4b1931fe3efdd134545f7a553d3177aa832381 /sway/tree/workspace.c
parent3e33e1c76ff58154768a7789c946bd142f9f3dc2 (diff)
workspace: do not destroy if any seat is focusing
Since each seat has its own focus, do not destroy a workspace until it is no longer focused by any seat. This prevents seats from being forced to evacuate the workspace just because another seat switched focus away from it
Diffstat (limited to 'sway/tree/workspace.c')
-rw-r--r--sway/tree/workspace.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c
index 30cf3ebe..3ad5de06 100644
--- a/sway/tree/workspace.c
+++ b/sway/tree/workspace.c
@@ -155,9 +155,19 @@ void workspace_consider_destroy(struct sway_workspace *ws) {
if (ws->tiling->length || ws->floating->length) {
return;
}
+
if (ws->output && output_get_active_workspace(ws->output) == ws) {
return;
}
+
+ struct sway_seat *seat;
+ wl_list_for_each(seat, &server.input->seats, link) {
+ struct sway_node *node = seat_get_focus_inactive(seat, &root->node);
+ if (node == &ws->node) {
+ return;
+ }
+ }
+
workspace_begin_destroy(ws);
}