aewl

diff client.c @ 26:e8f627998d6f

simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
author Anselm R. Garbe <garbeam@wmii.de>
date Wed, 12 Jul 2006 15:17:22 +0200
parents 95ffdfd0a819
children f96fb3fd8203
line diff
     1.1 --- a/client.c	Wed Jul 12 00:53:11 2006 +0200
     1.2 +++ b/client.c	Wed Jul 12 15:17:22 2006 +0200
     1.3 @@ -10,7 +10,16 @@
     1.4  #include "util.h"
     1.5  #include "wm.h"
     1.6  
     1.7 -#define CLIENT_MASK		(StructureNotifyMask | PropertyChangeMask | EnterWindowMask)
     1.8 +static void
     1.9 +resize_title(Client *c)
    1.10 +{
    1.11 +	c->tw = textw(&brush.font, c->name) + bh;
    1.12 +	if(c->tw > c->w)
    1.13 +		c->tw = c->w + 2;
    1.14 +	c->tx = c->x + c->w - c->tw + 2;
    1.15 +	c->ty = c->y;
    1.16 +	XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th);
    1.17 +}
    1.18  
    1.19  void
    1.20  update_name(Client *c)
    1.21 @@ -37,6 +46,7 @@
    1.22  		}
    1.23  	}
    1.24  	XFree(name.value);
    1.25 +	resize_title(c);
    1.26  }
    1.27  
    1.28  void
    1.29 @@ -74,26 +84,37 @@
    1.30  }
    1.31  
    1.32  void
    1.33 +raise(Client *c)
    1.34 +{
    1.35 +	XRaiseWindow(dpy, c->win);
    1.36 +	XRaiseWindow(dpy, c->title);
    1.37 +}
    1.38 +
    1.39 +void
    1.40 +lower(Client *c)
    1.41 +{
    1.42 +	XLowerWindow(dpy, c->title);
    1.43 +	XLowerWindow(dpy, c->win);
    1.44 +}
    1.45 +
    1.46 +void
    1.47  focus(Client *c)
    1.48  {
    1.49  	Client **l, *old;
    1.50  
    1.51  	old = stack;
    1.52 -	for(l=&stack; *l && *l != c; l=&(*l)->snext);
    1.53 +	for(l = &stack; *l && *l != c; l = &(*l)->snext);
    1.54  	eassert(*l == c);
    1.55  	*l = c->snext;
    1.56  	c->snext = stack;
    1.57  	stack = c;
    1.58 -	XRaiseWindow(dpy, c->win);
    1.59 -	XRaiseWindow(dpy, c->title);
    1.60 -	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
    1.61  	if(old && old != c) {
    1.62  		XMapWindow(dpy, old->title);
    1.63  		draw_client(old);
    1.64  	}
    1.65  	XUnmapWindow(dpy, c->title);
    1.66 -	draw_bar();
    1.67 -	discard_events(EnterWindowMask);
    1.68 +	draw_client(old);
    1.69 +	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
    1.70  	XFlush(dpy);
    1.71  }
    1.72  
    1.73 @@ -107,13 +128,16 @@
    1.74  	c->win = w;
    1.75  	c->tx = c->x = wa->x;
    1.76  	c->ty = c->y = wa->y;
    1.77 +	if(c->y < bh)
    1.78 +		c->ty = c->y += bh;
    1.79  	c->tw = c->w = wa->width;
    1.80  	c->h = wa->height;
    1.81 -	c->th = barrect.height;
    1.82 +	c->th = bh;
    1.83  	update_size(c);
    1.84  	XSetWindowBorderWidth(dpy, c->win, 1);
    1.85  	XSetWindowBorder(dpy, c->win, brush.border);
    1.86 -	XSelectInput(dpy, c->win, CLIENT_MASK);
    1.87 +	XSelectInput(dpy, c->win,
    1.88 +			StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
    1.89  	XGetTransientForHint(dpy, c->win, &c->trans);
    1.90  	twa.override_redirect = 1;
    1.91  	twa.background_pixmap = ParentRelative;
    1.92 @@ -130,8 +154,8 @@
    1.93  	*l = c;
    1.94  	c->snext = stack;
    1.95  	stack = c;
    1.96 -	XMapWindow(dpy, c->win);
    1.97 -	XMapWindow(dpy, c->title);
    1.98 +	XMapRaised(dpy, c->win);
    1.99 +	XMapRaised(dpy, c->title);
   1.100  	XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
   1.101  			GrabModeAsync, GrabModeSync, None, None);
   1.102  	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
   1.103 @@ -147,6 +171,7 @@
   1.104  {
   1.105  	XConfigureEvent e;
   1.106  
   1.107 +	resize_title(c);
   1.108  	XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
   1.109  	e.type = ConfigureNotify;
   1.110  	e.event = c->win;
   1.111 @@ -158,9 +183,7 @@
   1.112  	e.border_width = 0;
   1.113  	e.above = None;
   1.114  	e.override_redirect = False;
   1.115 -	XSelectInput(dpy, c->win, CLIENT_MASK & ~StructureNotifyMask);
   1.116  	XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
   1.117 -	XSelectInput(dpy, c->win, CLIENT_MASK);
   1.118  	XFlush(dpy);
   1.119  }
   1.120  
   1.121 @@ -219,17 +242,14 @@
   1.122  void
   1.123  draw_client(Client *c)
   1.124  {
   1.125 -	if(c == stack)
   1.126 +	if(c == stack) {
   1.127  		draw_bar();
   1.128 +		return;
   1.129 +	}
   1.130  
   1.131 -	c->tw = textwidth(&brush.font, c->name) + labelheight(&brush.font);
   1.132 -	c->tx = c->x + c->w - c->tw + 2;
   1.133 -	c->ty = c->y;
   1.134 -	XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th);
   1.135 -
   1.136 -	brush.rect.x = brush.rect.y = 0;
   1.137 -	brush.rect.width = c->tw;
   1.138 -	brush.rect.height = c->th;
   1.139 +	brush.x = brush.y = 0;
   1.140 +	brush.w = c->tw;
   1.141 +	brush.h = c->th;
   1.142  
   1.143  	draw(dpy, &brush, True, c->name);
   1.144  	XCopyArea(dpy, brush.drawable, c->title, brush.gc,