diff --git a/kiwmi/desktop/view.c b/kiwmi/desktop/view.c index fdc5cc0..efd0d66 100644 --- a/kiwmi/desktop/view.c +++ b/kiwmi/desktop/view.c @@ -111,6 +111,13 @@ view_set_hidden(struct kiwmi_view *view, bool hidden) wlr_scene_node_set_enabled(&view->desktop_surface.tree->node, !hidden); wlr_scene_node_set_enabled( &view->desktop_surface.popups_tree->node, !hidden); + + struct kiwmi_server *server = + wl_container_of(view->desktop, server, desktop); + struct kiwmi_seat *seat = server->input.seat; + if (seat->focused_view == view) { + seat->focused_view = NULL; + } } struct kiwmi_view * diff --git a/kiwmi/desktop/xdg_shell.c b/kiwmi/desktop/xdg_shell.c index eac3839..733de40 100644 --- a/kiwmi/desktop/xdg_shell.c +++ b/kiwmi/desktop/xdg_shell.c @@ -51,6 +51,11 @@ xdg_surface_unmap_notify(struct wl_listener *listener, void *UNUSED(data)) struct kiwmi_server *server = wl_container_of(view->desktop, server, desktop); cursor_refresh_focus(server->input.cursor, NULL, NULL, NULL); + + struct kiwmi_seat *seat = server->input.seat; + if (seat->focused_view == view) { + seat->focused_view = NULL; + } } wl_signal_emit(&view->events.unmap, view); @@ -81,15 +86,6 @@ xdg_surface_destroy_notify(struct wl_listener *listener, void *UNUSED(data)) wlr_scene_node_destroy(&view->desktop_surface.tree->node); wlr_scene_node_destroy(&view->desktop_surface.popups_tree->node); - struct kiwmi_desktop *desktop = view->desktop; - struct kiwmi_server *server = wl_container_of(desktop, server, desktop); - struct kiwmi_seat *seat = server->input.seat; - - if (seat->focused_view == view) { - seat->focused_view = NULL; - } - cursor_refresh_focus(server->input.cursor, NULL, NULL, NULL); - if (view->decoration) { view->decoration->view = NULL; }