all repos — dwm @ 28ffff801bb0137ec3fe4093afc4fb29784b17ec

my dwm build

replaced getproto with a saner function, now old-school artifacts of WM times in the early 90s completely disappeared, no punned pointer warning anymore ;)
Anselm R. Garbe arg@suckless.org
Wed, 07 Feb 2007 12:37:06 +0100
commit

28ffff801bb0137ec3fe4093afc4fb29784b17ec

parent

44ef3f5a07753ecaeacc2fb180e90bf4479ab975

5 files changed, 20 insertions(+), 31 deletions(-)

jump to
M client.cclient.c

@@ -120,11 +120,26 @@ return c;

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 @@ if(c->y < way)

c->y = way; } updatesizehints(c); - c->proto = getproto(c->win); XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | EnterWindowMask); XGetTransientForHint(dpy, c->win, &trans);
M config.mkconfig.mk

@@ -17,8 +17,8 @@

# 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}\"
M dwm.hdwm.h

@@ -36,8 +36,6 @@ #include <X11/Xlib.h>

/* 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 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 @@ /* client.c */

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 */
M event.cevent.c

@@ -308,10 +308,6 @@

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:
M main.cmain.c

@@ -172,24 +172,6 @@ }

/* 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;