diff --git a/include/labwc.h b/include/labwc.h index 0629a8b8..98e33575 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -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; diff --git a/include/ssd-internal.h b/include/ssd-internal.h index 13e5e422..d1af095e 100644 --- a/include/ssd-internal.h +++ b/include/ssd-internal.h @@ -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; diff --git a/include/ssd.h b/include/ssd.h index 4ab404e2..11fae7ab 100644 --- a/include/ssd.h +++ b/include/ssd.h @@ -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); diff --git a/src/input/cursor.c b/src/input/cursor.c index afbdd5e8..f25bce2d 100644 --- a/src/input/cursor.c +++ b/src/input/cursor.c @@ -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) { /* diff --git a/src/input/touch.c b/src/input/touch.c index 9abd9991..9f4f1eca 100644 --- a/src/input/touch.c +++ b/src/input/touch.c @@ -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); diff --git a/src/server.c b/src/server.c index 256d1bf5..f7273c12 100644 --- a/src/server.c +++ b/src/server.c @@ -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); } diff --git a/src/ssd/ssd-titlebar.c b/src/ssd/ssd-titlebar.c index 5bd1bda9..05cbdb9a 100644 --- a/src/ssd/ssd-titlebar.c +++ b/src/ssd/ssd-titlebar.c @@ -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; } } diff --git a/src/ssd/ssd.c b/src/ssd/ssd.c index cd6a9d01..67d5966b 100644 --- a/src/ssd/ssd.c +++ b/src/ssd/ssd.c @@ -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) {