dwm

dynamic window manager
git clone git://git.suckless.org/dwm
Log | Files | Refs | README | LICENSE

commit e6cbe9c11e88537d74eb094ba5844f71ee57f268
parent f60c597d653bd7eab6c620fc53d732ca75f6a880
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Sat, 15 Jul 2006 18:51:44 +0200

fixed XSync handling and finished man page

Diffstat:
Mclient.c | 7+++----
Mdraw.c | 7+++----
Mdwm.1 | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Mevent.c | 6+++---
Mmain.c | 2+-
5 files changed, 64 insertions(+), 16 deletions(-)

diff --git 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 @@ -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 @@ -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 @@ -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 @@ -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