Browse Source

fixed XSync handling and finished man page

master
Anselm R. Garbe 19 years ago
parent
commit
e6cbe9c11e
5 changed files with 64 additions and 16 deletions
  1. +3
    -4
      client.c
  2. +3
    -4
      draw.c
  3. +54
    -4
      dwm.1
  4. +3
    -3
      event.c
  5. +1
    -1
      main.c

+ 3
- 4
client.c 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);


+ 3
- 4
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,
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 unsigned long


+ 54
- 4
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.
.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 .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 .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.

+ 3
- 3
event.c 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


+ 1
- 1
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


Loading…
Cancel
Save