fixed XSync handling and finished man page
This commit is contained in:
		
							parent
							
								
									f60c597d65
								
							
						
					
					
						commit
						e6cbe9c11e
					
				
							
								
								
									
										7
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								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);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								draw.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										58
									
								
								dwm.1
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								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
 | 
			
		||||
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 @@ 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.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user