JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
replaced getproto with a saner function, now old-school artifacts of WM times in...
authorAnselm R. Garbe <arg@suckless.org>
Wed, 7 Feb 2007 11:37:06 +0000 (12:37 +0100)
committerAnselm R. Garbe <arg@suckless.org>
Wed, 7 Feb 2007 11:37:06 +0000 (12:37 +0100)
client.c
config.mk
dwm.h
event.c
main.c

index 50e8a94..e37b9e6 100644 (file)
--- 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);
index 338632d..2e5630a 100644 (file)
--- 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}\"
diff --git a/dwm.h b/dwm.h
index a7053c5..674ab1e 100644 (file)
--- 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 */
diff --git a/event.c b/event.c
index 418e986..c66aa72 100644 (file)
--- 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:
diff --git a/main.c b/main.c
index 97fdbaf..da95d95 100644 (file)
--- 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;