fixed XSync handling and finished man page

master
Anselm R. Garbe 2006-07-15 18:51:44 +02:00
parent f60c597d65
commit e6cbe9c11e
5 changed files with 64 additions and 16 deletions

View File

@ -49,13 +49,12 @@ focus(Client *c)
Client *old = sel; Client *old = sel;
XEvent ev; XEvent ev;
XFlush(dpy);
sel = c; sel = c;
if(old && old != c) if(old && old != c)
drawtitle(old); drawtitle(old);
drawtitle(c); drawtitle(c);
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
XFlush(dpy); XSync(dpy, False);
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
} }
@ -303,7 +302,7 @@ resize(Client *c, Bool inc)
e.above = None; e.above = None;
e.override_redirect = False; e.override_redirect = False;
XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e); XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
XFlush(dpy); XSync(dpy, False);
} }
void void
@ -393,7 +392,7 @@ unmanage(Client *c)
free(c); free(c);
XFlush(dpy); XSync(dpy, False);
XSetErrorHandler(xerror); XSetErrorHandler(xerror);
XUngrabServer(dpy); XUngrabServer(dpy);
arrange(NULL); arrange(NULL);

7
draw.c
View File

@ -131,7 +131,7 @@ drawstatus()
drawtext(stext, !istile, False); drawtext(stext, !istile, False);
XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
XFlush(dpy); XSync(dpy, False);
} }
void void
@ -163,9 +163,8 @@ drawtitle(Client *c)
dc.x += dc.w; dc.x += dc.w;
dc.w = textw(c->name); dc.w = textw(c->name);
drawtext(c->name, !istile, True); drawtext(c->name, !istile, True);
XCopyArea(dpy, dc.drawable, c->title, dc.gc, XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0);
0, 0, c->tw, c->th, 0, 0); XSync(dpy, False);
XFlush(dpy);
} }
unsigned long unsigned long

58
dwm.1
View File

@ -7,14 +7,60 @@ dwm \- dynamic window manager
.SH DESCRIPTION .SH DESCRIPTION
.SS Overview .SS Overview
.B dwm .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 .SS Options
.TP .TP
.B \-v .B \-v
prints version information to stdout, then exits. prints version information to
.SS Status text .I stdout
, then exits.
.SS Customization
.B dwm .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 .SS Default Key Bindings
.TP 16 .TP 16
.I Key .I Key
@ -96,3 +142,7 @@ Lowers current
Resizes current Resizes current
.B window .B window
while dragging 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.

View File

@ -73,7 +73,7 @@ movemouse(Client *c)
handler[Expose](&ev); handler[Expose](&ev);
break; break;
case MotionNotify: case MotionNotify:
XFlush(dpy); XSync(dpy, False);
c->x = ocx + (ev.xmotion.x - x1); c->x = ocx + (ev.xmotion.x - x1);
c->y = ocy + (ev.xmotion.y - y1); c->y = ocy + (ev.xmotion.y - y1);
resize(c, False); resize(c, False);
@ -105,7 +105,7 @@ resizemouse(Client *c)
handler[Expose](&ev); handler[Expose](&ev);
break; break;
case MotionNotify: case MotionNotify:
XFlush(dpy); XSync(dpy, False);
c->w = abs(ocx - ev.xmotion.x); c->w = abs(ocx - ev.xmotion.x);
c->h = abs(ocy - ev.xmotion.y); c->h = abs(ocy - ev.xmotion.y);
c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w; c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
@ -191,7 +191,7 @@ configurerequest(XEvent *e)
ev->value_mask &= ~CWStackMode; ev->value_mask &= ~CWStackMode;
ev->value_mask |= CWBorderWidth; ev->value_mask |= CWBorderWidth;
XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
XFlush(dpy); XSync(dpy, False);
} }
static void static void

2
main.c
View File

@ -131,7 +131,7 @@ sendevent(Window w, Atom a, long value)
e.xclient.data.l[0] = value; e.xclient.data.l[0] = value;
e.xclient.data.l[1] = CurrentTime; e.xclient.data.l[1] = CurrentTime;
XSendEvent(dpy, w, False, NoEventMask, &e); XSendEvent(dpy, w, False, NoEventMask, &e);
XFlush(dpy); XSync(dpy, False);
} }
void void