]> git.mdlowis.com Git - proto/labwc.git/commitdiff
layer: update pointer focus on popup destruction
authortokyo4j <hrak1529@gmail.com>
Thu, 19 Dec 2024 10:01:08 +0000 (19:01 +0900)
committerHiroaki Yamamoto <hrak1529@gmail.com>
Thu, 19 Dec 2024 15:43:06 +0000 (00:43 +0900)
Same as previous commit

include/layers.h
src/layers.c

index 827c2adac9b162cfb9cb1c35591be3534312ebb9..2b816a198e8379ef80abc17cb7f46cd1c93a6a1b 100644 (file)
@@ -25,6 +25,7 @@ struct lab_layer_surface {
 struct lab_layer_popup {
        struct wlr_xdg_popup *wlr_popup;
        struct wlr_scene_tree *scene_tree;
+       struct server *server;
 
        /* To simplify moving popup nodes from the bottom to the top layer */
        struct wlr_box output_toplevel_sx_box;
index a5ca7315f7147b3058b0f71b7534e6f9f631b647..fc0b2b6ff26ee19f3b06241feedd5f395ce5dc9d 100644 (file)
@@ -363,6 +363,8 @@ popup_handle_destroy(struct wl_listener *listener, void *data)
                wl_list_remove(&popup->commit.link);
        }
 
+       cursor_update_focus(popup->server);
+
        free(popup);
 }
 
@@ -394,9 +396,11 @@ popup_handle_reposition(struct wl_listener *listener, void *data)
 static void popup_handle_new_popup(struct wl_listener *listener, void *data);
 
 static struct lab_layer_popup *
-create_popup(struct wlr_xdg_popup *wlr_popup, struct wlr_scene_tree *parent)
+create_popup(struct server *server, struct wlr_xdg_popup *wlr_popup,
+               struct wlr_scene_tree *parent)
 {
        struct lab_layer_popup *popup = znew(*popup);
+       popup->server = server;
        popup->wlr_popup = wlr_popup;
        popup->scene_tree =
                wlr_scene_xdg_surface_create(parent, wlr_popup->base);
@@ -433,7 +437,8 @@ popup_handle_new_popup(struct wl_listener *listener, void *data)
        struct lab_layer_popup *lab_layer_popup =
                wl_container_of(listener, lab_layer_popup, new_popup);
        struct wlr_xdg_popup *wlr_popup = data;
-       struct lab_layer_popup *new_popup = create_popup(wlr_popup,
+       struct lab_layer_popup *new_popup = create_popup(
+               lab_layer_popup->server, wlr_popup,
                lab_layer_popup->scene_tree);
 
        if (!new_popup) {
@@ -500,7 +505,8 @@ handle_new_popup(struct wl_listener *listener, void *data)
                .width = output_box.width,
                .height = output_box.height,
        };
-       struct lab_layer_popup *popup = create_popup(wlr_popup, surface->tree);
+       struct lab_layer_popup *popup =
+               create_popup(server, wlr_popup, surface->tree);
        if (!popup) {
                wl_resource_post_no_memory(wlr_popup->resource);
                wlr_xdg_popup_destroy(wlr_popup);