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; | 	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
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								draw.c
									
									
									
									
									
								
							| @ -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
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								dwm.1
									
									
									
									
									
								
							| @ -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. | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								event.c
									
									
									
									
									
								
							| @ -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
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.c
									
									
									
									
									
								
							| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R. Garbe
						Anselm R. Garbe