Signed-off-by: Jonas Ådahl <jad...@gmail.com>
---
 desktop-shell/shell.c | 37 ++++++++++++++++++-------------------
 1 file changed, 18 insertions(+), 19 deletions(-)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index c66a976..ff17b04 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -1393,14 +1393,28 @@ workspace_has_only(struct workspace *ws, struct 
weston_surface *surface)
 }
 
 static void
+surface_keyboard_focus_lost(struct weston_surface *surface)
+{
+       struct weston_compositor *compositor = surface->compositor;
+       struct weston_seat *seat;
+       struct weston_surface *focus;
+
+       wl_list_for_each(seat, &compositor->seat_list, link) {
+               if (!seat->keyboard)
+                       continue;
+               focus = weston_surface_get_main_surface(seat->keyboard->focus);
+               if (focus == surface)
+                       weston_keyboard_set_focus(seat->keyboard, NULL);
+       }
+}
+
+static void
 move_surface_to_workspace(struct desktop_shell *shell,
                           struct shell_surface *shsurf,
                           uint32_t workspace)
 {
        struct workspace *from;
        struct workspace *to;
-       struct weston_seat *seat;
-       struct weston_surface *focus;
        struct weston_view *view;
 
        if (workspace == shell->workspaces.current)
@@ -1424,14 +1438,7 @@ move_surface_to_workspace(struct desktop_shell *shell,
        shell_surface_update_child_surface_layers(shsurf);
 
        drop_focus_state(shell, from, view->surface);
-       wl_list_for_each(seat, &shell->compositor->seat_list, link) {
-               if (!seat->keyboard)
-                       continue;
-
-               focus = weston_surface_get_main_surface(seat->keyboard->focus);
-               if (focus == view->surface)
-                       weston_keyboard_set_focus(seat->keyboard, NULL);
-       }
+       surface_keyboard_focus_lost(view->surface);
 
        weston_view_damage_below(view);
 }
@@ -2665,8 +2672,6 @@ set_minimized(struct weston_surface *surface)
 {
        struct shell_surface *shsurf;
        struct workspace *current_ws;
-       struct weston_seat *seat;
-       struct weston_surface *focus;
        struct weston_view *view;
 
        view = get_default_view(surface);
@@ -2682,13 +2687,7 @@ set_minimized(struct weston_surface *surface)
        weston_layer_entry_insert(&shsurf->shell->minimized_layer.view_list, 
&view->layer_link);
 
        drop_focus_state(shsurf->shell, current_ws, view->surface);
-       wl_list_for_each(seat, &shsurf->shell->compositor->seat_list, link) {
-               if (!seat->keyboard)
-                       continue;
-               focus = weston_surface_get_main_surface(seat->keyboard->focus);
-               if (focus == view->surface)
-                       weston_keyboard_set_focus(seat->keyboard, NULL);
-       }
+       surface_keyboard_focus_lost(surface);
 
        shell_surface_update_child_surface_layers(shsurf);
        weston_view_damage_below(view);
-- 
2.1.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to