URI: 
       replaced getproto with a saner function, now old-school artifacts of WM times in the early 90s completely disappeared, no punned pointer warning anymore ;) - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 28ffff801bb0137ec3fe4093afc4fb29784b17ec
   DIR parent 44ef3f5a07753ecaeacc2fb180e90bf4479ab975
  HTML Author: Anselm R. Garbe <arg@suckless.org>
       Date:   Wed,  7 Feb 2007 12:37:06 +0100
       
       replaced getproto with a saner function, now old-school artifacts of WM times in the early 90s completely disappeared, no punned pointer warning anymore ;)
       Diffstat:
         M client.c                            |      18 ++++++++++++++++--
         M config.mk                           |       4 ++--
         M dwm.h                               |       7 ++-----
         M event.c                             |       4 ----
         M main.c                              |      18 ------------------
       
       5 files changed, 20 insertions(+), 31 deletions(-)
       ---
   DIR diff --git a/client.c b/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);
   DIR diff --git a/config.mk b/config.mk
       @@ -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}\"
   DIR diff --git a/dwm.h b/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 */
   DIR diff --git a/event.c b/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:
   DIR diff --git a/main.c b/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;