t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit e6cbe9c11e88537d74eb094ba5844f71ee57f268
   DIR parent f60c597d653bd7eab6c620fc53d732ca75f6a880
   URI Author: Anselm R. Garbe <garbeam@wmii.de>
       Date:   Sat, 15 Jul 2006 18:51:44 +0200
       
       fixed XSync handling and finished man page
       
       Diffstat:
         M client.c                            |       7 +++----
         M draw.c                              |       7 +++----
         M dwm.1                               |      58 ++++++++++++++++++++++++++++---
         M event.c                             |       6 +++---
         M main.c                              |       2 +-
       
       5 files changed, 64 insertions(+), 16 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       t@@ -49,13 +49,12 @@ focus(Client *c)
                Client *old = sel;
                XEvent ev;
        
       -        XFlush(dpy);
                sel = c;
                if(old && old != c)
                        drawtitle(old);
                drawtitle(c);
                XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
       -        XFlush(dpy);
       +        XSync(dpy, False);
                while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
        }
        
       t@@ -303,7 +302,7 @@ resize(Client *c, Bool inc)
                e.above = None;
                e.override_redirect = False;
                XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
       -        XFlush(dpy);
       +        XSync(dpy, False);
        }
        
        void
       t@@ -393,7 +392,7 @@ unmanage(Client *c)
        
                free(c);
        
       -        XFlush(dpy);
       +        XSync(dpy, False);
                XSetErrorHandler(xerror);
                XUngrabServer(dpy);
                arrange(NULL);
   DIR diff --git a/draw.c b/draw.c
       t@@ -131,7 +131,7 @@ drawstatus()
                drawtext(stext, !istile, False);
        
                XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
       -        XFlush(dpy);
       +        XSync(dpy, False);
        }
        
        void
       t@@ -163,9 +163,8 @@ drawtitle(Client *c)
                dc.x += dc.w;
                dc.w = textw(c->name);
                drawtext(c->name, !istile, True);
       -        XCopyArea(dpy, dc.drawable, c->title, dc.gc,
       -                        0, 0, c->tw, c->th, 0, 0);
       -        XFlush(dpy);
       +        XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0);
       +        XSync(dpy, False);
        }
        
        unsigned long
   DIR diff --git a/dwm.1 b/dwm.1
       t@@ -7,14 +7,60 @@ dwm \- dynamic window manager
        .SH DESCRIPTION
        .SS Overview
        .B dwm
       -is a dynamic window manager for X11.
       +is a dynamic window manager for X11. It consists of a small status bar at the
       +top of the screen and arranges windows in either a tiled or floating mode.
       +.P
       +If 
       +.B dwm
       +is in tiled mode, it consists of two columns. The left master column
       +contains only one window per time, the right column contains all other windows 
       +in a stack. In tiled mode
       +.B dwm
       +.B don't
       +handles incremental resizals, some terminal programs like
       +.B xterm
       +may not work correctly with this in tiled mode.
       +.P
       +If
       +.B dwm
       +is in floating mode, it arranges all windows with the reqyested geometry and
       +allows the user to move or resize them. Some windows, like
       +dialog windows, are treated floating even if
       +.B dwm
       +is in tiled mode. In floating mode
       +.B dwm
       +handles incremental resizals.
       +.P
       +Windows are grouped by tags. You can view all windows with a specific tag per
       +time.  However, each window is allowed to contain more than one tag, which
       +allows to make windows visible in all views.
       +.P
       +.B dwm
       +reads from
       +.I stdin
       +to display status text, if written.
       +.P
       +.B dwm
       +draws 1-pixel borders around windows to indicate the focus state and save as
       +much screen real estate as possible. Unfocused windows contain a small bar
       +in front of the window indicating the tags and the window title.
        .SS Options
        .TP
        .B \-v
       -prints version information to stdout, then exits.
       -.SS Status text
       +prints version information to
       +.I stdout
       +, then exits.
       +.SS Customization
       +.B dwm
       +is customized through editing its source code. It is assumed that
       +dwm users are high experienced users who know how a window manager works
       +and who are able to patch
       +.B dwm
       +for their needs. This keeps
        .B dwm
       -reads from stdin to display status text if provided.
       +fast, secure and simple, because it does not process any input data, except
       +window properties and the status text read from
       +.I stdin .
        .SS Default Key Bindings
        .TP 16
        .I Key        
       t@@ -96,3 +142,7 @@ Lowers current
        Resizes current
        .B window
        while dragging
       +.SH BUGS
       +Some terminal programs do not behave correctly in tiled mode, because
       +incremental resizals are ignored to use maximum screen real estate. You can
       +patch the code to fix this.
   DIR diff --git a/event.c b/event.c
       t@@ -73,7 +73,7 @@ movemouse(Client *c)
                                handler[Expose](&ev);
                                break;
                        case MotionNotify:
       -                        XFlush(dpy);
       +                        XSync(dpy, False);
                                c->x = ocx + (ev.xmotion.x - x1);
                                c->y = ocy + (ev.xmotion.y - y1);
                                resize(c, False);
       t@@ -105,7 +105,7 @@ resizemouse(Client *c)
                                handler[Expose](&ev);
                                break;
                        case MotionNotify:
       -                        XFlush(dpy);
       +                        XSync(dpy, False);
                                c->w = abs(ocx - ev.xmotion.x);
                                c->h = abs(ocy - ev.xmotion.y);
                                c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
       t@@ -191,7 +191,7 @@ configurerequest(XEvent *e)
                ev->value_mask &= ~CWStackMode;
                ev->value_mask |= CWBorderWidth;
                XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
       -        XFlush(dpy);
       +        XSync(dpy, False);
        }
        
        static void
   DIR diff --git a/main.c b/main.c
       t@@ -131,7 +131,7 @@ sendevent(Window w, Atom a, long value)
                e.xclient.data.l[0] = value;
                e.xclient.data.l[1] = CurrentTime;
                XSendEvent(dpy, w, False, NoEventMask, &e);
       -        XFlush(dpy);
       +        XSync(dpy, False);
        }
        
        void