diff options
| -rw-r--r-- | client.c | 64 | ||||
| -rw-r--r-- | event.c | 5 | ||||
| -rw-r--r-- | wm.c | 9 | 
3 files changed, 58 insertions, 20 deletions
| @@ -37,10 +37,6 @@ update_name(Client *c)  		}  	}  	XFree(name.value); -	if(c == stack) -		draw_bar(); -	else -		draw_client(c);  }  void @@ -51,27 +47,52 @@ update_size(Client *c)  	if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags)  		size.flags = PSize;  	c->flags = size.flags; -	c->basew = size.base_width; -	c->baseh = size.base_height; -	c->incw = size.width_inc; -	c->inch = size.height_inc; -	c->maxw = size.max_width; -	c->maxh = size.max_height; -	c->minw = size.min_width; -	c->minh = size.min_height; +	if(c->flags & PBaseSize) { +		c->basew = size.base_width; +		c->baseh = size.base_height; +	} +	else +		c->basew = c->baseh = 0; +	if(c->flags & PResizeInc) { +		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  focus(Client *c)  { -	Client **l; +	Client **l, *old; + +	old = stack;  	for(l=&stack; *l && *l != c; l=&(*l)->snext);  	eassert(*l == c);  	*l = c->snext;  	c->snext = stack;  	stack = c;  	XRaiseWindow(dpy, c->win); +	XRaiseWindow(dpy, c->title);  	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);  } @@ -91,7 +112,6 @@ manage(Window w, XWindowAttributes *wa)  	XSetWindowBorderWidth(dpy, c->win, 1);  	XSelectInput(dpy, c->win, CLIENT_MASK);  	XGetTransientForHint(dpy, c->win, &c->trans); -	update_name(c);  	twa.override_redirect = 1;  	twa.background_pixmap = ParentRelative;  	twa.event_mask = ExposureMask; @@ -100,6 +120,7 @@ manage(Window w, XWindowAttributes *wa)  			0, DefaultDepth(dpy, screen), CopyFromParent,  			DefaultVisual(dpy, screen),  			CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa); +	update_name(c);  	for(l=&clients; *l; l=&(*l)->next);  	c->next = *l; /* *l == nil */ @@ -107,12 +128,14 @@ manage(Window w, XWindowAttributes *wa)  	c->snext = stack;  	stack = c;  	XMapWindow(dpy, c->win); +	XMapWindow(dpy, c->title);  	XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,  			GrabModeAsync, GrabModeSync, None, None);  	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,  			GrabModeAsync, GrabModeSync, None, None);  	XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask,  			GrabModeAsync, GrabModeSync, None, None); +	resize(c);  	focus(c);  } @@ -122,6 +145,7 @@ resize(Client *c)  	XConfigureEvent e;  	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.event = c->win;  	e.window = c->win; @@ -186,7 +210,17 @@ getclient(Window w)  void  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);  } @@ -143,9 +143,12 @@ static void  expose(XEvent *e)  {  	XExposeEvent *ev = &e->xexpose; +	Client *c;  	if(ev->count == 0) { -		if(ev->window == barwin) +		if((c = getclient(ev->window))) +			draw_client(c); +		else if(ev->window == barwin)  			draw_bar();  	}  } @@ -245,10 +245,6 @@ main(int argc, char *argv[])  	update_keys(); -	brush.drawable = XCreatePixmap(dpy, root, rect.width, rect.height, -			DefaultDepth(dpy, screen)); -	brush.gc = XCreateGC(dpy, root, 0, 0); -  	/* style */  	loadcolors(dpy, screen, &brush, BGCOLOR, FGCOLOR, BORDERCOLOR);  	loadfont(dpy, &brush.font, FONT); @@ -266,6 +262,11 @@ main(int argc, char *argv[])  			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);  	XDefineCursor(dpy, barwin, cursor[CurNormal]);  	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);  	draw_bar(); | 
