diff options
| -rw-r--r-- | client.c | 7 | ||||
| -rw-r--r-- | draw.c | 7 | ||||
| -rw-r--r-- | dwm.1 | 58 | ||||
| -rw-r--r-- | event.c | 6 | ||||
| -rw-r--r-- | main.c | 2 | 
5 files changed, 64 insertions, 16 deletions
| @@ -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); @@ -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 @@ -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. @@ -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 @@ -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 | 
