t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit b5159dfd2f552696b049b95e0d368a2c33a1002a
   DIR parent 07c2659806e95499b4a258ff1961e61c541f50b3
   URI Author: Anselm R. Garbe <arg@10kloc.org>
       Date:   Wed, 23 Aug 2006 10:21:57 +0200
       
       separated setup stuff into main.c:setup() - this makes main() more readable
       Diffstat:
         M dwm.h                               |      20 ++++++++------------
         M main.c                              |     181 ++++++++++++++++---------------
         M view.c                              |       2 +-
       
       3 files changed, 104 insertions(+), 99 deletions(-)
       ---
   DIR diff --git a/dwm.h b/dwm.h
       t@@ -11,15 +11,10 @@
        #define MOUSEMASK                (BUTTONMASK | PointerMotionMask)
        #define PROTODELWIN                1
        
       -typedef union Arg Arg;
       -typedef struct Client Client;
       -typedef struct DC DC;
       -typedef struct Fnt Fnt;
       -
       -union Arg {
       +typedef union {
                const char *cmd;
                int i;
       -};
       +} Arg;
        
        /* atoms */
        enum { NetSupported, NetWMName, NetLast };
       t@@ -28,18 +23,18 @@ enum { WMProtocols, WMDelete, WMLast };
        /* cursor */
        enum { CurNormal, CurResize, CurMove, CurLast };
        
       -/* windowcorners */
       +/* window corners */
        typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner;
        
       -struct Fnt {
       +typedef struct {
                int ascent;
                int descent;
                int height;
                XFontSet set;
                XFontStruct *xfont;
       -};
       +} Fnt;
        
       -struct DC { /* draw context */
       +typedef struct { /* draw context */
                int x, y, w, h;
                unsigned long bg;
                unsigned long fg;
       t@@ -47,8 +42,9 @@ struct DC { /* draw context */
                Drawable drawable;
                Fnt font;
                GC gc;
       -};
       +} DC;
        
       +typedef struct Client Client;
        struct Client {
                char name[256];
                int proto;
   DIR diff --git a/main.c b/main.c
       t@@ -15,6 +15,22 @@
        #include <X11/Xatom.h>
        #include <X11/Xproto.h>
        
       +/* extern */
       +
       +char stext[1024];
       +Bool *seltag;
       +int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
       +unsigned int ntags, numlockmask;
       +Atom wmatom[WMLast], netatom[NetLast];
       +Bool running = True;
       +Bool issel = True;
       +Client *clients = NULL;
       +Client *sel = NULL;
       +Cursor cursor[CurLast];
       +Display *dpy;
       +DC dc = {0};
       +Window root, barwin;
       +
        /* static */
        
        static int (*xerrorxlib)(Display *, XErrorEvent *);
       t@@ -62,6 +78,79 @@ scan()
                        XFree(wins);
        }
        
       +static void
       +setup()
       +{
       +        int i, j;
       +        unsigned int mask;
       +        Window w;
       +        XModifierKeymap *modmap;
       +        XSetWindowAttributes wa;
       +
       +        /* init atoms */
       +        wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
       +        wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
       +        netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
       +        netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
       +        XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
       +                        PropModeReplace, (unsigned char *) netatom, NetLast);
       +
       +        /* init cursors */
       +        cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
       +        cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
       +        cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
       +
       +        modmap = XGetModifierMapping(dpy);
       +        for (i = 0; i < 8; i++) {
       +                for (j = 0; j < modmap->max_keypermod; j++) {
       +                        if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock))
       +                                numlockmask = (1 << i);
       +                }
       +        }
       +        XFree(modmap);
       +
       +        wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask;
       +        wa.cursor = cursor[CurNormal];
       +        XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
       +
       +        grabkeys();
       +        initrregs();
       +
       +        for(ntags = 0; tags[ntags]; ntags++);
       +        seltag = emallocz(sizeof(Bool) * ntags);
       +        seltag[0] = True;
       +
       +        /* style */
       +        dc.bg = getcolor(BGCOLOR);
       +        dc.fg = getcolor(FGCOLOR);
       +        dc.border = getcolor(BORDERCOLOR);
       +        setfont(FONT);
       +
       +        sx = sy = 0;
       +        sw = DisplayWidth(dpy, screen);
       +        sh = DisplayHeight(dpy, screen);
       +        mw = (sw * MASTERW) / 100;
       +
       +        bx = by = 0;
       +        bw = sw;
       +        dc.h = bh = dc.font.height + 4;
       +        wa.override_redirect = 1;
       +        wa.background_pixmap = ParentRelative;
       +        wa.event_mask = ButtonPressMask | ExposureMask;
       +        barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),
       +                        CopyFromParent, DefaultVisual(dpy, screen),
       +                        CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
       +        XDefineCursor(dpy, barwin, cursor[CurNormal]);
       +        XMapRaised(dpy, barwin);
       +
       +        dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
       +        dc.gc = XCreateGC(dpy, root, 0, 0);
       +
       +        issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
       +
       +        strcpy(stext, "dwm-"VERSION);
       +}
       +
        /*
         * Startup Error handler to check if another window manager
         * is already running.
       t@@ -75,20 +164,6 @@ xerrorstart(Display *dsply, XErrorEvent *ee)
        
        /* extern */
        
       -char stext[1024];
       -Bool *seltag;
       -int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
       -unsigned int ntags, numlockmask;
       -Atom wmatom[WMLast], netatom[NetLast];
       -Bool running = True;
       -Bool issel = True;
       -Client *clients = NULL;
       -Client *sel = NULL;
       -Cursor cursor[CurLast];
       -Display *dpy;
       -DC dc = {0};
       -Window root, barwin;
       -
        int
        getproto(Window w)
        {
       t@@ -153,12 +228,8 @@ xerror(Display *dpy, XErrorEvent *ee)
        int
        main(int argc, char *argv[])
        {
       -        int i, j, xfd;
       -        unsigned int mask;
       +        int r, xfd;
                fd_set rd;
       -        Window w;
       -        XModifierKeymap *modmap;
       -        XSetWindowAttributes wa;
        
                if(argc == 2 && !strncmp("-v", argv[1], 3)) {
                        fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
       t@@ -189,70 +260,8 @@ main(int argc, char *argv[])
                xerrorxlib = XSetErrorHandler(xerror);
                XSync(dpy, False);
        
       -        /* init atoms */
       -        wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
       -        wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
       -        netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
       -        netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
       -        XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
       -                        PropModeReplace, (unsigned char *) netatom, NetLast);
       -
       -        /* init cursors */
       -        cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
       -        cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
       -        cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
       -
       -        modmap = XGetModifierMapping(dpy);
       -        for (i = 0; i < 8; i++) {
       -                for (j = 0; j < modmap->max_keypermod; j++) {
       -                        if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock))
       -                                numlockmask = (1 << i);
       -                }
       -        }
       -        XFree(modmap);
       -
       -        wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask;
       -        wa.cursor = cursor[CurNormal];
       -        XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
       -
       -        grabkeys();
       -        initrregs();
       -
       -        for(ntags = 0; tags[ntags]; ntags++);
       -        seltag = emallocz(sizeof(Bool) * ntags);
       -        seltag[0] = True;
       -
       -        /* style */
       -        dc.bg = getcolor(BGCOLOR);
       -        dc.fg = getcolor(FGCOLOR);
       -        dc.border = getcolor(BORDERCOLOR);
       -        setfont(FONT);
       -
       -        sx = sy = 0;
       -        sw = DisplayWidth(dpy, screen);
       -        sh = DisplayHeight(dpy, screen);
       -        mw = (sw * MASTERW) / 100;
       -
       -        bx = by = 0;
       -        bw = sw;
       -        dc.h = bh = dc.font.height + 4;
       -        wa.override_redirect = 1;
       -        wa.background_pixmap = ParentRelative;
       -        wa.event_mask = ButtonPressMask | ExposureMask;
       -        barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),
       -                        CopyFromParent, DefaultVisual(dpy, screen),
       -                        CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
       -        XDefineCursor(dpy, barwin, cursor[CurNormal]);
       -        XMapRaised(dpy, barwin);
       -
       -        dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
       -        dc.gc = XCreateGC(dpy, root, 0, 0);
       -
       -        strcpy(stext, "dwm-"VERSION);
       +        setup();
                drawstatus();
       -
       -        issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
       -
                scan();
        
                /* main event loop, also reads status text from stdin */
       t@@ -264,10 +273,10 @@ main(int argc, char *argv[])
                        if(readin)
                                FD_SET(STDIN_FILENO, &rd);
                        FD_SET(xfd, &rd);
       -                i = select(xfd + 1, &rd, NULL, NULL, NULL);
       -                if((i == -1) && (errno == EINTR))
       +                r = select(xfd + 1, &rd, NULL, NULL, NULL);
       +                if((r == -1) && (errno == EINTR))
                                continue;
       -                if(i > 0) {
       +                if(r > 0) {
                                if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
                                        readin = NULL != fgets(stext, sizeof(stext), stdin);
                                        if(readin)
       t@@ -277,7 +286,7 @@ main(int argc, char *argv[])
                                        drawstatus();
                                }
                        }
       -                else if(i < 0)
       +                else if(r < 0)
                                eprint("select failed\n");
                        procevent();
                }
   DIR diff --git a/view.c b/view.c
       t@@ -195,7 +195,7 @@ restack()
        void
        togglemode(Arg *arg)
        {
       -        arrange = arrange == dofloat ? dotile : dofloat;
       +        arrange = (arrange == dofloat) ? dotile : dofloat;
                if(sel)
                        arrange(NULL);
                else