aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Ashworth <bosrsf04@gmail.com>2019-08-12 22:03:50 -0400
committerDrew DeVault <sir@cmpwn.com>2019-08-13 11:30:28 +0900
commitacd3db4fe1f8bfabc2e9edb8ac6cff706fdfaaf3 (patch)
tree0e4b1931fe3efdd134545f7a553d3177aa832381
parent3e33e1c76ff58154768a7789c946bd142f9f3dc2 (diff)
downloadsway-acd3db4fe1f8bfabc2e9edb8ac6cff706fdfaaf3.tar.xz
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
-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);
}