From 954d2f824157476d12112b1a59b5e07089388bc6 Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Fri, 22 Feb 2019 23:09:39 -0500 Subject: [PATCH] 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`. --- sway/input/seat.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sway/input/seat.c b/sway/input/seat.c index 69b048430..6482a47cb 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) { struct sway_node *focus = seat_get_focus(seat); if (node->type == N_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. + if (seat->workspace == node->sway_workspace) { + struct sway_node *node = seat_get_focus_inactive(seat, &root->node); + seat_set_focus(seat, NULL); + if (node) { + seat_set_focus(seat, node); + } else { + seat->workspace = NULL; + } + } seat_node_destroy(seat_node); return; }