replaced getproto with a saner function, now old-school artifacts of WM times in the early 90s completely disappeared, no punned pointer warning anymore ;)
This commit is contained in:
		
							parent
							
								
									44ef3f5a07
								
							
						
					
					
						commit
						28ffff801b
					
				
							
								
								
									
										18
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								client.c
									
									
									
									
									
								
							| @ -120,11 +120,26 @@ getclient(Window w) { | ||||
| 	return NULL; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| isprotodel(Client *c) { | ||||
| 	int i, n; | ||||
| 	Atom *protocols; | ||||
| 	Bool ret = False; | ||||
| 
 | ||||
| 	if(XGetWMProtocols(dpy, c->win, &protocols, &n)) { | ||||
| 		for(i = 0; !ret && i < n; i++) | ||||
| 			if(protocols[i] == wmatom[WMDelete]) | ||||
| 				ret = True; | ||||
| 		XFree(protocols); | ||||
| 	} | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| killclient(Arg *arg) { | ||||
| 	if(!sel) | ||||
| 		return; | ||||
| 	if(sel->proto & PROTODELWIN) | ||||
| 	if(isprotodel(sel)) | ||||
| 		sendevent(sel->win, wmatom[WMProtocols], wmatom[WMDelete]); | ||||
| 	else | ||||
| 		XKillClient(dpy, sel->win); | ||||
| @ -159,7 +174,6 @@ manage(Window w, XWindowAttributes *wa) { | ||||
| 			c->y = way; | ||||
| 	} | ||||
| 	updatesizehints(c); | ||||
| 	c->proto = getproto(c->win); | ||||
| 	XSelectInput(dpy, c->win, | ||||
| 		StructureNotifyMask | PropertyChangeMask | EnterWindowMask); | ||||
| 	XGetTransientForHint(dpy, c->win, &trans); | ||||
|  | ||||
| @ -17,8 +17,8 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 | ||||
| # flags
 | ||||
| CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" | ||||
| LDFLAGS = ${LIBS} | ||||
| #CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
 | ||||
| #LDFLAGS = -g ${LIBS}
 | ||||
| CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" | ||||
| LDFLAGS = -g ${LIBS} | ||||
| 
 | ||||
| # Solaris
 | ||||
| #CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
 | ||||
|  | ||||
							
								
								
									
										7
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								dwm.h
									
									
									
									
									
								
							| @ -36,8 +36,6 @@ | ||||
| 
 | ||||
| /* mask shorthands, used in event.c and client.c */ | ||||
| #define BUTTONMASK		(ButtonPressMask | ButtonReleaseMask) | ||||
| /* other stuff used in different places */ | ||||
| #define PROTODELWIN		1 | ||||
| 
 | ||||
| enum { NetSupported, NetWMName, NetLast };		/* EWMH atoms */ | ||||
| enum { WMProtocols, WMDelete, WMState, WMLast };	/* default atoms */ | ||||
| @ -69,14 +67,13 @@ typedef struct { | ||||
| typedef struct Client Client; | ||||
| struct Client { | ||||
| 	char name[256]; | ||||
| 	int proto; | ||||
| 	int x, y, w, h; | ||||
| 	int rx, ry, rw, rh; /* revert geometry */ | ||||
| 	int basew, baseh, incw, inch, maxw, maxh, minw, minh; | ||||
| 	int minax, minay, maxax, maxay; | ||||
| 	long flags;  | ||||
| 	unsigned int border; | ||||
| 	Bool isfloat, isfixed, ismax; | ||||
| 	Bool isfixed, isfloat, ismax; | ||||
| 	Bool *tags; | ||||
| 	Client *next; | ||||
| 	Client *prev; | ||||
| @ -105,6 +102,7 @@ extern Window root, barwin; | ||||
| extern void configure(Client *c);		/* send synthetic configure event */ | ||||
| extern void focus(Client *c);			/* focus c, c may be NULL */ | ||||
| extern Client *getclient(Window w);		/* return client of w */ | ||||
| extern Bool isprotodel(Client *c);		/* returns True if c->win supports wmatom[WMDelete] */ | ||||
| extern void killclient(Arg *arg);		/* kill c nicely */ | ||||
| extern void manage(Window w, XWindowAttributes *wa);	/* manage new client */ | ||||
| extern void resize(Client *c, Bool sizehints);	/* resize c*/ | ||||
| @ -123,7 +121,6 @@ extern void grabkeys(void);			/* grab all keys defined in config.h */ | ||||
| extern void procevent(void);			/* process pending X events */ | ||||
| 
 | ||||
| /* main.c */ | ||||
| extern int getproto(Window w);			/* return protocol mask of WMProtocols property of w */ | ||||
| extern void quit(Arg *arg);			/* quit dwm nicely */ | ||||
| extern void sendevent(Window w, Atom a, long value);	/* send synthetic event to w */ | ||||
| extern int xerror(Display *dsply, XErrorEvent *ee);	/* dwm's X error handler */ | ||||
|  | ||||
							
								
								
									
										4
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								event.c
									
									
									
									
									
								
							| @ -308,10 +308,6 @@ propertynotify(XEvent *e) { | ||||
| 	if(ev->state == PropertyDelete) | ||||
| 		return; /* ignore */ | ||||
| 	if((c = getclient(ev->window))) { | ||||
| 		if(ev->atom == wmatom[WMProtocols]) { | ||||
| 			c->proto = getproto(c->win); | ||||
| 			return; | ||||
| 		} | ||||
| 		switch (ev->atom) { | ||||
| 			default: break; | ||||
| 			case XA_WM_TRANSIENT_FOR: | ||||
|  | ||||
							
								
								
									
										18
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								main.c
									
									
									
									
									
								
							| @ -172,24 +172,6 @@ xerrorstart(Display *dsply, XErrorEvent *ee) { | ||||
| 
 | ||||
| /* extern */ | ||||
| 
 | ||||
| int | ||||
| getproto(Window w) { | ||||
| 	int i, format, protos, status; | ||||
| 	unsigned long extra, res; | ||||
| 	Atom *protocols, real; | ||||
| 
 | ||||
| 	protos = 0; | ||||
| 	status = XGetWindowProperty(dpy, w, wmatom[WMProtocols], 0L, 20L, False, | ||||
| 			XA_ATOM, &real, &format, &res, &extra, (unsigned char **)&protocols); | ||||
| 	if(status != Success || protocols == 0) | ||||
| 		return protos; | ||||
| 	for(i = 0; i < res; i++) | ||||
| 		if(protocols[i] == wmatom[WMDelete]) | ||||
| 			protos |= PROTODELWIN; | ||||
| 	free(protocols); | ||||
| 	return protos; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| sendevent(Window w, Atom a, long value) { | ||||
| 	XEvent e; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R. Garbe
						Anselm R. Garbe