mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	Add ToggleAlwaysOnTop action
This commit is contained in:
		
							parent
							
								
									cfca377ca2
								
							
						
					
					
						commit
						6b4d9b9383
					
				
					 8 changed files with 44 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -24,6 +24,7 @@ enum action_type {
 | 
			
		|||
	ACTION_TYPE_TOGGLE_MAXIMIZE,
 | 
			
		||||
	ACTION_TYPE_TOGGLE_FULLSCREEN,
 | 
			
		||||
	ACTION_TYPE_TOGGLE_DECORATIONS,
 | 
			
		||||
	ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP,
 | 
			
		||||
	ACTION_TYPE_FOCUS,
 | 
			
		||||
	ACTION_TYPE_ICONIFY,
 | 
			
		||||
	ACTION_TYPE_MOVE,
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +47,7 @@ const char *action_names[] = {
 | 
			
		|||
	"ToggleMaximize",
 | 
			
		||||
	"ToggleFullscreen",
 | 
			
		||||
	"ToggleDecorations",
 | 
			
		||||
	"ToggleAlwaysOnTop",
 | 
			
		||||
	"Focus",
 | 
			
		||||
	"Iconify",
 | 
			
		||||
	"Move",
 | 
			
		||||
| 
						 | 
				
			
			@ -209,6 +211,11 @@ actions_run(struct view *activator, struct server *server,
 | 
			
		|||
				view_toggle_decorations(view);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP:
 | 
			
		||||
			if (view) {
 | 
			
		||||
				view_toggle_always_on_top(view);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case ACTION_TYPE_FOCUS:
 | 
			
		||||
			view = desktop_view_at_cursor(server);
 | 
			
		||||
			if (view) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,7 +111,12 @@ get_special(struct server *server, struct wlr_scene_node *node,
 | 
			
		|||
	if (node == &server->view_tree->node) {
 | 
			
		||||
		return "server->view_tree";
 | 
			
		||||
	}
 | 
			
		||||
	if (node->parent == &server->view_tree->node) {
 | 
			
		||||
	if (node == &server->view_tree_always_on_top->node) {
 | 
			
		||||
		return "server->view_tree_always_on_top";
 | 
			
		||||
	}
 | 
			
		||||
	if (node->parent == &server->view_tree->node ||
 | 
			
		||||
			node->parent == &server->view_tree_always_on_top->node) {
 | 
			
		||||
		*last_view = node_view_from_node(node);
 | 
			
		||||
		*last_view = node_view_from_node(node);
 | 
			
		||||
	}
 | 
			
		||||
	const char *view_part = get_view_part(*last_view, node);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -452,6 +452,8 @@ menu_init_windowmenu(struct server *server)
 | 
			
		|||
		fill_item("name.action", "ToggleFullscreen");
 | 
			
		||||
		current_item = item_create(menu, "Decorations");
 | 
			
		||||
		fill_item("name.action", "ToggleDecorations");
 | 
			
		||||
		current_item = item_create(menu, "AlwaysOnTop");
 | 
			
		||||
		fill_item("name.action", "ToggleAlwaysOnTop");
 | 
			
		||||
		current_item = item_create(menu, "Close");
 | 
			
		||||
		fill_item("name.action", "Close");
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -235,6 +235,7 @@ server_init(struct server *server)
 | 
			
		|||
		exit(EXIT_FAILURE);
 | 
			
		||||
	}
 | 
			
		||||
	server->view_tree = wlr_scene_tree_create(&server->scene->node);
 | 
			
		||||
	server->view_tree_always_on_top = wlr_scene_tree_create(&server->scene->node);
 | 
			
		||||
#if HAVE_XWAYLAND
 | 
			
		||||
	server->unmanaged_tree = wlr_scene_tree_create(&server->scene->node);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										19
									
								
								src/view.c
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								src/view.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -281,6 +281,25 @@ view_toggle_decorations(struct view *view)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
is_always_on_top(struct view *view)
 | 
			
		||||
{
 | 
			
		||||
	return view->scene_tree->node.parent ==
 | 
			
		||||
		&view->server->view_tree_always_on_top->node;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
view_toggle_always_on_top(struct view *view)
 | 
			
		||||
{
 | 
			
		||||
	if (is_always_on_top(view)) {
 | 
			
		||||
		wlr_scene_node_reparent(&view->scene_tree->node,
 | 
			
		||||
			&view->server->view_tree->node);
 | 
			
		||||
	} else {
 | 
			
		||||
		wlr_scene_node_reparent(&view->scene_tree->node,
 | 
			
		||||
			&view->server->view_tree_always_on_top->node);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
view_set_decorations(struct view *view, bool decorations)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue