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); | ||||
| } | ||||
| 
 | ||||
| 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 | ||||
| xerrordummy(Display *dsply, XErrorEvent *ee) { | ||||
| 	return 0; | ||||
| @ -169,6 +176,7 @@ manage(Window w, XWindowAttributes *wa) { | ||||
| 	stack = clients = c; | ||||
| 	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | ||||
| 	XMapWindow(dpy, c->win); | ||||
| 	setclientstate(c, NormalState); | ||||
| 	if(isvisible(c)) | ||||
| 		focus(c); | ||||
| 	arrange(); | ||||
| @ -293,6 +301,7 @@ unmanage(Client *c) { | ||||
| 		focus(nc); | ||||
| 	} | ||||
| 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | ||||
| 	setclientstate(c, WithdrawnState); | ||||
| 	free(c->tags); | ||||
| 	free(c); | ||||
| 	XSync(dpy, False); | ||||
|  | ||||
							
								
								
									
										2
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								dwm.h
									
									
									
									
									
								
							| @ -40,7 +40,7 @@ | ||||
| #define PROTODELWIN		1 | ||||
| 
 | ||||
| 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 { ColBorder, ColFG, ColBG, ColLast };		/* color */ | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										1
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.c
									
									
									
									
									
								
							| @ -92,6 +92,7 @@ setup(void) { | ||||
| 	/* init atoms */ | ||||
| 	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | ||||
| 	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); | ||||
| 	wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); | ||||
| 	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); | ||||
| 	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); | ||||
| 	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user