implemented draw_client stuff
This commit is contained in:
		
							parent
							
								
									a05beb6585
								
							
						
					
					
						commit
						83d23908d3
					
				
							
								
								
									
										64
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								client.c
									
									
									
									
									
								
							| @ -37,10 +37,6 @@ update_name(Client *c) | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	XFree(name.value); | 	XFree(name.value); | ||||||
| 	if(c == stack) |  | ||||||
| 		draw_bar(); |  | ||||||
| 	else |  | ||||||
| 		draw_client(c); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| @ -51,27 +47,52 @@ update_size(Client *c) | |||||||
| 	if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags) | 	if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags) | ||||||
| 		size.flags = PSize; | 		size.flags = PSize; | ||||||
| 	c->flags = size.flags; | 	c->flags = size.flags; | ||||||
| 	c->basew = size.base_width; | 	if(c->flags & PBaseSize) { | ||||||
| 	c->baseh = size.base_height; | 		c->basew = size.base_width; | ||||||
| 	c->incw = size.width_inc; | 		c->baseh = size.base_height; | ||||||
| 	c->inch = size.height_inc; | 	} | ||||||
| 	c->maxw = size.max_width; | 	else | ||||||
| 	c->maxh = size.max_height; | 		c->basew = c->baseh = 0; | ||||||
| 	c->minw = size.min_width; | 	if(c->flags & PResizeInc) { | ||||||
| 	c->minh = size.min_height; | 		c->incw = size.width_inc; | ||||||
|  | 		c->inch = size.height_inc; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 		c->incw = c->inch = 0; | ||||||
|  | 	if(c->flags & PMaxSize) { | ||||||
|  | 		c->maxw = size.max_width; | ||||||
|  | 		c->maxh = size.max_height; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 		c->maxw = c->maxh = 0; | ||||||
|  | 	if(c->flags & PMinSize) { | ||||||
|  | 		c->minw = size.min_width; | ||||||
|  | 		c->minh = size.min_height; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 		c->minw = c->minh = 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| focus(Client *c) | focus(Client *c) | ||||||
| { | { | ||||||
| 	Client **l; | 	Client **l, *old; | ||||||
|  | 
 | ||||||
|  | 	old = stack; | ||||||
| 	for(l=&stack; *l && *l != c; l=&(*l)->snext); | 	for(l=&stack; *l && *l != c; l=&(*l)->snext); | ||||||
| 	eassert(*l == c); | 	eassert(*l == c); | ||||||
| 	*l = c->snext; | 	*l = c->snext; | ||||||
| 	c->snext = stack; | 	c->snext = stack; | ||||||
| 	stack = c; | 	stack = c; | ||||||
| 	XRaiseWindow(dpy, c->win); | 	XRaiseWindow(dpy, c->win); | ||||||
|  | 	XRaiseWindow(dpy, c->title); | ||||||
| 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | ||||||
|  | 	if(old && old != c) { | ||||||
|  | 		XMapWindow(dpy, old->title); | ||||||
|  | 		draw_client(old); | ||||||
|  | 	} | ||||||
|  | 	XUnmapWindow(dpy, c->title); | ||||||
|  | 	draw_bar(); | ||||||
| 	XFlush(dpy); | 	XFlush(dpy); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -91,7 +112,6 @@ manage(Window w, XWindowAttributes *wa) | |||||||
| 	XSetWindowBorderWidth(dpy, c->win, 1); | 	XSetWindowBorderWidth(dpy, c->win, 1); | ||||||
| 	XSelectInput(dpy, c->win, CLIENT_MASK); | 	XSelectInput(dpy, c->win, CLIENT_MASK); | ||||||
| 	XGetTransientForHint(dpy, c->win, &c->trans); | 	XGetTransientForHint(dpy, c->win, &c->trans); | ||||||
| 	update_name(c); |  | ||||||
| 	twa.override_redirect = 1; | 	twa.override_redirect = 1; | ||||||
| 	twa.background_pixmap = ParentRelative; | 	twa.background_pixmap = ParentRelative; | ||||||
| 	twa.event_mask = ExposureMask; | 	twa.event_mask = ExposureMask; | ||||||
| @ -100,6 +120,7 @@ manage(Window w, XWindowAttributes *wa) | |||||||
| 			0, DefaultDepth(dpy, screen), CopyFromParent, | 			0, DefaultDepth(dpy, screen), CopyFromParent, | ||||||
| 			DefaultVisual(dpy, screen), | 			DefaultVisual(dpy, screen), | ||||||
| 			CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa); | 			CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa); | ||||||
|  | 	update_name(c); | ||||||
| 
 | 
 | ||||||
| 	for(l=&clients; *l; l=&(*l)->next); | 	for(l=&clients; *l; l=&(*l)->next); | ||||||
| 	c->next = *l; /* *l == nil */ | 	c->next = *l; /* *l == nil */ | ||||||
| @ -107,12 +128,14 @@ manage(Window w, XWindowAttributes *wa) | |||||||
| 	c->snext = stack; | 	c->snext = stack; | ||||||
| 	stack = c; | 	stack = c; | ||||||
| 	XMapWindow(dpy, c->win); | 	XMapWindow(dpy, c->win); | ||||||
|  | 	XMapWindow(dpy, c->title); | ||||||
| 	XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask, | 	XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask, | ||||||
| 			GrabModeAsync, GrabModeSync, None, None); | 			GrabModeAsync, GrabModeSync, None, None); | ||||||
| 	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask, | 	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask, | ||||||
| 			GrabModeAsync, GrabModeSync, None, None); | 			GrabModeAsync, GrabModeSync, None, None); | ||||||
| 	XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask, | 	XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask, | ||||||
| 			GrabModeAsync, GrabModeSync, None, None); | 			GrabModeAsync, GrabModeSync, None, None); | ||||||
|  | 	resize(c); | ||||||
| 	focus(c); | 	focus(c); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -122,6 +145,7 @@ resize(Client *c) | |||||||
| 	XConfigureEvent e; | 	XConfigureEvent e; | ||||||
| 
 | 
 | ||||||
