Button passthrough when client is not focused
Before this change it is not possible to press a button in a client on the first click if the client is not yet focused. The first click on the button would only focus the client and a second click on the button is needed to activate it. This situation can occur when moving the mouse over a client (therefore focusing it) and then moving the focus to another client with keyboard shortcuts. After this commit the behavior is fixed and button presses on unfocused clients are passed to the client correctly.
This commit is contained in:
		
				
					committed by
					
						 Anselm R Garbe
						Anselm R Garbe
					
				
			
			
				
	
			
			
			
						parent
						
							2952b68db8
						
					
				
				
					commit
					022d076054
				
			
							
								
								
									
										21
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								dwm.c
									
									
									
									
									
								
							| @@ -446,6 +446,8 @@ buttonpress(XEvent *e) | ||||
| 			click = ClkWinTitle; | ||||
| 	} else if ((c = wintoclient(ev->window))) { | ||||
| 		focus(c); | ||||
| 		restack(selmon); | ||||
| 		XAllowEvents(dpy, ReplayPointer, CurrentTime); | ||||
| 		click = ClkClientWin; | ||||
| 	} | ||||
| 	for (i = 0; i < LENGTH(buttons); i++) | ||||
| @@ -932,17 +934,16 @@ grabbuttons(Client *c, int focused) | ||||
| 		unsigned int i, j; | ||||
| 		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; | ||||
| 		XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | ||||
| 		if (focused) { | ||||
| 			for (i = 0; i < LENGTH(buttons); i++) | ||||
| 				if (buttons[i].click == ClkClientWin) | ||||
| 					for (j = 0; j < LENGTH(modifiers); j++) | ||||
| 						XGrabButton(dpy, buttons[i].button, | ||||
| 						            buttons[i].mask | modifiers[j], | ||||
| 						            c->win, False, BUTTONMASK, | ||||
| 						            GrabModeAsync, GrabModeSync, None, None); | ||||
| 		} else | ||||
| 		if (!focused) | ||||
| 			XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, | ||||
| 			            BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); | ||||
| 			            BUTTONMASK, GrabModeSync, GrabModeSync, None, None); | ||||
| 		for (i = 0; i < LENGTH(buttons); i++) | ||||
| 			if (buttons[i].click == ClkClientWin) | ||||
| 				for (j = 0; j < LENGTH(modifiers); j++) | ||||
| 					XGrabButton(dpy, buttons[i].button, | ||||
| 					            buttons[i].mask | modifiers[j], | ||||
| 					            c->win, False, BUTTONMASK, | ||||
| 					            GrabModeAsync, GrabModeSync, None, None); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user