mirror of
				https://github.com/labwc/labwc.git
				synced 2025-10-29 05:40:24 -04:00 
			
		
		
		
	window-rules: add ignoreFocusRequest property
This allows to reject focus requests from specific applications.
This commit is contained in:
		
							parent
							
								
									272222e3c9
								
							
						
					
					
						commit
						bb235337d8
					
				
					 6 changed files with 21 additions and 0 deletions
				
			
		|  | @ -482,6 +482,9 @@ situation. | |||
| 	*skipWindowSwitcher* removes window from the Window Switcher (alt-tab | ||||
| 	on-screen-display) | ||||
| 
 | ||||
| *<windowRules><windowRule ignoreFocusRequest="">* [yes|no|default] | ||||
| 	*ignoreFocusRequest* prevent window to activate itself. | ||||
| 
 | ||||
| ## ENVIRONMENT VARIABLES | ||||
| 
 | ||||
| *XCURSOR_THEME* and *XCURSOR_SIZE* are supported to set cursor theme | ||||
|  |  | |||
|  | @ -29,6 +29,7 @@ struct window_rule { | |||
| 	enum property server_decoration; | ||||
| 	enum property skip_taskbar; | ||||
| 	enum property skip_window_switcher; | ||||
| 	enum property ignore_focus_request; | ||||
| 
 | ||||
| 	struct wl_list link; /* struct rcxml.window_rules */ | ||||
| }; | ||||
|  |  | |||
|  | @ -150,6 +150,8 @@ fill_window_rule(char *nodename, char *content) | |||
| 		set_property(content, ¤t_window_rule->skip_taskbar); | ||||
| 	} else if (!strcasecmp(nodename, "skipWindowSwitcher")) { | ||||
| 		set_property(content, ¤t_window_rule->skip_window_switcher); | ||||
| 	} else if (!strcasecmp(nodename, "ignoreFocusRequest")) { | ||||
| 		set_property(content, ¤t_window_rule->ignore_focus_request); | ||||
| 
 | ||||
| 	/* Actions */ | ||||
| 	} else if (!strcmp(nodename, "name.action")) { | ||||
|  |  | |||
|  | @ -124,6 +124,10 @@ window_rules_get_property(struct view *view, const char *property) | |||
| 					&& !strcasecmp(property, "skipWindowSwitcher")) { | ||||
| 				return rule->skip_window_switcher; | ||||
| 			} | ||||
| 			if (rule->ignore_focus_request | ||||
| 					&& !strcasecmp(property, "ignoreFocusRequest")) { | ||||
| 				return rule->ignore_focus_request; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return LAB_PROP_UNSPECIFIED; | ||||
|  |  | |||
|  | @ -590,6 +590,11 @@ xdg_activation_handle_request(struct wl_listener *listener, void *data) | |||
| 	 * for the seat / serial being correct and then allow the request. | ||||
| 	 */ | ||||
| 
 | ||||
| 	if (window_rules_get_property(view, "ignoreFocusRequest") == LAB_PROP_TRUE) { | ||||
| 		wlr_log(WLR_INFO, "Ignoring focus request due to window rule configuration"); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * TODO: This is the exact same code as used in foreign.c. | ||||
| 	 *       Refactor it into a public helper function somewhere. | ||||
|  |  | |||
|  | @ -285,6 +285,12 @@ handle_request_activate(struct wl_listener *listener, void *data) | |||
| 	struct xwayland_view *xwayland_view = | ||||
| 		wl_container_of(listener, xwayland_view, request_activate); | ||||
| 	struct view *view = &xwayland_view->base; | ||||
| 
 | ||||
| 	if (window_rules_get_property(view, "ignoreFocusRequest") == LAB_PROP_TRUE) { | ||||
| 		wlr_log(WLR_INFO, "Ignoring focus request due to window rule configuration"); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	desktop_focus_and_activate_view(&view->server->seat, view); | ||||
| 	view_move_to_front(view); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Consolatis
						Consolatis