implemented NET_ACTIVE_WINDOW support
This commit is contained in:
		
							
								
								
									
										5
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								client.c
									
									
									
									
									
								
							@@ -58,6 +58,8 @@ focus(Client *c)
 | 
				
			|||||||
	drawtitle(c);
 | 
						drawtitle(c);
 | 
				
			||||||
	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
 | 
						XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
 | 
				
			||||||
	XSync(dpy, False);
 | 
						XSync(dpy, False);
 | 
				
			||||||
 | 
						XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
 | 
				
			||||||
 | 
								PropModeReplace, (unsigned char *)&c->win, 1);
 | 
				
			||||||
	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
 | 
						while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -459,6 +461,9 @@ unmanage(Client *c)
 | 
				
			|||||||
	arrange(NULL);
 | 
						arrange(NULL);
 | 
				
			||||||
	if(sel)
 | 
						if(sel)
 | 
				
			||||||
		focus(sel);
 | 
							focus(sel);
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
 | 
				
			||||||
 | 
									PropModeReplace, (unsigned char *)NULL, 1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								dwm.h
									
									
									
									
									
								
							@@ -22,7 +22,7 @@ union Arg {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* atoms */
 | 
					/* atoms */
 | 
				
			||||||
enum { NetSupported, NetWMName, NetLast };
 | 
					enum { NetSupported, NetWMName, NetActiveWindow, NetLast };
 | 
				
			||||||
enum { WMProtocols, WMDelete, WMLast };
 | 
					enum { WMProtocols, WMDelete, WMLast };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* cursor */
 | 
					/* cursor */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								event.c
									
									
									
									
									
								
							@@ -145,6 +145,18 @@ buttonpress(XEvent *e)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					clientmessage(XEvent *e)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Client *c;
 | 
				
			||||||
 | 
						XClientMessageEvent *ev = &e->xclient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(ev->message_type == netatom[NetActiveWindow]) {
 | 
				
			||||||
 | 
							if((c = getclient(ev->window)) && c->tags[tsel])
 | 
				
			||||||
 | 
								focus(c);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
configurerequest(XEvent *e)
 | 
					configurerequest(XEvent *e)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -339,6 +351,7 @@ unmapnotify(XEvent *e)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void (*handler[LASTEvent]) (XEvent *) = {
 | 
					void (*handler[LASTEvent]) (XEvent *) = {
 | 
				
			||||||
	[ButtonPress] = buttonpress,
 | 
						[ButtonPress] = buttonpress,
 | 
				
			||||||
 | 
						[ClientMessage] = clientmessage,
 | 
				
			||||||
	[ConfigureRequest] = configurerequest,
 | 
						[ConfigureRequest] = configurerequest,
 | 
				
			||||||
	[DestroyNotify] = destroynotify,
 | 
						[DestroyNotify] = destroynotify,
 | 
				
			||||||
	[EnterNotify] = enternotify,
 | 
						[EnterNotify] = enternotify,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.c
									
									
									
									
									
								
							@@ -201,6 +201,7 @@ main(int argc, char *argv[])
 | 
				
			|||||||
	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
 | 
						wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
 | 
				
			||||||
	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
 | 
						netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
 | 
				
			||||||
	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
 | 
						netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
 | 
				
			||||||
 | 
						netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
 | 
				
			||||||
	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
 | 
						XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
 | 
				
			||||||
			PropModeReplace, (unsigned char *) netatom, NetLast);
 | 
								PropModeReplace, (unsigned char *) netatom, NetLast);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user