| 	XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); | 	XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); | ||||||
|  | 	XMoveResizeWindow(dpy, c->title, c->x + c->w / 3, c->y, 2 * c->w / 3, barrect.height); | ||||||
| 	e.type = ConfigureNotify; | 	e.type = ConfigureNotify; | ||||||
| 	e.event = c->win; | 	e.event = c->win; | ||||||
| 	e.window = c->win; | 	e.window = c->win; | ||||||
| @ -186,7 +210,17 @@ getclient(Window w) | |||||||
| void | void | ||||||
| draw_client(Client *c) | draw_client(Client *c) | ||||||
| { | { | ||||||
|  | 	if(!c) | ||||||
|  | 		return; | ||||||
|  | 	if(c == stack) | ||||||
|  | 		draw_bar(); | ||||||
| 
 | 
 | ||||||
|  | 	brush.rect.x = brush.rect.y = 0; | ||||||
|  | 	brush.rect.width = 2 * c->w / 3; | ||||||
|  | 	brush.rect.height = barrect.height; | ||||||
| 
 | 
 | ||||||
| 
 | 	draw(dpy, &brush, True, c->name); | ||||||
|  | 	XCopyArea(dpy, brush.drawable, c->title, brush.gc, 0, 0, | ||||||
|  | 			brush.rect.width, brush.rect.height, 0, 0); | ||||||
|  | 	XFlush(dpy); | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								event.c
									
									
									
									
									
								
							| @ -143,9 +143,12 @@ static void | |||||||
| expose(XEvent *e) | expose(XEvent *e) | ||||||
| { | { | ||||||
| 	XExposeEvent *ev = &e->xexpose; | 	XExposeEvent *ev = &e->xexpose; | ||||||
|  | 	Client *c; | ||||||
| 
 | 
 | ||||||
| 	if(ev->count == 0) { | 	if(ev->count == 0) { | ||||||
| 		if(ev->window == barwin) | 		if((c = getclient(ev->window))) | ||||||
|  | 			draw_client(c); | ||||||
|  | 		else if(ev->window == barwin) | ||||||
| 			draw_bar(); | 			draw_bar(); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										9
									
								
								wm.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								wm.c
									
									
									
									
									
								
							| @ -245,10 +245,6 @@ main(int argc, char *argv[]) | |||||||
| 
 | 
 | ||||||
| 	update_keys(); | 	update_keys(); | ||||||
| 
 | 
 | ||||||
| 	brush.drawable = XCreatePixmap(dpy, root, rect.width, rect.height, |  | ||||||
| 			DefaultDepth(dpy, screen)); |  | ||||||
| 	brush.gc = XCreateGC(dpy, root, 0, 0); |  | ||||||
| 
 |  | ||||||
| 	/* style */ | 	/* style */ | ||||||
| 	loadcolors(dpy, screen, &brush, BGCOLOR, FGCOLOR, BORDERCOLOR); | 	loadcolors(dpy, screen, &brush, BGCOLOR, FGCOLOR, BORDERCOLOR); | ||||||
| 	loadfont(dpy, &brush.font, FONT); | 	loadfont(dpy, &brush.font, FONT); | ||||||
| @ -266,6 +262,11 @@ main(int argc, char *argv[]) | |||||||
| 			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); | 			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); | ||||||
| 	XDefineCursor(dpy, barwin, cursor[CurNormal]); | 	XDefineCursor(dpy, barwin, cursor[CurNormal]); | ||||||
| 	XMapRaised(dpy, barwin); | 	XMapRaised(dpy, barwin); | ||||||
|  | 
 | ||||||
|  | 	brush.drawable = XCreatePixmap(dpy, root, rect.width, barrect.height, | ||||||
|  | 			DefaultDepth(dpy, screen)); | ||||||
|  | 	brush.gc = XCreateGC(dpy, root, 0, 0); | ||||||
|  | 
 | ||||||
| 	pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status); | 	pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status); | ||||||
| 	draw_bar(); | 	draw_bar(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R. Garbe
						Anselm R. Garbe