t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 96d7fe16eaf6b656800f08da3156bacd75ca3b08
   DIR parent 78d1a22d4e847d0e596af59d7707da1bbfe9583a
   URI Author: Anselm R. Garbe <garbeam@gmail.com>
       Date:   Sun, 19 Aug 2007 10:40:07 +0200
       
       prepared merging layout.c and tag.c into screen.c
       Diffstat:
         M client.c                            |      36 ++++---------------------------
         M dwm.h                               |       4 +++-
         M layout.c                            |      17 ++++-------------
         M main.c                              |      28 ++++++++++++++++++++++++++++
       
       4 files changed, 39 insertions(+), 46 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       t@@ -185,15 +185,8 @@ Bool
        loadprops(Client *c) {
                unsigned int i;
                Bool result = False;
       -        XTextProperty name;
       -
       -        /* check if window has set a property */
       -        name.nitems = 0;
       -        XGetTextProperty(dpy, c->win, &name, dwmprops);
       -        if(name.nitems && name.encoding == XA_STRING) {
       -                strncpy(prop, (char *)name.value, sizeof prop - 1);
       -                prop[sizeof prop - 1] = '\0';
       -                XFree(name.value);
       +
       +        if(gettextprop(c->win, dwmprops, prop, sizeof prop)) {
                        for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++)
                                if((c->tags[i] = prop[i] == '1'))
                                        result = True;
       t@@ -424,27 +417,6 @@ updatesizehints(Client *c) {
        
        void
        updatetitle(Client *c) {
       -        char **list = NULL;
       -        int n;
       -        XTextProperty name;
       -
       -        name.nitems = 0;
       -        c->name[0] = 0;
       -        XGetTextProperty(dpy, c->win, &name, netatom[NetWMName]);
       -        if(!name.nitems)
       -                XGetWMName(dpy, c->win, &name);
       -        if(!name.nitems)
       -                return;
       -        if(name.encoding == XA_STRING)
       -                strncpy(c->name, (char *)name.value, sizeof c->name - 1);
       -        else {
       -                if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success
       -                && n > 0 && *list)
       -                {
       -                        strncpy(c->name, *list, sizeof c->name - 1);
       -                        XFreeStringList(list);
       -                }
       -        }
       -        c->name[sizeof c->name - 1] = '\0';
       -        XFree(name.value);
       +        if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
       +                gettextprop(c->win, wmatom[WMName], c->name, sizeof c->name);
        }
   DIR diff --git a/dwm.h b/dwm.h
       t@@ -39,7 +39,7 @@ enum { BarTop, BarBot, BarOff };                        /* bar position */
        enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
        enum { ColBorder, ColFG, ColBG, ColLast };                /* color */
        enum { NetSupported, NetWMName, NetLast };                /* EWMH atoms */
       -enum { WMProtocols, WMDelete, WMState, WMLast };        /* default atoms */
       +enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */
        
        typedef struct Client Client;
        struct Client {
       t@@ -131,6 +131,8 @@ void togglebar(const char *arg);        /* shows/hides the bar */
        void togglemax(const char *arg);        /* toggles maximization of floating client */
        
        /* main.c */
       +Bool gettextprop(Window w, Atom atom,
       +                char *text, unsigned int size); /* return text property, UTF-8 compliant */
        void updatebarpos(void);                /* updates the bar position */
        void quit(const char *arg);                /* quit dwm nicely */
        int xerror(Display *dsply, XErrorEvent *ee);        /* dwm's X error handler */
   DIR diff --git a/layout.c b/layout.c
       t@@ -98,7 +98,6 @@ void
        initlayouts(void) {
                unsigned int i, w;
        
       -        /* TODO deserialize ltidx if present */
                nlayouts = sizeof layouts / sizeof layouts[0];
                for(blw = i = 0; i < nlayouts; i++) {
                        w = textw(layouts[i].symbol);
       t@@ -110,21 +109,13 @@ initlayouts(void) {
        void
        loaddwmprops(void) {
                unsigned int i;
       -        XTextProperty name;
       -
       -        /* check if window has set a property */
       -        name.nitems = 0;
       -        XGetTextProperty(dpy, root, &name, dwmprops);
       -        if(name.nitems && name.encoding == XA_STRING) {
       -                strncpy(prop, (char *)name.value, sizeof prop - 1);
       -                prop[sizeof prop - 1] = '\0';
       -                XFree(name.value);
       +
       +        if(gettextprop(root, dwmprops, prop, sizeof prop)) {
                        for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++)
                                seltags[i] = prop[i] == '1';
                        if(i < sizeof prop - 1 && prop[i] != '\0') {
       -                        i = prop[i];
       -                        if(i < nlayouts)
       -                                ltidx = i;
       +                        if(prop[i] < nlayouts)
       +                                ltidx = prop[i];
                        }
                }
        }
   DIR diff --git a/main.c b/main.c
       t@@ -143,6 +143,7 @@ setup(void) {
                dwmprops = XInternAtom(dpy, "_DWM_PROPERTIES", False);
                wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
                wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
       +        wmatom[WMName] = XInternAtom(dpy, "WM_NAME", False);
                wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
                netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
                netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
       t@@ -220,6 +221,33 @@ xerrorstart(Display *dsply, XErrorEvent *ee) {
        
        /* extern */
        
       +Bool
       +gettextprop(Window w, Atom atom, char *text, unsigned int size) {
       +        char **list = NULL;
       +        int n;
       +        XTextProperty name;
       +
       +        if(!text || size == 0)
       +                return False;
       +        text[0] = '\0';
       +        XGetTextProperty(dpy, w, &name, atom);
       +        if(!name.nitems)
       +                return False;
       +        if(name.encoding == XA_STRING)
       +                strncpy(text, (char *)name.value, size - 1);
       +        else {
       +                if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success
       +                && n > 0 && *list)
       +                {
       +                        strncpy(text, *list, size - 1);
       +                        XFreeStringList(list);
       +                }
       +        }
       +        text[size - 1] = '\0';
       +        XFree(name.value);
       +        return True;
       +}
       +
        void
        quit(const char *arg) {
                readin = running = False;