aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2016-12-26 19:35:12 +1100
committerFurkan Sahin <furkan-dev@proton.me>2016-12-26 19:35:12 +1100
commit6749fbf093539a17b86895102a07d9a0d764337b (patch)
treee2978c06bc8cce8fbcb94d3bb397871ff08d6eb2
parent37149b7cb861c542339d8d1f66c6ceda7584e6f1 (diff)
sway: extensions: make locking give back focus
Don't switch the internal tracking of focus to the swaylock surface, to allow for switching back to the previously active window (or the currently active window, if some new process changed). Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
-rw-r--r--sway/extensions.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/sway/extensions.c b/sway/extensions.c
index 547aa931..5fee7d38 100644
--- a/sway/extensions.c
+++ b/sway/extensions.c
@@ -69,7 +69,15 @@ void lock_surface_destructor(struct wl_resource *resource) {
}
}
if (desktop_shell.lock_surfaces->length == 0) {
+ sway_log(L_DEBUG, "Desktop shell unlocked");
desktop_shell.is_locked = false;
+
+ // We need to now give focus back to the focus which we internally
+ // track, since when we lock sway we don't actually change our internal
+ // focus tracking.
+ swayc_t *focus = get_focused_container(swayc_active_workspace());
+ set_focused_container(focus);
+ wlc_view_focus(focus->handle);
}
}
@@ -159,10 +167,6 @@ static void set_lock_surface(struct wl_client *client, struct wl_resource *resou
desktop_shell.is_locked = true;
input_init();
arrange_windows(workspace, -1, -1);
- swayc_t *focus_output = swayc_active_output();
- if (focus_output == output) {
- set_focused_container(view);
- }
list_add(desktop_shell.lock_surfaces, surface);
wl_resource_set_destructor(surface, lock_surface_destructor);
} else {