mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	src/workspaces.c: prevent re-focus for always-on-top views
Before this patch a focused always-on-top view lost its keyboard focus when switching workspaces. Now the view keeps its focus.
This commit is contained in:
		
							parent
							
								
									f7c8663f67
								
							
						
					
					
						commit
						e39fd341ec
					
				
					 3 changed files with 12 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -522,9 +522,10 @@ view_toggle_decorations(struct view *view)
 | 
			
		|||
	view_set_decorations(view, !view->ssd_enabled);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
is_always_on_top(struct view *view)
 | 
			
		||||
bool
 | 
			
		||||
view_is_always_on_top(struct view *view)
 | 
			
		||||
{
 | 
			
		||||
	assert(view);
 | 
			
		||||
	return view->scene_tree->node.parent ==
 | 
			
		||||
		view->server->view_tree_always_on_top;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -533,7 +534,7 @@ void
 | 
			
		|||
view_toggle_always_on_top(struct view *view)
 | 
			
		||||
{
 | 
			
		||||
	assert(view);
 | 
			
		||||
	if (is_always_on_top(view)) {
 | 
			
		||||
	if (view_is_always_on_top(view)) {
 | 
			
		||||
		view->workspace = view->server->workspace_current;
 | 
			
		||||
		wlr_scene_node_reparent(&view->scene_tree->node,
 | 
			
		||||
			view->workspace->tree);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,7 @@
 | 
			
		|||
#include "common/list.h"
 | 
			
		||||
#include "common/mem.h"
 | 
			
		||||
#include "labwc.h"
 | 
			
		||||
#include "view.h"
 | 
			
		||||
#include "workspaces.h"
 | 
			
		||||
 | 
			
		||||
/* Internal helpers */
 | 
			
		||||
| 
						 | 
				
			
			@ -259,13 +260,14 @@ workspaces_switch_to(struct workspace *target)
 | 
			
		|||
	/* Make sure new views will spawn on the new workspace */
 | 
			
		||||
	server->workspace_current = target;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	/*
 | 
			
		||||
	 * Make sure we are focusing what the user sees.
 | 
			
		||||
	 *
 | 
			
		||||
	 * TODO: This is an issue for always-on-top views as they will
 | 
			
		||||
	 * loose keyboard focus once switching to another workspace.
 | 
			
		||||
	 * Only refocus if the focus is not already on an always-on-top view.
 | 
			
		||||
	 */
 | 
			
		||||
	desktop_focus_topmost_mapped_view(target->server);
 | 
			
		||||
	struct view *view = desktop_focused_view(server);
 | 
			
		||||
	if (!view || !view_is_always_on_top(view)) {
 | 
			
		||||
		desktop_focus_topmost_mapped_view(server);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* And finally show the OSD */
 | 
			
		||||
	_osd_show(server);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue