t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 281f0981a6edd51417f9bb427cc870370748e43f
   DIR parent 6ff346bed992971f508102b5f0b9cf34038a2c08
   URI Author: Anselm R. Garbe <arg@10kloc.org>
       Date:   Mon, 11 Sep 2006 07:40:41 +0200
       
       added some comments
       Diffstat:
         M client.c                            |       6 +++---
         M dwm.h                               |     141 +++++++++++++++----------------
       
       2 files changed, 72 insertions(+), 75 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       t@@ -19,11 +19,11 @@ detachstack(Client *c)
        }
        
        static void
       -grabbuttons(Client *c, Bool focus)
       +grabbuttons(Client *c, Bool focused)
        {
                XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
        
       -        if(focus) {
       +        if(focused) {
                        XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK,
                                        GrabModeAsync, GrabModeSync, None, None);
                        XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK,
       t@@ -304,7 +304,7 @@ resize(Client *c, Bool sizehints, Corner sticky)
                        wc.border_width = 0;
                else
                        wc.border_width = 1;
       -        XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
       +        XConfigureWindow(dpy, c->win, CWX | CWY | CWWidth | CWHeight | CWBorderWidth, &wc);
                XSync(dpy, False);
        }
        
   DIR diff --git a/dwm.h b/dwm.h
       t@@ -11,23 +11,19 @@
        #define MOUSEMASK                (BUTTONMASK | PointerMotionMask)
        #define PROTODELWIN                1
        
       +enum { NetSupported, NetWMName, NetLast };                /* EWMH atoms */
       +enum { WMProtocols, WMDelete, WMLast };                        /* default atoms */
       +enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
       +enum { ColFG, ColBG, ColLast };                                /* color */
       +
       +typedef enum {
       +        TopLeft, TopRight, BotLeft, BotRight
       +} Corner; /* window corners */
       +
        typedef union {
                const char *cmd;
                int i;
       -} Arg;
       -
       -/* atoms */
       -enum { NetSupported, NetWMName, NetLast };
       -enum { WMProtocols, WMDelete, WMLast };
       -
       -/* cursor */
       -enum { CurNormal, CurResize, CurMove, CurLast };
       -
       -/* color */
       -enum { ColFG, ColBG, ColLast };
       -
       -/* window corners */
       -typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner;
       +} Arg; /* argument type */
        
        typedef struct {
                int ascent;
       t@@ -37,7 +33,7 @@ typedef struct {
                XFontStruct *xfont;
        } Fnt;
        
       -typedef struct { /* draw context */
       +typedef struct {
                int x, y, w, h;
                unsigned long norm[ColLast];
                unsigned long sel[ColLast];
       t@@ -45,7 +41,7 @@ typedef struct { /* draw context */
                Drawable drawable;
                Fnt font;
                GC gc;
       -} DC;
       +} DC; /* draw context */
        
        typedef struct Client Client;
        struct Client {
       t@@ -66,77 +62,78 @@ struct Client {
                Window twin;
        };
        
       -extern const char *tags[];
       -extern char stext[1024];
       -extern int bx, by, bw, bh, bmw, mw, screen, sx, sy, sw, sh;
       -extern unsigned int ntags, numlockmask;
       -extern void (*handler[LASTEvent])(XEvent *);
       -extern void (*arrange)(Arg *);
       +extern const char *tags[];                        /* all tags */
       +extern char stext[1024];                        /* status text */
       +extern int bx, by, bw, bh, bmw;                        /* bar geometry, bar mode label width */
       +extern int mw, screen, sx, sy, sw, sh;                /* screen geometry, master width */
       +extern unsigned int ntags, numlockmask;                /* number of tags, and dynamic lock mask */
       +extern void (*handler[LASTEvent])(XEvent *);        /* event handler */
       +extern void (*arrange)(Arg *);                        /* arrange function, indicates mode  */
        extern Atom wmatom[WMLast], netatom[NetLast];
       -extern Bool running, issel, maximized, *seltag;
       -extern Client *clients, *sel, *stack;
       +extern Bool running, issel, maximized, *seltag;        /* seltag is array of Bool */
       +extern Client *clients, *sel, *stack;                /* Client containers */
        extern Cursor cursor[CurLast];
       -extern DC dc;
       +extern DC dc;                                        /* draw context for everything */
        extern Display *dpy;
        extern Window root, barwin;
        
        /* client.c */
       -extern void ban(Client *c);
       -extern void focus(Client *c);
       -extern Client *getclient(Window w);
       -extern Client *getctitle(Window w);
       -extern void gravitate(Client *c, Bool invert);
       -extern void killclient(Arg *arg);
       -extern void manage(Window w, XWindowAttributes *wa);
       -extern void resize(Client *c, Bool sizehints, Corner sticky);
       -extern void setsize(Client *c);
       -extern void settitle(Client *c);
       -extern void togglemax(Arg *arg);
       -extern void unmanage(Client *c);
       +extern void ban(Client *c);                        /* ban client from screen */
       +extern void focus(Client *c);                        /* focus c, c may be NULL */
       +extern Client *getclient(Window w);                /* return client of w */
       +extern Client *getctitle(Window w);                /* return client of title window */
       +extern void gravitate(Client *c, Bool invert);        /* gravitate c */
       +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, Corner sticky); /* resize c*/
       +extern void setsize(Client *c);                        /* set the size structs of c */
       +extern void settitle(Client *c);                /* set the name of c */
       +extern void togglemax(Arg *arg);                /* (un)maximize c */
       +extern void unmanage(Client *c);                /* destroy c */
        
        /* draw.c */
       -extern void drawall();
       -extern void drawstatus();
       -extern void drawtitle(Client *c);
       -extern unsigned long getcolor(const char *colstr);
       -extern void setfont(const char *fontstr);
       -extern unsigned int textw(const char *text);
       +extern void drawall();                                /* draw all visible client titles and the bar */
       +extern void drawstatus();                        /* draw the bar */
       +extern void drawtitle(Client *c);                /* draw title of c */
       +extern unsigned long getcolor(const char *colstr);        /* return color of colstr */
       +extern void setfont(const char *fontstr);        /* set the font for DC */
       +extern unsigned int textw(const char *text);        /* return the text width of text */
        
        /* event.c */
       -extern void grabkeys();
       -extern void procevent();
       +extern void grabkeys();                                /* grab all keys defined in config.h */
       +extern void procevent();                        /* process pending X events */
        
        /* main.c */
       -extern int getproto(Window w);
       -extern void quit(Arg *arg);
       -extern void sendevent(Window w, Atom a, long value);
       -extern int xerror(Display *dsply, XErrorEvent *ee);
       +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 */
        
        /* tag.c */
       -extern void initrregs();
       -extern Client *getnext(Client *c);
       -extern Client *getprev(Client *c);
       -extern void settags(Client *c, Client *trans);
       -extern void tag(Arg *arg);
       -extern void toggletag(Arg *arg);
       +extern void initrregs();                        /* initialize regexps of rules defined in config.h */
       +extern Client *getnext(Client *c);                /* returns next visible client */
       +extern Client *getprev(Client *c);                /* returns previous visible client */
       +extern void settags(Client *c, Client *trans);        /* updates tags of c */
       +extern void tag(Arg *arg);                        /* tags c accordingly to arg's index */
       +extern void toggletag(Arg *arg);                /* toggles c tags accordingly to arg's index */
        
        /* util.c */
       -extern void *emallocz(unsigned int size);
       -extern void eprint(const char *errstr, ...);
       -extern void *erealloc(void *ptr, unsigned int size);
       -extern void spawn(Arg *arg);
       +extern void *emallocz(unsigned int size);        /* allocates zero-initialized memory, exits on error */
       +extern void eprint(const char *errstr, ...);        /* prints error string and exits with return code 1 */
       +extern void *erealloc(void *ptr, unsigned int size);        /* reallocates memory, exits on error */
       +extern void spawn(Arg *arg)                        /* forks a new subprocess accordingly to arg's cmd */
        
        /* view.c */
       -extern void detach(Client *c);
       -extern void dofloat(Arg *arg);
       -extern void dotile(Arg *arg);
       -extern void focusnext(Arg *arg);
       -extern void focusprev(Arg *arg);
       -extern Bool isvisible(Client *c);
       -extern void resizecol(Arg *arg);
       -extern void restack();
       -extern void togglemode(Arg *arg);
       -extern void toggleview(Arg *arg);
       -extern void view(Arg *arg);
       -extern void viewall(Arg *arg);
       -extern void zoom(Arg *arg);
       +extern void detach(Client *c);                        /* detaches c from global client list */
       +extern void dofloat(Arg *arg);                        /* arranges all windows in a floating way, arg is ignored */
       +extern void dotile(Arg *arg);                        /* arranges all windows in a tiled way, arg is ignored */
       +extern void focusnext(Arg *arg);                /* focuses next visible client, arg is ignored  */
       +extern void focusprev(Arg *arg);                /* focuses previous visible client, arg is ignored */
       +extern Bool isvisible(Client *c);                /* returns True if client is visible */
       +extern void resizecol(Arg *arg);                /* resizes the master width accordingly to arg's index value */
       +extern void restack();                                /* restores z layers of all clients */
       +extern void togglemode(Arg *arg);                /* toggles global arrange mode (between dotile and dofloat) */
       +extern void toggleview(Arg *arg);                /* makes the tag accordingly to arg's index (in)visible */
       +extern void view(Arg *arg);                        /* makes the tag accordingly to arg's index visible */
       +extern void viewall(Arg *arg);                        /* makes all tags visible, arg is ignored */
       +extern void zoom(Arg *arg);                        /* zooms the focused client to master column, arg is ignored */