GrabModeAsync, GrabModeSync, None, None);
}
-static void
-resizetitle(Client *c) {
- 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(isvisible(c))
- XMoveResizeWindow(dpy, c->twin, c->tx, c->ty, c->tw, c->th);
- else
- XMoveResizeWindow(dpy, c->twin, c->tx + 2 * sw, c->ty, c->tw, c->th);
-}
-
static int
xerrordummy(Display *dsply, XErrorEvent *ee) {
return 0;
XMoveWindow(dpy, c->twin, c->tx + 2 * sw, c->ty);
}
+void
+configure(Client *c) {
+ XEvent synev;
+
+ synev.type = ConfigureNotify;
+ synev.xconfigure.display = dpy;
+ synev.xconfigure.event = c->win;
+ synev.xconfigure.window = c->win;
+ synev.xconfigure.x = c->x;
+ synev.xconfigure.y = c->y;
+ synev.xconfigure.width = c->w;
+ synev.xconfigure.height = c->h;
+ synev.xconfigure.border_width = c->border;
+ synev.xconfigure.above = None;
+ XSendEvent(dpy, c->win, True, NoEventMask, &synev);
+}
+
void
focus(Client *c) {
Client *old;
if(!sel)
sel = c;
else if(sel != c) {
- if(maximized)
- togglemax(NULL);
old = sel;
sel = c;
if(old) {
c->border = 0;
updatesize(c);
- if(c->x + c->w + 2 > sw)
- c->x = sw - c->w - 2;
- if(c->x < 0)
- c->x = 0;
- if(c->y + c->h + 2 > sh)
- c->y = sh - c->h - 2;
+ if(c->x + c->w + 2 * BORDERPX > sw)
+ c->x = sw - c->w - 2 * BORDERPX;
+ if(c->x < sx)
+ c->x = sx;
+ if(c->y + c->h + 2 * BORDERPX > sh)
+ c->y = sh - c->h - 2 * BORDERPX;
if(c->h != sh && c->y < bh)
c->y = bh;
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
grabbuttons(c, False);
+ updatetitle(c);
settags(c, getclient(trans));
if(!c->isfloat)
c->isfloat = trans
|| (c->maxw && c->minw &&
c->maxw == c->minw && c->maxh == c->minh);
+ resizetitle(c);
if(clients)
clients->prev = c;
c->snext = stack;
stack = clients = c;
- updatetitle(c);
ban(c);
XMapWindow(dpy, c->win);
XMapWindow(dpy, c->twin);
c->y = bottom - c->h;
/* offscreen appearance fixes */
- if(c->x + c->w < 0)
- c->x = 0;
+ if(c->x + c->w < sx)
+ c->x = sx;
if(c->y + c->h < bh)
c->y = bh;
if(c->x > sw)
if(c->w == sw && c->h == sh)
wc.border_width = 0;
else
- wc.border_width = 1;
+ wc.border_width = BORDERPX;
XConfigureWindow(dpy, c->win, CWX | CWY | CWWidth | CWHeight | CWBorderWidth, &wc);
+ configure(c);
XSync(dpy, False);
}
+void
+resizetitle(Client *c) {
+ c->tw = textw(c->name);
+ if(c->tw > c->w)
+ c->tw = c->w + 2 * BORDERPX;
+ c->tx = c->x + c->w - c->tw + 2 * BORDERPX;
+ c->ty = c->y;
+ if(isvisible(c))
+ XMoveResizeWindow(dpy, c->twin, c->tx, c->ty, c->tw, c->th);
+ else
+ XMoveResizeWindow(dpy, c->twin, c->tx + 2 * sw, c->ty, c->tw, c->th);
+}
+
void
updatesize(Client *c) {
long msize;
}
}
XFree(name.value);
- resizetitle(c);
-}
-
-void
-togglemax(Arg *arg) {
- int ox, oy, ow, oh;
- Client *c;
- XEvent ev;
-
- if(!sel)
- return;
-
- if((maximized = !maximized)) {
- ox = sel->x;
- oy = sel->y;
- ow = sel->w;
- oh = sel->h;
- sel->x = sx;
- sel->y = sy + bh;
- sel->w = sw - 2;
- sel->h = sh - 2 - bh;
-
- restack();
- for(c = getnext(clients); c; c = getnext(c->next))
- if(c != sel)
- ban(c);
- resize(sel, arrange == dofloat, TopLeft);
-
- sel->x = ox;
- sel->y = oy;
- sel->w = ow;
- sel->h = oh;
- }
- else
- arrange(NULL);
- while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
}
void