mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	Move isfocusable() from desktop.c to view.c
This commit is contained in:
		
							parent
							
								
									602d59a3b2
								
							
						
					
					
						commit
						e5a6c57a6e
					
				
					 5 changed files with 29 additions and 24 deletions
				
			
		| 
						 | 
				
			
			@ -45,7 +45,7 @@ desktop_focus_and_activate_view(struct seat *seat, struct view *view)
 | 
			
		|||
	/*
 | 
			
		||||
	 * Guard against views with no mapped surfaces when handling
 | 
			
		||||
	 * 'request_activate' and 'request_minimize'.
 | 
			
		||||
	 * See notes by isfocusable()
 | 
			
		||||
	 * See notes by view_isfocusable()
 | 
			
		||||
	 */
 | 
			
		||||
	if (!view->surface) {
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -81,23 +81,6 @@ desktop_focus_and_activate_view(struct seat *seat, struct view *view)
 | 
			
		|||
	seat_focus_surface(seat, view->surface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Some xwayland apps produce unmapped surfaces on startup and also leave
 | 
			
		||||
 * some unmapped surfaces kicking around on 'close' (for example leafpad's
 | 
			
		||||
 * "about" dialogue). Whilst this is not normally a problem, we have to be
 | 
			
		||||
 * careful when cycling between views. The only views we should focus are
 | 
			
		||||
 * those that are already mapped and those that have been minimized.
 | 
			
		||||
 */
 | 
			
		||||
bool
 | 
			
		||||
isfocusable(struct view *view)
 | 
			
		||||
{
 | 
			
		||||
	/* filter out those xwayland surfaces that have never been mapped */
 | 
			
		||||
	if (!view->surface) {
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	return (view->mapped || view->minimized);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct wl_list *
 | 
			
		||||
get_prev_item(struct wl_list *item)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +105,7 @@ first_view(struct server *server)
 | 
			
		|||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		struct view *view = node_view_from_node(node);
 | 
			
		||||
		if (isfocusable(view)) {
 | 
			
		||||
		if (view_isfocusable(view)) {
 | 
			
		||||
			return view;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +177,7 @@ desktop_cycle_view(struct server *server, struct view *start_view,
 | 
			
		|||
		view = node_view_from_node(node);
 | 
			
		||||
 | 
			
		||||
		enum property skip = window_rules_get_property(view, "skipWindowSwitcher");
 | 
			
		||||
		if (isfocusable(view) && skip != LAB_PROP_TRUE) {
 | 
			
		||||
		if (view_isfocusable(view) && skip != LAB_PROP_TRUE) {
 | 
			
		||||
			return view;
 | 
			
		||||
		}
 | 
			
		||||
	} while (view != start_view);
 | 
			
		||||
| 
						 | 
				
			
			@ -269,7 +252,7 @@ desktop_focus_output(struct output *output)
 | 
			
		|||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		view = node_view_from_node(node);
 | 
			
		||||
		if (!isfocusable(view)) {
 | 
			
		||||
		if (!view_isfocusable(view)) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		if (wlr_output_layout_intersects(layout,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -475,7 +475,7 @@ osd_update(struct server *server)
 | 
			
		|||
 | 
			
		||||
	/* Outline current window */
 | 
			
		||||
	if (rc.window_switcher.outlines) {
 | 
			
		||||
		if (isfocusable(server->osd_state.cycle_view)) {
 | 
			
		||||
		if (view_isfocusable(server->osd_state.cycle_view)) {
 | 
			
		||||
			osd_update_preview_outlines(server->osd_state.cycle_view);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								src/view.c
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								src/view.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -22,7 +22,7 @@
 | 
			
		|||
static bool
 | 
			
		||||
matches_criteria(struct view *view, enum lab_view_criteria criteria)
 | 
			
		||||
{
 | 
			
		||||
	if (!isfocusable(view)) {
 | 
			
		||||
	if (!view_isfocusable(view)) {
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	if (criteria & LAB_VIEW_CRITERIA_CURRENT_WORKSPACE) {
 | 
			
		||||
| 
						 | 
				
			
			@ -80,6 +80,15 @@ view_array_append(struct server *server, struct wl_array *views,
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool
 | 
			
		||||
view_isfocusable(struct view *view)
 | 
			
		||||
{
 | 
			
		||||
	if (!view->surface) {
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	return (view->mapped || view->minimized);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * All view_apply_xxx_geometry() functions must *not* modify
 | 
			
		||||
 * any state besides repositioning or resizing the view.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue