removed c->f{x,y,w,h} and c->t{x,y,w,h} in favor for the new rule handling remembering two kinds of geometries is unnecessary, removed the randomized (x,y) setting on dofloat startup, was kind too random und unpredictable

This commit is contained in:
arg@10ksloc.org
2006-07-20 07:26:23 +02:00
parent bcaf6a7a0f
commit 11737233a7
4 changed files with 85 additions and 114 deletions

128
client.c

@ -16,19 +16,19 @@ resizetitle(Client *c)
{
int i;
c->bw = 0;
c->tw = 0;
for(i = 0; i < TLast; i++)
if(c->tags[i])
c->bw += textw(c->tags[i]);
c->bw += textw(c->name);
if(c->bw > *c->w)
c->bw = *c->w + 2;
c->bx = *c->x + *c->w - c->bw + 2;
c->by = *c->y;
c->tw += textw(c->tags[i]);
c->tw += textw(c->name);
if(c->tw > c->w)
c->tw = c->w + 2;
c->tx = c->x + c->w - c->tw + 2;
c->ty = c->y;
if(c->tags[tsel])
XMoveResizeWindow(dpy, c->title, c->bx, c->by, c->bw, c->bh);
XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th);
else
XMoveResizeWindow(dpy, c->title, c->bx + 2 * sw, c->by, c->bw, c->bh);
XMoveResizeWindow(dpy, c->title, c->tx + 2 * sw, c->ty, c->tw, c->th);
}
@ -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->by);
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
XMoveWindow(dpy, c->title, c->tx + 2 * sw, c->ty);
}
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->fx = c->tx = wa->x;
c->by = c->fy = c->ty = wa->y;
c->bw = c->fw = c->tw = wa->width;
c->fh = c->th = wa->height;
c->bh = bh;
c->x = c->tx = wa->x;
c->y = c->ty = wa->y;
c->w = c->tw = wa->width;
c->h = wa->height;
c->th = 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->bh,
c->title = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th,
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)
{