fixed focus steeling bug done by clients like opera
This commit is contained in:
		
							parent
							
								
									4380db468a
								
							
						
					
					
						commit
						68ff133857
					
				
							
								
								
									
										15
									
								
								dwm.c
								
								
								
								
							
							
						
						
									
										15
									
								
								dwm.c
								
								
								
								
							| 
						 | 
				
			
			@ -137,6 +137,7 @@ void eprint(const char *errstr, ...);
 | 
			
		|||
void expose(XEvent *e);
 | 
			
		||||
void floating(void); /* default floating layout */
 | 
			
		||||
void focus(Client *c);
 | 
			
		||||
void focusin(XEvent *e);
 | 
			
		||||
void focusnext(const char *arg);
 | 
			
		||||
void focusprev(const char *arg);
 | 
			
		||||
Client *getclient(Window w);
 | 
			
		||||
| 
						 | 
				
			
			@ -206,9 +207,10 @@ void (*handler[LASTEvent]) (XEvent *) = {
 | 
			
		|||
	[ConfigureNotify] = configurenotify,
 | 
			
		||||
	[DestroyNotify] = destroynotify,
 | 
			
		||||
	[EnterNotify] = enternotify,
 | 
			
		||||
	[LeaveNotify] = leavenotify,
 | 
			
		||||
	[Expose] = expose,
 | 
			
		||||
	[FocusIn] = focusin,
 | 
			
		||||
	[KeyPress] = keypress,
 | 
			
		||||
	[LeaveNotify] = leavenotify,
 | 
			
		||||
	[MappingNotify] = mappingnotify,
 | 
			
		||||
	[MapRequest] = maprequest,
 | 
			
		||||
	[PropertyNotify] = propertynotify,
 | 
			
		||||
| 
						 | 
				
			
			@ -709,6 +711,14 @@ focus(Client *c) {
 | 
			
		|||
		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
focusin(XEvent *e) { /* there are some broken focus acquiring clients */
 | 
			
		||||
	XFocusChangeEvent *ev = &e->xfocus;
 | 
			
		||||
 | 
			
		||||
	if(sel && ev->window != sel->win)
 | 
			
		||||
		XSetInputFocus(dpy, sel->win, RevertToPointerRoot, CurrentTime);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
focusnext(const char *arg) {
 | 
			
		||||
	Client *c;
 | 
			
		||||
| 
						 | 
				
			
			@ -1026,8 +1036,7 @@ manage(Window w, XWindowAttributes *wa) {
 | 
			
		|||
	XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
 | 
			
		||||
	configure(c); /* propagates border_width, if size doesn't change */
 | 
			
		||||
	updatesizehints(c);
 | 
			
		||||
	XSelectInput(dpy, w,
 | 
			
		||||
		StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
 | 
			
		||||
	XSelectInput(dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask);
 | 
			
		||||
	grabbuttons(c, False);
 | 
			
		||||
	updatetitle(c);
 | 
			
		||||
	if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue