aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/container.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-09-06 22:34:09 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-09-06 22:34:09 +1000
commit635ae9557c09780005f8817198ce3cd98d1b8436 (patch)
treefe5acdd42e4a8d4ac7b17cfbd09d52a7f8e7dcee /sway/tree/container.c
parentMerge pull request #2591 from RyanDwyer/fix-workspace-switch (diff)
downloadsway-635ae9557c09780005f8817198ce3cd98d1b8436.tar.gz
sway-635ae9557c09780005f8817198ce3cd98d1b8436.tar.zst
sway-635ae9557c09780005f8817198ce3cd98d1b8436.zip
Second attempt at restoring focus when closing a fullscreen view
To reproduce the problem this is fixing, create H[view view view], fullscreen one of the views and close it. The entire workspace will be given focus rather than one of the siblings. This happens because we emit the destroy event, so the seat code tries to find a new focus, but the view it finds is still believed to be hidden by the fullscreen view so it's discarded and the workspace is used instead. This clears the workspace's fullscreen pointer prior to emitting the destroy event so that the seat code finds an appropriate new focus.
Diffstat (limited to 'sway/tree/container.c')
-rw-r--r--sway/tree/container.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 50f284f4..cbbb1f56 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -84,6 +84,11 @@ void container_begin_destroy(struct sway_container *con) {
84 if (con->view) { 84 if (con->view) {
85 ipc_event_window(con, "close"); 85 ipc_event_window(con, "close");
86 } 86 }
87 // The workspace must have the fullscreen pointer cleared so that the
88 // seat code can find an appropriate new focus.
89 if (con->is_fullscreen && con->workspace) {
90 con->workspace->fullscreen = NULL;
91 }
87 wl_signal_emit(&con->node.events.destroy, &con->node); 92 wl_signal_emit(&con->node.events.destroy, &con->node);
88 93
89 container_end_mouse_operation(con); 94 container_end_mouse_operation(con);