wlr_scene_node_place_below(node, &view->scene_tree->node);
wlr_scene_node_set_position(node, box->x, box->y);
wlr_scene_node_set_enabled(node, true);
+}
- if (seat->overlay.timer) {
- wl_event_source_timer_update(seat->overlay.timer, 0);
+static void
+inactivate_overlay(struct overlay *overlay)
+{
+ if (overlay->tree) {
+ wlr_scene_node_set_enabled(&overlay->tree->node, false);
+ }
+ overlay->active.region = NULL;
+ overlay->active.edge = VIEW_EDGE_INVALID;
+ overlay->active.output = NULL;
+ if (overlay->timer) {
+ wl_event_source_timer_update(overlay->timer, 0);
}
}
if (region == seat->overlay.active.region) {
return;
}
+ inactivate_overlay(&seat->overlay);
seat->overlay.active.region = region;
- seat->overlay.active.edge = VIEW_EDGE_INVALID;
- seat->overlay.active.output = NULL;
show_overlay(seat, ®ion->geo);
}
&& seat->overlay.active.output == output) {
return;
}
- seat->overlay.active.region = NULL;
+ inactivate_overlay(&seat->overlay);
seat->overlay.active.edge = edge;
seat->overlay.active.output = output;
void
overlay_hide(struct seat *seat)
{
- seat->overlay.active.region = NULL;
- seat->overlay.active.edge = VIEW_EDGE_INVALID;
- seat->overlay.active.output = NULL;
- if (seat->overlay.timer) {
- wl_event_source_timer_update(seat->overlay.timer, 0);
- }
-
- if (!seat->overlay.tree) {
- return;
- }
+ struct overlay *overlay = &seat->overlay;
struct server *server = seat->server;
- struct wlr_scene_node *node = &seat->overlay.tree->node;
- wlr_scene_node_set_enabled(node, false);
- wlr_scene_node_reparent(node, &server->scene->tree);
+ inactivate_overlay(overlay);
+
+ /*
+ * Reparent the rectangle nodes to server's scene-tree so they don't
+ * get destroyed on view destruction
+ */
+ if (seat->overlay.tree) {
+ wlr_scene_node_reparent(&overlay->tree->node,
+ &server->scene->tree);
+ }
}