# HG changeset patch # User Anselm R. Garbe # Date 1152982304 -7200 # Node ID aabebd6e61f3c5220af213ab54313235a8a84f31 # Parent 0d71fb80b59241930bc7a001be23bdf2edcebfc3 fixed XSync handling and finished man page diff -r 0d71fb80b592 -r aabebd6e61f3 client.c --- a/client.c Sat Jul 15 18:11:14 2006 +0200 +++ b/client.c Sat Jul 15 18:51:44 2006 +0200 @@ -49,13 +49,12 @@ 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 @@ 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 @@ free(c); - XFlush(dpy); + XSync(dpy, False); XSetErrorHandler(xerror); XUngrabServer(dpy); arrange(NULL); diff -r 0d71fb80b592 -r aabebd6e61f3 draw.c --- a/draw.c Sat Jul 15 18:11:14 2006 +0200 +++ b/draw.c Sat Jul 15 18:51:44 2006 +0200 @@ -131,7 +131,7 @@ 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 @@ 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 -r 0d71fb80b592 -r aabebd6e61f3 dwm.1 --- a/dwm.1 Sat Jul 15 18:11:14 2006 +0200 +++ b/dwm.1 Sat Jul 15 18:51:44 2006 +0200 @@ -7,14 +7,60 @@ .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 -reads from stdin to display status text if provided. +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 +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 @@ 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 -r 0d71fb80b592 -r aabebd6e61f3 event.c --- a/event.c Sat Jul 15 18:11:14 2006 +0200 +++ b/event.c Sat Jul 15 18:51:44 2006 +0200 @@ -73,7 +73,7 @@ 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 @@ 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 @@ ev->value_mask &= ~CWStackMode; ev->value_mask |= CWBorderWidth; XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); - XFlush(dpy); + XSync(dpy, False); } static void diff -r 0d71fb80b592 -r aabebd6e61f3 main.c --- a/main.c Sat Jul 15 18:11:14 2006 +0200 +++ b/main.c Sat Jul 15 18:51:44 2006 +0200 @@ -131,7 +131,7 @@ e.xclient.data.l[0] = value; e.xclient.data.l[1] = CurrentTime; XSendEvent(dpy, w, False, NoEventMask, &e); - XFlush(dpy); + XSync(dpy, False); } void