mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	osd: show preview for windows on other workspaces
Written-by: @Consolatis
This commit is contained in:
		
							parent
							
								
									72a41058af
								
							
						
					
					
						commit
						4d68ee424a
					
				
					 2 changed files with 17 additions and 1 deletions
				
			
		| 
						 | 
					@ -337,6 +337,7 @@ struct server {
 | 
				
			||||||
		struct view *cycle_view;
 | 
							struct view *cycle_view;
 | 
				
			||||||
		bool preview_was_enabled;
 | 
							bool preview_was_enabled;
 | 
				
			||||||
		struct wlr_scene_node *preview_node;
 | 
							struct wlr_scene_node *preview_node;
 | 
				
			||||||
 | 
							struct wlr_scene_tree *preview_parent;
 | 
				
			||||||
		struct wlr_scene_node *preview_anchor;
 | 
							struct wlr_scene_node *preview_anchor;
 | 
				
			||||||
		struct multi_rect *preview_outline;
 | 
							struct multi_rect *preview_outline;
 | 
				
			||||||
	} osd_state;
 | 
						} osd_state;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										17
									
								
								src/osd.c
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								src/osd.c
									
										
									
									
									
								
							| 
						 | 
					@ -163,6 +163,9 @@ osd_preview_restore(struct server *server)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct osd_state *osd_state = &server->osd_state;
 | 
						struct osd_state *osd_state = &server->osd_state;
 | 
				
			||||||
	if (osd_state->preview_node) {
 | 
						if (osd_state->preview_node) {
 | 
				
			||||||
 | 
							wlr_scene_node_reparent(osd_state->preview_node,
 | 
				
			||||||
 | 
								osd_state->preview_parent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (osd_state->preview_anchor) {
 | 
							if (osd_state->preview_anchor) {
 | 
				
			||||||
			wlr_scene_node_place_above(osd_state->preview_node,
 | 
								wlr_scene_node_place_above(osd_state->preview_node,
 | 
				
			||||||
				osd_state->preview_anchor);
 | 
									osd_state->preview_anchor);
 | 
				
			||||||
| 
						 | 
					@ -176,6 +179,7 @@ osd_preview_restore(struct server *server)
 | 
				
			||||||
			wlr_scene_node_set_enabled(osd_state->preview_node, false);
 | 
								wlr_scene_node_set_enabled(osd_state->preview_node, false);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		osd_state->preview_node = NULL;
 | 
							osd_state->preview_node = NULL;
 | 
				
			||||||
 | 
							osd_state->preview_parent = NULL;
 | 
				
			||||||
		osd_state->preview_anchor = NULL;
 | 
							osd_state->preview_anchor = NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -190,8 +194,11 @@ preview_cycled_view(struct view *view)
 | 
				
			||||||
	/* Move previous selected node back to its original place */
 | 
						/* Move previous selected node back to its original place */
 | 
				
			||||||
	osd_preview_restore(view->server);
 | 
						osd_preview_restore(view->server);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Remember the sibling right before the selected node */
 | 
						/* Store some pointers so we can reset the preview later on */
 | 
				
			||||||
	osd_state->preview_node = &view->scene_tree->node;
 | 
						osd_state->preview_node = &view->scene_tree->node;
 | 
				
			||||||
 | 
						osd_state->preview_parent = view->scene_tree->node.parent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Remember the sibling right before the selected node */
 | 
				
			||||||
	osd_state->preview_anchor = lab_wlr_scene_get_prev_node(
 | 
						osd_state->preview_anchor = lab_wlr_scene_get_prev_node(
 | 
				
			||||||
		osd_state->preview_node);
 | 
							osd_state->preview_node);
 | 
				
			||||||
	while (osd_state->preview_anchor && !osd_state->preview_anchor->data) {
 | 
						while (osd_state->preview_anchor && !osd_state->preview_anchor->data) {
 | 
				
			||||||
| 
						 | 
					@ -206,6 +213,14 @@ preview_cycled_view(struct view *view)
 | 
				
			||||||
		wlr_scene_node_set_enabled(osd_state->preview_node, true);
 | 
							wlr_scene_node_set_enabled(osd_state->preview_node, true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * FIXME: This abuses an implementation detail of the always-on-top tree.
 | 
				
			||||||
 | 
						 *        Create a permanent server->osd_preview_tree instead that can
 | 
				
			||||||
 | 
						 *        also be used as parent for the preview outlines.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						wlr_scene_node_reparent(osd_state->preview_node,
 | 
				
			||||||
 | 
							view->server->view_tree_always_on_top);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Finally raise selected node to the top */
 | 
						/* Finally raise selected node to the top */
 | 
				
			||||||
	wlr_scene_node_raise_to_top(osd_state->preview_node);
 | 
						wlr_scene_node_raise_to_top(osd_state->preview_node);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue