@ -16,19 +16,19 @@ resizetitle(Client *c)
{
int i ;
c - > b w = 0 ;
c - > t w = 0 ;
for ( i = 0 ; i < TLast ; i + + )
if ( c - > tags [ i ] )
c - > b w + = textw ( c - > tags [ i ] ) ;
c - > b w + = textw ( c - > name ) ;
if ( c - > bw > * c - > w )
c - > bw = * c - > w + 2 ;
c - > bx = * c - > x + * c - > w - c - > b w + 2 ;
c - > by = * c - > y ;
c - > t w + = textw ( c - > tags [ i ] ) ;
c - > t w + = textw ( c - > name ) ;
if ( c - > tw > c - > w )
c - > tw = c - > w + 2 ;
c - > tx = c - > x + c - > w - c - > t w + 2 ;
c - > ty = c - > y ;
if ( c - > tags [ tsel ] )
XMoveResizeWindow ( dpy , c - > title , c - > bx, c - > by , c - > bw , c - > b h) ;
XMoveResizeWindow ( dpy , c - > title , c - > tx, c - > ty , c - > tw , c - > t h) ;
else
XMoveResizeWindow ( dpy , c - > title , c - > bx + 2 * sw , c - > by , c - > bw , c - > b h) ;
XMoveResizeWindow ( dpy , c - > title , c - > tx + 2 * sw , c - > ty , c - > tw , c - > t h) ;
}
@ -43,8 +43,8 @@ xerrordummy(Display *dsply, XErrorEvent *ee)
void
ban ( Client * c )
{
XMoveWindow ( dpy , c - > win , * c - > x + 2 * sw , * c - > y ) ;
XMoveWindow ( dpy , c - > title , c - > bx + 2 * sw , c - > b y) ;
XMoveWindow ( dpy , c - > win , c - > x + 2 * sw , c - > y ) ;
XMoveWindow ( dpy , c - > title , c - > tx + 2 * sw , c - > t y) ;
}
void
@ -128,12 +128,12 @@ gravitate(Client *c, Bool invert)
case EastGravity :
case CenterGravity :
case WestGravity :
dy = - ( * c - > h / 2 ) + c - > border ;
dy = - ( c - > h / 2 ) + c - > border ;
break ;
case SouthEastGravity :
case SouthGravity :
case SouthWestGravity :
dy = - ( * c - > h ) ;
dy = - ( c - > h ) ;
break ;
default :
break ;
@ -149,12 +149,12 @@ gravitate(Client *c, Bool invert)
case NorthGravity :
case CenterGravity :
case SouthGravity :
dx = - ( * c - > w / 2 ) + c - > border ;
dx = - ( c - > w / 2 ) + c - > border ;
break ;
case NorthEastGravity :
case EastGravity :
case SouthEastGravity :
dx = - ( * c - > w + c - > border ) ;
dx = - ( c - > w + c - > border ) ;
break ;
default :
break ;
@ -164,8 +164,8 @@ gravitate(Client *c, Bool invert)
dx = - dx ;
dy = - dy ;
}
* c - > x + = dx ;
* c - > y + = dy ;
c - > x + = dx ;
c - > y + = dy ;
}
void
@ -203,19 +203,14 @@ manage(Window w, XWindowAttributes *wa)
c = emallocz ( sizeof ( Client ) ) ;
c - > win = w ;
c - > bx = c - > f x = c - > tx = wa - > x ;
c - > by = c - > f y = c - > ty = wa - > y ;
c - > bw = c - > f w = c - > tw = wa - > width ;
c - > fh = c - > t h = wa - > height ;
c - > b h = bh ;
c - > x = c - > tx = wa - > x ;
c - > y = c - > ty = wa - > y ;
c - > w = c - > tw = wa - > width ;
c - > h = wa - > height ;
c - > t h = bh ;
diff = sw - c - > fw ;
c - > fx = random ( ) % ( diff ? diff : 1 ) ;
diff = sh - c - > fh - bh ;
c - > fy = random ( ) % ( diff ? diff : 1 ) ;
if ( c - > fy < bh )
c - > by = c - > fy = c - > ty = bh ;
if ( c - > y < bh )
c - > y = c - > ty = bh ;
c - > border = 1 ;
c - > proto = getproto ( c - > win ) ;
@ -227,7 +222,7 @@ manage(Window w, XWindowAttributes *wa)
twa . background_pixmap = ParentRelative ;
twa . event_mask = ExposureMask ;
c - > title = XCreateWindow ( dpy , root , c - > bx, c - > by , c - > bw , c - > b h,
c - > title = XCreateWindow ( dpy , root , c - > tx, c - > ty , c - > tw , c - > t h,
0 , DefaultDepth ( dpy , screen ) , CopyFromParent ,
DefaultVisual ( dpy , screen ) ,
CWOverrideRedirect | CWBackPixmap | CWEventMask , & twa ) ;
@ -251,9 +246,7 @@ manage(Window w, XWindowAttributes *wa)
( c - > maxw = = c - > minw ) & & ( c - > maxh = = c - > minh ) ) ;
setgeom ( c ) ;
settitle ( c ) ;
arrange ( NULL ) ;
/* mapping the window now prevents flicker */
@ -273,10 +266,10 @@ maximize(Arg *arg)
{
if ( ! sel )
return ;
* sel - > x = sx ;
* sel - > y = sy + bh ;
* sel - > w = sw - 2 * sel - > border ;
* sel - > h = sh - 2 * sel - > border - bh ;
sel - > x = sx ;
sel - > y = sy + bh ;
sel - > w = sw - 2 * sel - > border ;
sel - > h = sh - 2 * sel - > border - bh ;
higher ( sel ) ;
resize ( sel , False , TopLeft ) ;
}
@ -297,43 +290,43 @@ void
resize ( Client * c , Bool inc , Corner sticky )
{
XConfigureEvent e ;
int right = * c - > x + * c - > w ;
int bottom = * c - > y + * c - > h ;
int right = c - > x + c - > w ;
int bottom = c - > y + c - > h ;
if ( inc ) {
if ( c - > incw )
* c - > w - = ( * c - > w - c - > basew ) % c - > incw ;
c - > w - = ( c - > w - c - > basew ) % c - > incw ;
if ( c - > inch )
* c - > h - = ( * c - > h - c - > baseh ) % c - > inch ;
c - > h - = ( c - > h - c - > baseh ) % c - > inch ;
}
if ( * c - > x > sw ) /* might happen on restart */
* c - > x = sw - * c - > w ;
if ( * c - > y > sh )
* c - > y = sh - * c - > h ;
if ( c - > minw & & * c - > w < c - > minw )
* c - > w = c - > minw ;
if ( c - > minh & & * c - > h < c - > minh )
* c - > h = c - > minh ;
if ( c - > maxw & & * c - > w > c - > maxw )
* c - > w = c - > maxw ;
if ( c - > maxh & & * c - > h > c - > maxh )
* c - > h = c - > maxh ;
if ( c - > x > sw ) /* might happen on restart */
c - > x = sw - c - > w ;
if ( c - > y > sh )
c - > y = sh - c - > h ;
if ( c - > minw & & c - > w < c - > minw )
c - > w = c - > minw ;
if ( c - > minh & & c - > h < c - > minh )
c - > h = c - > minh ;
if ( c - > maxw & & c - > w > c - > maxw )
c - > w = c - > maxw ;
if ( c - > maxh & & c - > h > c - > maxh )
c - > h = c - > maxh ;
if ( sticky = = TopRight | | sticky = = BotRight )
* c - > x = right - * c - > w ;
c - > x = right - c - > w ;
if ( sticky = = BotLeft | | sticky = = BotRight )
* c - > y = bottom - * c - > h ;
c - > y = bottom - c - > h ;
resizetitle ( c ) ;
XSetWindowBorderWidth ( dpy , c - > win , 1 ) ;
XMoveResizeWindow ( dpy , c - > win , * c - > x , * c - > y , * c - > w , * c - > h ) ;
XMoveResizeWindow ( dpy , c - > win , c - > x , c - > y , c - > w , c - > h ) ;
e . type = ConfigureNotify ;
e . event = c - > win ;
e . window = c - > win ;
e . x = * c - > x ;
e . y = * c - > y ;
e . width = * c - > w ;
e . height = * c - > h ;
e . x = c - > x ;
e . y = c - > y ;
e . width = c - > w ;
e . height = c - > h ;
e . border_width = c - > border ;
e . above = None ;
e . override_redirect = False ;
@ -341,23 +334,6 @@ resize(Client *c, Bool inc, Corner sticky)
XSync ( dpy , False ) ;
}
void
setgeom ( Client * c )
{
if ( ( arrange = = dotile ) & & ! c - > isfloat ) {
c - > x = & c - > tx ;
c - > y = & c - > ty ;
c - > w = & c - > tw ;
c - > h = & c - > th ;
}
else {
c - > x = & c - > fx ;
c - > y = & c - > fy ;
c - > w = & c - > fw ;
c - > h = & c - > fh ;
}
}
void
setsize ( Client * c )
{