JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fixed XSync handling and finished man page
authorAnselm R. Garbe <garbeam@wmii.de>
Sat, 15 Jul 2006 16:51:44 +0000 (18:51 +0200)
committerAnselm R. Garbe <garbeam@wmii.de>
Sat, 15 Jul 2006 16:51:44 +0000 (18:51 +0200)
client.c
draw.c
dwm.1
event.c
main.c

index 92b26a2..158b928 100644 (file)
--- a/client.c
+++ b/client.c
@@ -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));
 }
 
@@ -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
@@ -393,7 +392,7 @@ unmanage(Client *c)
 
        free(c);
 
-       XFlush(dpy);
+       XSync(dpy, False);
        XSetErrorHandler(xerror);
        XUngrabServer(dpy);
        arrange(NULL);
diff --git a/draw.c b/draw.c
index 1c6613f..ec0e964 100644 (file)
--- a/draw.c
+++ b/draw.c
@@ -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
@@ -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
diff --git a/dwm.1 b/dwm.1
index 047299c..6ae2c39 100644 (file)
--- a/dwm.1
+++ b/dwm.1
@@ -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 
@@ -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.
diff --git a/event.c b/event.c
index 9a13eee..e948cb3 100644 (file)
--- a/event.c
+++ b/event.c
@@ -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);
@@ -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;
@@ -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
diff --git a/main.c b/main.c
index 5cf2738..2d132a5 100644 (file)
--- a/main.c
+++ b/main.c
@@ -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