aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-02-22 23:09:39 -0500
committerLibravatar Drew DeVault <sir@cmpwn.com>2019-02-25 17:10:04 -0500
commit41a771ae235d9062b8743ff632fbd747f13dac3b (patch)
tree664f7d49c2ce1df2a6d906d3c0be43cd538fdfa0
parenthandle_layer_shell_surface: do not use noop output (diff)
downloadsway-41a771ae235d9062b8743ff632fbd747f13dac3b.tar.gz
sway-41a771ae235d9062b8743ff632fbd747f13dac3b.tar.zst
sway-41a771ae235d9062b8743ff632fbd747f13dac3b.zip
handle_seat_node_destroy: update seat->workspace
If an unmanaged or layer surface is focused when an output gets disabled and an empty workspace on the output was focused by the seat, the seat needs to refocus it's focus inactive to update the value of `seat->workspace`.
-rw-r--r--sway/input/seat.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c
index 69b04843..6482a47c 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -146,6 +146,19 @@ static void handle_seat_node_destroy(struct wl_listener *listener, void *data) {
146 struct sway_node *focus = seat_get_focus(seat); 146 struct sway_node *focus = seat_get_focus(seat);
147 147
148 if (node->type == N_WORKSPACE) { 148 if (node->type == N_WORKSPACE) {
149 // If an unmanaged or layer surface is focused when an output gets
150 // disabled and an empty workspace on the output was focused by the
151 // seat, the seat needs to refocus it's focus inactive to update the
152 // value of seat->workspace.
153 if (seat->workspace == node->sway_workspace) {
154 struct sway_node *node = seat_get_focus_inactive(seat, &root->node);
155 seat_set_focus(seat, NULL);
156 if (node) {
157 seat_set_focus(seat, node);
158 } else {
159 seat->workspace = NULL;
160 }
161 }
149 seat_node_destroy(seat_node); 162 seat_node_destroy(seat_node);
150 return; 163 return;
151 } 164 }