applied Sanders patches - dwm - dynamic window manager
 (HTM) git clone https://git.parazyd.org/dwm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 7b5638f61d5c8b5a76bc3f7a5962cb7490da3b6b
 (DIR) parent 937cabfa0aad7eef6d25e9d142a478163de200c5
 (HTM) Author: arg@10ksloc.org <unknown>
       Date:   Tue,  1 Aug 2006 12:32:33 +0200
       
       applied Sanders patches
       
       Diffstat:
         M Makefile                            |       3 +--
         M README                              |      17 +++++++++--------
         M client.c                            |       6 +++---
         M config.mk                           |      24 +++++++++---------------
         M dwm.1                               |      24 +++++++-----------------
         M dwm.h                               |       8 ++++++--
         M event.c                             |      14 +++-----------
         M tag.c                               |       4 ++++
       
       8 files changed, 42 insertions(+), 58 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -13,7 +13,6 @@ all: options dwm
        
        options:
                @echo dwm build options:
       -        @echo "LIBS     = ${LIBS}"
                @echo "CFLAGS   = ${CFLAGS}"
                @echo "LDFLAGS  = ${LDFLAGS}"
                @echo "CC       = ${CC}"
       @@ -29,7 +28,7 @@ dwm: ${OBJ}
                @${CC} -o $@ ${OBJ} ${LDFLAGS}
        
        clean:
       -        rm -f dwm *.o core dwm-${VERSION}.tar.gz
       +        rm -f dwm *.o dwm-${VERSION}.tar.gz
        
        dist: clean
                mkdir -p dwm-${VERSION}
 (DIR) diff --git a/README b/README
       @@ -1,6 +1,6 @@
        dwm - dynamic window manager
        ----------------------------
       -dwm is an extremly fast, small, and dynamic X11 window manager.
       +dwm is an extremely fast, small, and dynamic X11 window manager.
        
        
        Requirements
       @@ -10,8 +10,8 @@ In order to build dwm you need the Xlib header files.
        
        Installation
        ------------
       -Edit config.mk to match your local setup. dwm is installed into
       -the /usr/local namespace by default.
       +Edit config.mk to match your local setup (dwm is installed into
       +the /usr/local namespace by default).
        
        Afterwards enter the following command to build and install dwm (if
        necessary as root):
       @@ -35,16 +35,17 @@ This will start dwm on display :1 of the host foo.bar.
        
        Displaying status info
        ----------------------
       -In order to display status info in the bar, you can do following
       -in .xinitrc:
       +In order to display status info in the bar, you can do something
       +like this in your .xinitrc:
        
            while true
            do
                echo `date` `uptime | sed 's/.*://; s/,//g'`
       -        sleep 2
       +        sleep 1
            done | dwm
        
       +
        Configuration
        -------------
       -The configuration of dwm is done by customizing source code,
       -grep for CUSTOMIZE keyword.
       +The configuration of dwm is done by customizing its source code
       +(grep for the CUSTOMIZE keyword).
 (DIR) diff --git a/client.c b/client.c
       @@ -244,11 +244,11 @@ manage(Window w, XWindowAttributes *wa)
                c->next = clients;
                clients = c;
        
       -        XGrabButton(dpy, Button1, MODKEY, c->win, False, ButtonPressMask,
       +        XGrabButton(dpy, Button1, MODKEY, c->win, False, ButtonMask,
                                GrabModeAsync, GrabModeSync, None, None);
       -        XGrabButton(dpy, Button2, MODKEY, c->win, False, ButtonPressMask,
       +        XGrabButton(dpy, Button2, MODKEY, c->win, False, ButtonMask,
                                GrabModeAsync, GrabModeSync, None, None);
       -        XGrabButton(dpy, Button3, MODKEY, c->win, False, ButtonPressMask,
       +        XGrabButton(dpy, Button3, MODKEY, c->win, False, ButtonMask,
                                GrabModeAsync, GrabModeSync, None, None);
        
                if(!c->isfloat)
 (DIR) diff --git a/config.mk b/config.mk
       @@ -7,24 +7,18 @@ MANPREFIX = ${PREFIX}/share/man
        X11INC = /usr/X11R6/include
        X11LIB = /usr/X11R6/lib
        
       -VERSION = 0.5
       -
        # includes and libs
       -LIBS = -L${PREFIX}/lib -L/usr/lib -lc -L${X11LIB} -lX11
       +INCS = -I/usr/lib -I${X11INC}
       +LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
        
       -# Linux/BSD
       -CFLAGS = -O3 -I. -I${PREFIX}/include -I/usr/include -I${X11INC} \
       -        -DVERSION=\"${VERSION}\"
       +# flags
       +CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\"
        LDFLAGS = ${LIBS}
       -#CFLAGS = -g -Wall -O2 -I. -I${PREFIX}/include -I/usr/include -I${X11INC} \
       -#        -DVERSION=\"${VERSION}\"
       +#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
        #LDFLAGS = -g ${LIBS}
        
       -
       -# Solaris
       -#CFLAGS = -fast -xtarget=ultra ${INCLUDES} -DVERSION=\"${VERSION}\"
       -#LIBS += -lnsl -lsocket
       -
       -AR = ar cr
       +# compiler
        CC = cc
       -RANLIB = ranlib
       +
       +# dwm version
       +VERSION = 0.6
 (DIR) diff --git a/dwm.1 b/dwm.1
       @@ -21,7 +21,7 @@ time. But each window may contain more than one tag, which makes it visible in
        several views.
        .P
        .B dwm
       -consists of a small status bar which reads the text displayed from standard
       +has a small status bar which reads the text displayed from standard
        input, if written. It draws 1-pixel borders around windows to indicate the
        focus state. Unfocused windows contain a small bar in front of the window
        displaying the tags and the window title.
       @@ -56,14 +56,12 @@ Focus
        tag
        .TP
        .B Mod1-space
       -(Re-)arrange
       -.B all
       -windows tiled
       -.TP
       -.B Mod1-Shift-space
       -(Re-)arrange
       -.B all
       -windows floating
       +Toggle between
       +.B tiled
       +and
       +.B floating
       +mode (affects
       +.BR "all windows" )
        .TP
        .B Mod1-Shift-[0..n]
        Apply
       @@ -79,14 +77,6 @@ Quit
        Start
        .B terminal
        .TP
       -.B Mod1-Shift-w
       -Start
       -.B web browser
       -.TP
       -.B Mod1-Shift-l
       -Lock
       -.B screen
       -.TP
        .B Mod1-Control-[0..n]
        Append
        .B nth
 (DIR) diff --git a/dwm.h b/dwm.h
       @@ -25,9 +25,12 @@ enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
        
        /* END CUSTOMIZE */
        
       +/* mask shorthands, used in event.c and client.c */
       +#define ButtonMask        (ButtonPressMask | ButtonReleaseMask)
       +#define MouseMask        (ButtonMask | PointerMotionMask)
       +
        typedef union Arg Arg;
        typedef struct Client Client;
       -typedef enum Corner Corner;
        typedef struct DC DC;
        typedef struct Fnt Fnt;
        
       @@ -43,7 +46,8 @@ enum { WMProtocols, WMDelete, WMLast };
        /* cursor */
        enum { CurNormal, CurResize, CurMove, CurLast };
        
       -enum Corner { TopLeft, TopRight, BotLeft, BotRight };
       +/* windowcorners */
       +typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner;
        
        struct Fnt {
                int ascent;
 (DIR) diff --git a/event.c b/event.c
       @@ -8,9 +8,6 @@
        #include <X11/keysym.h>
        #include <X11/Xatom.h>
        
       -#define ButtonMask      (ButtonPressMask | ButtonReleaseMask)
       -#define MouseMask       (ButtonMask | PointerMotionMask)
       -
        /* CUSTOMIZE */
        
        typedef struct {
       @@ -20,17 +17,13 @@ typedef struct {
                Arg arg;
        } Key;
        
       -/*
        const char *browse[] = { "firefox", NULL };
        const char *gimp[] = { "gimp", NULL };
       -*/
       -const char *term[] = { "xterm", NULL };
       -/*
       +const char *term[] = { /*"xterm", NULL };*/
                "urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white",
                "-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL
        };
        const char *xlock[] = { "xlock", NULL };
       -*/
        
        static Key key[] = {
                /* modifier                key                function        arguments */
       @@ -57,11 +50,9 @@ static Key key[] = {
                { MODKEY|ShiftMask,        XK_c,                killclient,        { 0 } }, 
                { MODKEY|ShiftMask,        XK_q,                quit,                { 0 } },
                { MODKEY|ShiftMask,        XK_Return,        spawn,                { .argv = term } },
       -        /*
                { MODKEY|ShiftMask,        XK_g,                spawn,                { .argv = gimp } },
                { MODKEY|ShiftMask,        XK_l,                spawn,                { .argv = xlock } },
                { MODKEY|ShiftMask,        XK_w,                spawn,                { .argv = browse } },
       -        */
        };
        
        /* END CUSTOMIZE */
       @@ -172,6 +163,7 @@ buttonpress(XEvent *e)
                        }
                }
                else if((c = getclient(ev->window))) {
       +                focus(c);
                        switch(ev->button) {
                        default:
                                break;
       @@ -247,7 +239,7 @@ enternotify(XEvent *e)
                Client *c;
                XCrossingEvent *ev = &e->xcrossing;
        
       -        if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
       +        if(ev->detail == NotifyInferior)
                        return;
        
                if((c = getclient(ev->window)))
 (DIR) diff --git a/tag.c b/tag.c
       @@ -67,6 +67,8 @@ dofloat(Arg *arg)
                                higher(sel);
                                focus(sel);
                        }
       +                else
       +                        XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
                }
                drawall();
        }
       @@ -130,6 +132,8 @@ dotile(Arg *arg)
                                higher(sel);
                                focus(sel);
                        }
       +                else
       +                        XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
                }
                drawall();
        }