aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sway/extensions.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/sway/extensions.c b/sway/extensions.c
index 40702e28..5fee7d38 100644
--- a/sway/extensions.c
+++ b/sway/extensions.c
@@ -65,10 +65,20 @@ void lock_surface_destructor(struct wl_resource *resource) {
65 if (surface == resource) { 65 if (surface == resource) {
66 list_del(desktop_shell.lock_surfaces, i); 66 list_del(desktop_shell.lock_surfaces, i);
67 arrange_windows(&root_container, -1, -1); 67 arrange_windows(&root_container, -1, -1);
68 desktop_shell.is_locked = false;
69 break; 68 break;
70 } 69 }
71 } 70 }
71 if (desktop_shell.lock_surfaces->length == 0) {
72 sway_log(L_DEBUG, "Desktop shell unlocked");
73 desktop_shell.is_locked = false;
74
75 // We need to now give focus back to the focus which we internally
76 // track, since when we lock sway we don't actually change our internal
77 // focus tracking.
78 swayc_t *focus = get_focused_container(swayc_active_workspace());
79 set_focused_container(focus);
80 wlc_view_focus(focus->handle);
81 }
72} 82}
73 83
74static void set_background(struct wl_client *client, struct wl_resource *resource, 84static 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
157 desktop_shell.is_locked = true; 167 desktop_shell.is_locked = true;
158 input_init(); 168 input_init();
159 arrange_windows(workspace, -1, -1); 169 arrange_windows(workspace, -1, -1);
160 swayc_t *focus_output = swayc_active_output();
161 if (focus_output == output) {
162 set_focused_container(view);
163 }
164 list_add(desktop_shell.lock_surfaces, surface); 170 list_add(desktop_shell.lock_surfaces, surface);
165 wl_resource_set_destructor(surface, lock_surface_destructor); 171 wl_resource_set_destructor(surface, lock_surface_destructor);
166 } else { 172 } else {