mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-10-28 02:34:15 +00:00 
			
		
		
		
	Don't let overlays lose focus
if you open a new window while an overlay is mapped, the overlay should stay focused
This commit is contained in:
		
							parent
							
								
									8de18f9bb4
								
							
						
					
					
						commit
						ae798c694a
					
				
							
								
								
									
										18
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								dwl.c
									
									
									
									
									
								
							| @ -256,6 +256,7 @@ static void setmfact(const Arg *arg); | ||||
| static void setmon(Client *c, Monitor *m, unsigned int newtags); | ||||
| static void setup(void); | ||||
| static void sigchld(int unused); | ||||
| static bool shouldfocusclients(); | ||||
| static void spawn(const Arg *arg); | ||||
| static void tag(const Arg *arg); | ||||
| static void tagmon(const Arg *arg); | ||||
| @ -1037,6 +1038,7 @@ focusclient(Client *old, Client *c, int lift) | ||||
| 	} | ||||
| 
 | ||||
| 	/* Have a client, so focus its top-level wlr_surface */ | ||||
| 	if (shouldfocusclients(c->mon)) | ||||
| 		wlr_seat_keyboard_notify_enter(seat, WLR_SURFACE(c), | ||||
| 				kb->keycodes, kb->num_keycodes, &kb->modifiers); | ||||
| 
 | ||||
| @ -1979,6 +1981,22 @@ sigchld(int unused) | ||||
| 		; | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| shouldfocusclients(Monitor *m) | ||||
| { | ||||
| 	LayerSurface *layersurface; | ||||
| 	uint32_t layers_above_shell[] = { | ||||
| 		ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY, | ||||
| 		ZWLR_LAYER_SHELL_V1_LAYER_TOP, | ||||
| 	}; | ||||
| 	for (unsigned int i = 0; i < LENGTH(layers_above_shell); ++i) | ||||
| 		wl_list_for_each(layersurface, &m->layers[layers_above_shell[i]], link) | ||||
| 			if (layersurface->layer_surface->current.keyboard_interactive && | ||||
| 					!layersurface->unmapping) | ||||
| 				return false; | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| spawn(const Arg *arg) | ||||
| { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Guido Cella
						Guido Cella