diff options
author | Drew DeVault <sir@cmpwn.com> | 2016-12-26 09:06:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-26 09:06:20 -0700 |
commit | 725582c2f1fdb4aed7175f313274fbac605420d6 (patch) | |
tree | e2978c06bc8cce8fbcb94d3bb397871ff08d6eb2 | |
parent | Update default swaybar command (diff) | |
parent | sway: extensions: make locking give back focus (diff) | |
download | sway-725582c2f1fdb4aed7175f313274fbac605420d6.tar.gz sway-725582c2f1fdb4aed7175f313274fbac605420d6.tar.zst sway-725582c2f1fdb4aed7175f313274fbac605420d6.zip |
sway: extensions: make locking give back focus
-rw-r--r-- | sway/extensions.c | 16 |
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 | ||
74 | static void set_background(struct wl_client *client, struct wl_resource *resource, | 84 | 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 | |||
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 { |