mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	overlay: add inactivate_overlay() as refactoring
				
					
				
			This change brings a subtle behavioral change that region overlay is hidden immediately when the timer for edge overlay starts.
This commit is contained in:
		
							parent
							
								
									7c2fa5f8e2
								
							
						
					
					
						commit
						be491e0e4c
					
				
					 1 changed files with 25 additions and 18 deletions
				
			
		| 
						 | 
					@ -56,9 +56,19 @@ show_overlay(struct seat *seat, struct wlr_box *box)
 | 
				
			||||||
	wlr_scene_node_place_below(node, &view->scene_tree->node);
 | 
						wlr_scene_node_place_below(node, &view->scene_tree->node);
 | 
				
			||||||
	wlr_scene_node_set_position(node, box->x, box->y);
 | 
						wlr_scene_node_set_position(node, box->x, box->y);
 | 
				
			||||||
	wlr_scene_node_set_enabled(node, true);
 | 
						wlr_scene_node_set_enabled(node, true);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (seat->overlay.timer) {
 | 
					static void
 | 
				
			||||||
		wl_event_source_timer_update(seat->overlay.timer, 0);
 | 
					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);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,9 +78,8 @@ show_region_overlay(struct seat *seat, struct region *region)
 | 
				
			||||||
	if (region == seat->overlay.active.region) {
 | 
						if (region == seat->overlay.active.region) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						inactivate_overlay(&seat->overlay);
 | 
				
			||||||
	seat->overlay.active.region = region;
 | 
						seat->overlay.active.region = region;
 | 
				
			||||||
	seat->overlay.active.edge = VIEW_EDGE_INVALID;
 | 
					 | 
				
			||||||
	seat->overlay.active.output = NULL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	show_overlay(seat, ®ion->geo);
 | 
						show_overlay(seat, ®ion->geo);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -154,7 +163,7 @@ show_edge_overlay(struct seat *seat, enum view_edge edge,
 | 
				
			||||||
			&& seat->overlay.active.output == output) {
 | 
								&& seat->overlay.active.output == output) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	seat->overlay.active.region = NULL;
 | 
						inactivate_overlay(&seat->overlay);
 | 
				
			||||||
	seat->overlay.active.edge = edge;
 | 
						seat->overlay.active.edge = edge;
 | 
				
			||||||
	seat->overlay.active.output = output;
 | 
						seat->overlay.active.output = output;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -209,19 +218,17 @@ overlay_update(struct seat *seat)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
overlay_hide(struct seat *seat)
 | 
					overlay_hide(struct seat *seat)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	seat->overlay.active.region = NULL;
 | 
						struct overlay *overlay = &seat->overlay;
 | 
				
			||||||
	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 server *server = seat->server;
 | 
						struct server *server = seat->server;
 | 
				
			||||||
	struct wlr_scene_node *node = &seat->overlay.tree->node;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wlr_scene_node_set_enabled(node, false);
 | 
						inactivate_overlay(overlay);
 | 
				
			||||||
	wlr_scene_node_reparent(node, &server->scene->tree);
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * 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);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue