]> git.mdlowis.com Git - proto/labwc.git/commitdiff
ssd: eliminate ssd_hover_state (addressing a FIXME)
authorJohn Lindgren <john@jlindgren.net>
Wed, 3 Sep 2025 05:20:53 +0000 (01:20 -0400)
committerJohn Lindgren <john@jlindgren.net>
Sat, 6 Sep 2025 20:00:20 +0000 (16:00 -0400)
include/labwc.h
include/ssd-internal.h
include/ssd.h
src/input/cursor.c
src/input/touch.c
src/server.c
src/ssd/ssd-titlebar.c
src/ssd/ssd.c

index 0629a8b8cf3f1ce43e051b865e17a9d3acfa51e2..98e33575e9b046831d958dae10d58b45a596afc1 100644 (file)
@@ -225,7 +225,7 @@ struct server {
         */
        struct view *active_view;
 
-       struct ssd_hover_state *ssd_hover_state;
+       struct ssd_part_button *hovered_button;
 
        /* Tree for all non-layer xdg/xwayland-shell surfaces */
        struct wlr_scene_tree *view_tree;
index 13e5e422ced33a59b63e1411f10e13e79353aab2..d1af095e4436b579636019669eb45a0e73a3b6f9 100644 (file)
@@ -173,12 +173,6 @@ struct ssd_part_button {
        struct wl_list link; /* ssd_titlebar_subtree.buttons_{left,right} */
 };
 
-/* FIXME: This structure is redundant as ssd_part contains view */
-struct ssd_hover_state {
-       struct view *view;
-       struct ssd_part_button *button;
-};
-
 struct wlr_buffer;
 struct wlr_scene_tree;
 
index 4ab404e2624cff21ed8a4e0f8cff275ba4f94c4e..11fae7ab4e454812283a912a6b08648c010d3afe 100644 (file)
@@ -23,8 +23,8 @@ struct wlr_cursor;
 #define SSD_SHADOW_INSET 0.3
 
 /* Forward declare arguments */
+struct server;
 struct ssd;
-struct ssd_hover_state;
 struct ssd_part;
 struct view;
 struct wlr_scene;
@@ -52,9 +52,8 @@ void ssd_set_titlebar(struct ssd *ssd, bool enabled);
 void ssd_enable_keybind_inhibit_indicator(struct ssd *ssd, bool enable);
 void ssd_enable_shade(struct ssd *ssd, bool enable);
 
-struct ssd_hover_state *ssd_hover_state_new(void);
-void ssd_update_button_hover(struct wlr_scene_node *node,
-       struct ssd_hover_state *hover_state);
+void ssd_update_hovered_button(struct server *server,
+       struct wlr_scene_node *node);
 
 enum lab_node_type ssd_part_get_type(const struct ssd_part *part);
 struct view *ssd_part_get_view(const struct ssd_part *part);
index afbdd5e8492c8876a952613ebb6267d2ef7e7ba5..f25bce2d53adce926175d974276697c52991e738 100644 (file)
@@ -515,7 +515,7 @@ cursor_update_common(struct server *server, struct cursor_context *ctx,
        struct seat *seat = &server->seat;
        struct wlr_seat *wlr_seat = seat->seat;
 
-       ssd_update_button_hover(ctx->node, server->ssd_hover_state);
+       ssd_update_hovered_button(server, ctx->node);
 
        if (server->input_mode != LAB_INPUT_STATE_PASSTHROUGH) {
                /*
index 9abd999197600336ce36fe4ce224cb389a5837aa..9f4f1eca4cb0992c2dd2ab19366ae932ea01c19f 100644 (file)
@@ -206,7 +206,7 @@ handle_touch_up(struct wl_listener *listener, void *data)
                        } else {
                                cursor_emulate_button(seat, BTN_LEFT,
                                        WL_POINTER_BUTTON_STATE_RELEASED, event->time_msec);
-                               ssd_update_button_hover(NULL, seat->server->ssd_hover_state);
+                               ssd_update_hovered_button(seat->server, NULL);
                        }
                        wl_list_remove(&touch_point->link);
                        zfree(touch_point);
index 256d1bf5a6ec8aaad3705630cec2eb635dda6a60..f7273c12e0703d0fd88f645e43dee67c220db162 100644 (file)
@@ -549,8 +549,6 @@ server_init(struct server *server)
        wl_list_init(&server->views);
        wl_list_init(&server->unmanaged_surfaces);
 
-       server->ssd_hover_state = ssd_hover_state_new();
-
        server->scene = wlr_scene_create();
        if (!server->scene) {
                wlr_log(WLR_ERROR, "unable to create scene");
@@ -795,5 +793,4 @@ server_finish(struct server *server)
        wlr_scene_node_destroy(&server->scene->tree.node);
 
        wl_display_destroy(server->wl_display);
-       free(server->ssd_hover_state);
 }
index 5bd1bda998dca8e86f9bf76d578f97e37fe9c617..05cbdb9a4d39c8dab0e0ab7cabfc13b61b6556a7 100644 (file)
@@ -492,8 +492,7 @@ ssd_update_title(struct ssd *ssd)
 }
 
 void
-ssd_update_button_hover(struct wlr_scene_node *node,
-               struct ssd_hover_state *hover_state)
+ssd_update_hovered_button(struct server *server, struct wlr_scene_node *node)
 {
        struct ssd_part_button *button = NULL;
 
@@ -502,7 +501,7 @@ ssd_update_button_hover(struct wlr_scene_node *node,
                if (desc->type == LAB_NODE_DESC_SSD_PART) {
                        button = button_try_from_ssd_part(
                                        node_ssd_part_from_node(node));
-                       if (button == hover_state->button) {
+                       if (button == server->hovered_button) {
                                /* Cursor is still on the same button */
                                return;
                        }
@@ -510,15 +509,12 @@ ssd_update_button_hover(struct wlr_scene_node *node,
        }
 
        /* Disable old hover */
-       if (hover_state->button) {
-               update_button_state(hover_state->button, LAB_BS_HOVERED, false);
-               hover_state->view = NULL;
-               hover_state->button = NULL;
+       if (server->hovered_button) {
+               update_button_state(server->hovered_button, LAB_BS_HOVERED, false);
        }
+       server->hovered_button = button;
        if (button) {
                update_button_state(button, LAB_BS_HOVERED, true);
-               hover_state->view = button->base.view;
-               hover_state->button = button;
        }
 }
 
index cd6a9d019fa27357b9cdce9484e3ae418c5758a1..67d5966b61b72f448911fbb6b5128ea2303ee729 100644 (file)
@@ -264,11 +264,9 @@ ssd_destroy(struct ssd *ssd)
 
        /* Maybe reset hover view */
        struct view *view = ssd->view;
-       struct ssd_hover_state *hover_state;
-       hover_state = view->server->ssd_hover_state;
-       if (hover_state->view == view) {
-               hover_state->view = NULL;
-               hover_state->button = NULL;
+       struct server *server = view->server;
+       if (server->hovered_button && server->hovered_button->base.view == view) {
+               server->hovered_button = NULL;
        }
 
        /* Destroy subcomponents */
@@ -345,12 +343,6 @@ ssd_enable_keybind_inhibit_indicator(struct ssd *ssd, bool enable)
        wlr_scene_rect_set_color(ssd->border.subtrees[SSD_ACTIVE].top, color);
 }
 
-struct ssd_hover_state *
-ssd_hover_state_new(void)
-{
-       return znew(struct ssd_hover_state);
-}
-
 enum lab_node_type
 ssd_part_get_type(const struct ssd_part *part)
 {