handling WM_STATE seems to make DnD in gtk/qt apps working, well let's handle this in dwm as well
This commit is contained in:
		
							parent
							
								
									7e98db251e
								
							
						
					
					
						commit
						a5cb80b86c
					
				
							
								
								
									
										9
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								client.c
									
									
									
									
									
								
							| @ -53,6 +53,13 @@ grabbuttons(Client *c, Bool focused) { | |||||||
| 				GrabModeAsync, GrabModeSync, None, None); | 				GrabModeAsync, GrabModeSync, None, None); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void | ||||||
|  | setclientstate(Client *c, long state) { | ||||||
|  | 	long data[] = {state, None}; | ||||||
|  | 	XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32, | ||||||
|  | 			PropModeReplace, (unsigned char *)data, 2); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static int | static int | ||||||
| xerrordummy(Display *dsply, XErrorEvent *ee) { | xerrordummy(Display *dsply, XErrorEvent *ee) { | ||||||
| 	return 0; | 	return 0; | ||||||
| @ -169,6 +176,7 @@ manage(Window w, XWindowAttributes *wa) { | |||||||
| 	stack = clients = c; | 	stack = clients = c; | ||||||
| 	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | 	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | ||||||
| 	XMapWindow(dpy, c->win); | 	XMapWindow(dpy, c->win); | ||||||
|  | 	setclientstate(c, NormalState); | ||||||
| 	if(isvisible(c)) | 	if(isvisible(c)) | ||||||
| 		focus(c); | 		focus(c); | ||||||
| 	arrange(); | 	arrange(); | ||||||
| @ -293,6 +301,7 @@ unmanage(Client *c) { | |||||||
| 		focus(nc); | 		focus(nc); | ||||||
| 	} | 	} | ||||||
| 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | ||||||
|  | 	setclientstate(c, WithdrawnState); | ||||||
| 	free(c->tags); | 	free(c->tags); | ||||||
| 	free(c); | 	free(c); | ||||||
| 	XSync(dpy, False); | 	XSync(dpy, False); | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								dwm.h
									
									
									
									
									
								
							| @ -40,7 +40,7 @@ | |||||||
| #define PROTODELWIN		1 | #define PROTODELWIN		1 | ||||||
| 
 | 
 | ||||||
| enum { NetSupported, NetWMName, NetLast };		/* EWMH atoms */ | enum { NetSupported, NetWMName, NetLast };		/* EWMH atoms */ | ||||||
| enum { WMProtocols, WMDelete, WMLast };			/* default atoms */ | enum { WMProtocols, WMDelete, WMState, WMLast };	/* default atoms */ | ||||||
| enum { CurNormal, CurResize, CurMove, CurLast };	/* cursor */ | enum { CurNormal, CurResize, CurMove, CurLast };	/* cursor */ | ||||||
| enum { ColBorder, ColFG, ColBG, ColLast };		/* color */ | enum { ColBorder, ColFG, ColBG, ColLast };		/* color */ | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.c
									
									
									
									
									
								
							| @ -92,6 +92,7 @@ setup(void) { | |||||||
| 	/* init atoms */ | 	/* init atoms */ | ||||||
| 	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | 	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | ||||||
| 	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); | 	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); | ||||||
|  | 	wmatom[WMState] = XInternAtom(dpy, "WM_STATE", 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); | ||||||
| 	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, | 	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user