aewl
changeset 734:6283adb1fcf2
replaced getproto with a saner function, now old-school artifacts of WM times in the early 90s completely disappeared, no punned pointer warning anymore ;)
author | Anselm R. Garbe <arg@suckless.org> |
---|---|
date | Wed, 07 Feb 2007 12:37:06 +0100 |
parents | 1950833a5614 |
children | 9ede7b2d2450 |
files | client.c config.mk dwm.h event.c main.c |
diffstat | 5 files changed, 20 insertions(+), 31 deletions(-) [+] |
line diff
1.1 --- a/client.c Tue Feb 06 15:29:19 2007 +0100 1.2 +++ b/client.c Wed Feb 07 12:37:06 2007 +0100 1.3 @@ -120,11 +120,26 @@ 1.4 return NULL; 1.5 } 1.6 1.7 +Bool 1.8 +isprotodel(Client *c) { 1.9 + int i, n; 1.10 + Atom *protocols; 1.11 + Bool ret = False; 1.12 + 1.13 + if(XGetWMProtocols(dpy, c->win, &protocols, &n)) { 1.14 + for(i = 0; !ret && i < n; i++) 1.15 + if(protocols[i] == wmatom[WMDelete]) 1.16 + ret = True; 1.17 + XFree(protocols); 1.18 + } 1.19 + return ret; 1.20 +} 1.21 + 1.22 void 1.23 killclient(Arg *arg) { 1.24 if(!sel) 1.25 return; 1.26 - if(sel->proto & PROTODELWIN) 1.27 + if(isprotodel(sel)) 1.28 sendevent(sel->win, wmatom[WMProtocols], wmatom[WMDelete]); 1.29 else 1.30 XKillClient(dpy, sel->win); 1.31 @@ -159,7 +174,6 @@ 1.32 c->y = way; 1.33 } 1.34 updatesizehints(c); 1.35 - c->proto = getproto(c->win); 1.36 XSelectInput(dpy, c->win, 1.37 StructureNotifyMask | PropertyChangeMask | EnterWindowMask); 1.38 XGetTransientForHint(dpy, c->win, &trans);
2.1 --- a/config.mk Tue Feb 06 15:29:19 2007 +0100 2.2 +++ b/config.mk Wed Feb 07 12:37:06 2007 +0100 2.3 @@ -17,8 +17,8 @@ 2.4 # flags 2.5 CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" 2.6 LDFLAGS = ${LIBS} 2.7 -#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" 2.8 -#LDFLAGS = -g ${LIBS} 2.9 +CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" 2.10 +LDFLAGS = -g ${LIBS} 2.11 2.12 # Solaris 2.13 #CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
3.1 --- a/dwm.h Tue Feb 06 15:29:19 2007 +0100 3.2 +++ b/dwm.h Wed Feb 07 12:37:06 2007 +0100 3.3 @@ -36,8 +36,6 @@ 3.4 3.5 /* mask shorthands, used in event.c and client.c */ 3.6 #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) 3.7 -/* other stuff used in different places */ 3.8 -#define PROTODELWIN 1 3.9 3.10 enum { NetSupported, NetWMName, NetLast }; /* EWMH atoms */ 3.11 enum { WMProtocols, WMDelete, WMState, WMLast }; /* default atoms */ 3.12 @@ -69,14 +67,13 @@ 3.13 typedef struct Client Client; 3.14 struct Client { 3.15 char name[256]; 3.16 - int proto; 3.17 int x, y, w, h; 3.18 int rx, ry, rw, rh; /* revert geometry */ 3.19 int basew, baseh, incw, inch, maxw, maxh, minw, minh; 3.20 int minax, minay, maxax, maxay; 3.21 long flags; 3.22 unsigned int border; 3.23 - Bool isfloat, isfixed, ismax; 3.24 + Bool isfixed, isfloat, ismax; 3.25 Bool *tags; 3.26 Client *next; 3.27 Client *prev; 3.28 @@ -105,6 +102,7 @@ 3.29 extern void configure(Client *c); /* send synthetic configure event */ 3.30 extern void focus(Client *c); /* focus c, c may be NULL */ 3.31 extern Client *getclient(Window w); /* return client of w */ 3.32 +extern Bool isprotodel(Client *c); /* returns True if c->win supports wmatom[WMDelete] */ 3.33 extern void killclient(Arg *arg); /* kill c nicely */ 3.34 extern void manage(Window w, XWindowAttributes *wa); /* manage new client */ 3.35 extern void resize(Client *c, Bool sizehints); /* resize c*/ 3.36 @@ -123,7 +121,6 @@ 3.37 extern void procevent(void); /* process pending X events */ 3.38 3.39 /* main.c */ 3.40 -extern int getproto(Window w); /* return protocol mask of WMProtocols property of w */ 3.41 extern void quit(Arg *arg); /* quit dwm nicely */ 3.42 extern void sendevent(Window w, Atom a, long value); /* send synthetic event to w */ 3.43 extern int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error handler */
4.1 --- a/event.c Tue Feb 06 15:29:19 2007 +0100 4.2 +++ b/event.c Wed Feb 07 12:37:06 2007 +0100 4.3 @@ -308,10 +308,6 @@ 4.4 if(ev->state == PropertyDelete) 4.5 return; /* ignore */ 4.6 if((c = getclient(ev->window))) { 4.7 - if(ev->atom == wmatom[WMProtocols]) { 4.8 - c->proto = getproto(c->win); 4.9 - return; 4.10 - } 4.11 switch (ev->atom) { 4.12 default: break; 4.13 case XA_WM_TRANSIENT_FOR:
5.1 --- a/main.c Tue Feb 06 15:29:19 2007 +0100 5.2 +++ b/main.c Wed Feb 07 12:37:06 2007 +0100 5.3 @@ -172,24 +172,6 @@ 5.4 5.5 /* extern */ 5.6 5.7 -int 5.8 -getproto(Window w) { 5.9 - int i, format, protos, status; 5.10 - unsigned long extra, res; 5.11 - Atom *protocols, real; 5.12 - 5.13 - protos = 0; 5.14 - status = XGetWindowProperty(dpy, w, wmatom[WMProtocols], 0L, 20L, False, 5.15 - XA_ATOM, &real, &format, &res, &extra, (unsigned char **)&protocols); 5.16 - if(status != Success || protocols == 0) 5.17 - return protos; 5.18 - for(i = 0; i < res; i++) 5.19 - if(protocols[i] == wmatom[WMDelete]) 5.20 - protos |= PROTODELWIN; 5.21 - free(protocols); 5.22 - return protos; 5.23 -} 5.24 - 5.25 void 5.26 sendevent(Window w, Atom a, long value) { 5.27 XEvent e;