-/*
- * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
+/* (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
* See LICENSE file for license details.
*/
#include "dwm.h"
return NULL;
}
-void
-gravitate(Client *c, Bool invert) {
- int dx = 0, dy = 0;
-
- switch(c->grav) {
- default:
- break;
- case StaticGravity:
- case NorthWestGravity:
- case NorthGravity:
- case NorthEastGravity:
- dy = c->border;
- break;
- case EastGravity:
- case CenterGravity:
- case WestGravity:
- dy = -(c->h / 2) + c->border;
- break;
- case SouthEastGravity:
- case SouthGravity:
- case SouthWestGravity:
- dy = -(c->h);
- break;
- }
-
- switch (c->grav) {
- default:
- break;
- case StaticGravity:
- case NorthWestGravity:
- case WestGravity:
- case SouthWestGravity:
- dx = c->border;
- break;
- case NorthGravity:
- case CenterGravity:
- case SouthGravity:
- dx = -(c->w / 2) + c->border;
- break;
- case NorthEastGravity:
- case EastGravity:
- case SouthEastGravity:
- dx = -(c->w + c->border);
- break;
- }
-
- if(invert) {
- dx = -dx;
- dy = -dy;
- }
- c->x += dx;
- c->y += dy;
-}
-
void
killclient(Arg *arg) {
if(!sel)
c = emallocz(sizeof(Client));
c->tags = emallocz(ntags * sizeof(Bool));
c->win = w;
+ c->border = 0;
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;
-
- 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;
-
c->proto = getproto(c->win);
XSelectInput(dpy, c->win,
StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
twa.override_redirect = 1;
twa.background_pixmap = ParentRelative;
twa.event_mask = ExposureMask | EnterWindowMask;
-
c->twin = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th,
0, DefaultDepth(dpy, screen), CopyFromParent,
DefaultVisual(dpy, screen),
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);
+ c->isfloat = trans || c->isfixed;
resizetitle(c);
-
if(clients)
clients->prev = c;
c->next = clients;
c->snext = stack;
stack = clients = c;
-
ban(c);
XMapWindow(dpy, c->win);
XMapWindow(dpy, c->twin);
if(isvisible(c))
focus(c);
- arrange(NULL);
+ arrange();
}
void
c->x = right - c->w;
if(sticky == BotLeft || sticky == BotRight)
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)
c->x = sw - c->w;
if(c->y > sh)
c->y = sh - c->h;
-
resizetitle(c);
wc.x = c->x;
wc.y = c->y;
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);
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->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
c->minw = c->minh = 0;
- if(c->flags & PWinGravity)
- c->grav = size.win_gravity;
- else
- c->grav = NorthWestGravity;
+ c->isfixed = (c->maxw && c->minw && c->maxh && c->minh &&
+ c->maxw == c->minw && c->maxh == c->minh);
}
void
if(!name.nitems)
return;
if(name.encoding == XA_STRING)
- strncpy(c->name, (char *)name.value, sizeof(c->name));
+ strncpy(c->name, (char *)name.value, sizeof c->name);
else {
if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success
&& n > 0 && *list)
{
- strncpy(c->name, *list, sizeof(c->name));
+ strncpy(c->name, *list, sizeof c->name);
XFreeStringList(list);
}
}
/* The server grab construct avoids race conditions. */
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);
-
detach(c);
detachstack(c);
if(sel == c) {
for(nc = stack; nc && !isvisible(nc); nc = nc->snext);
focus(nc);
}
-
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
XDestroyWindow(dpy, c->twin);
-
free(c->tags);
free(c);
-
XSync(dpy, False);
XSetErrorHandler(xerror);
XUngrabServer(dpy);
- arrange(NULL);
+ arrange();
}