*/
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;
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;
#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;
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);
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) {
/*
} 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);
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");
wlr_scene_node_destroy(&server->scene->tree.node);
wl_display_destroy(server->wl_display);
- free(server->ssd_hover_state);
}
}
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;
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;
}
}
/* 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;
}
}
/* 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 */
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)
{