Merge pull request #1014 from cyphar/swaylock-fix-focus

sway: extensions: make locking give back focus
This commit is contained in:
Drew DeVault 2016-12-26 09:06:20 -07:00 committed by GitHub
commit 725582c2f1

View file

@ -65,10 +65,20 @@ void lock_surface_destructor(struct wl_resource *resource) {
if (surface == resource) { if (surface == resource) {
list_del(desktop_shell.lock_surfaces, i); list_del(desktop_shell.lock_surfaces, i);
arrange_windows(&root_container, -1, -1); arrange_windows(&root_container, -1, -1);
desktop_shell.is_locked = false;
break; break;
} }
} }
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);
}
} }
static void set_background(struct wl_client *client, struct wl_resource *resource, static void set_background(struct wl_client *client, struct wl_resource *resource,
@ -157,10 +167,6 @@ static void set_lock_surface(struct wl_client *client, struct wl_resource *resou
desktop_shell.is_locked = true; desktop_shell.is_locked = true;
input_init(); input_init();
arrange_windows(workspace, -1, -1); 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); list_add(desktop_shell.lock_surfaces, surface);
wl_resource_set_destructor(surface, lock_surface_destructor); wl_resource_set_destructor(surface, lock_surface_destructor);
} else { } else {