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
parent
bcaf6a7a0f
commit
11737233a7
128
client.c
128
client.c
|
@ -16,19 +16,19 @@ resizetitle(Client *c)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
c->bw = 0;
|
c->tw = 0;
|
||||||
for(i = 0; i < TLast; i++)
|
for(i = 0; i < TLast; i++)
|
||||||
if(c->tags[i])
|
if(c->tags[i])
|
||||||
c->bw += textw(c->tags[i]);
|
c->tw += textw(c->tags[i]);
|
||||||
c->bw += textw(c->name);
|
c->tw += textw(c->name);
|
||||||
if(c->bw > *c->w)
|
if(c->tw > c->w)
|
||||||
c->bw = *c->w + 2;
|
c->tw = c->w + 2;
|
||||||
c->bx = *c->x + *c->w - c->bw + 2;
|
c->tx = c->x + c->w - c->tw + 2;
|
||||||
c->by = *c->y;
|
c->ty = c->y;
|
||||||
if(c->tags[tsel])
|
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
|
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
|
void
|
||||||
ban(Client *c)
|
ban(Client *c)
|
||||||
{
|
{
|
||||||
XMoveWindow(dpy, c->win, *c->x + 2 * sw, *c->y);
|
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
|
||||||
XMoveWindow(dpy, c->title, c->bx + 2 * sw, c->by);
|
XMoveWindow(dpy, c->title, c->tx + 2 * sw, c->ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -128,12 +128,12 @@ gravitate(Client *c, Bool invert)
|
||||||
case EastGravity:
|
case EastGravity:
|
||||||
case CenterGravity:
|
case CenterGravity:
|
||||||
case WestGravity:
|
case WestGravity:
|
||||||
dy = -(*c->h / 2) + c->border;
|
dy = -(c->h / 2) + c->border;
|
||||||
break;
|
break;
|
||||||
case SouthEastGravity:
|
case SouthEastGravity:
|
||||||
case SouthGravity:
|
case SouthGravity:
|
||||||
case SouthWestGravity:
|
case SouthWestGravity:
|
||||||
dy = -(*c->h);
|
dy = -(c->h);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -149,12 +149,12 @@ gravitate(Client *c, Bool invert)
|
||||||
case NorthGravity:
|
case NorthGravity:
|
||||||
case CenterGravity:
|
case CenterGravity:
|
||||||
case SouthGravity:
|
case SouthGravity:
|
||||||
dx = -(*c->w / 2) + c->border;
|
dx = -(c->w / 2) + c->border;
|
||||||
break;
|
break;
|
||||||
case NorthEastGravity:
|
case NorthEastGravity:
|
||||||
case EastGravity:
|
case EastGravity:
|
||||||
case SouthEastGravity:
|
case SouthEastGravity:
|
||||||
dx = -(*c->w + c->border);
|
dx = -(c->w + c->border);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -164,8 +164,8 @@ gravitate(Client *c, Bool invert)
|
||||||
dx = -dx;
|
dx = -dx;
|
||||||
dy = -dy;
|
dy = -dy;
|
||||||
}
|
}
|
||||||
*c->x += dx;
|
c->x += dx;
|
||||||
*c->y += dy;
|
c->y += dy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -203,19 +203,14 @@ manage(Window w, XWindowAttributes *wa)
|
||||||
|
|
||||||
c = emallocz(sizeof(Client));
|
c = emallocz(sizeof(Client));
|
||||||
c->win = w;
|
c->win = w;
|
||||||
c->bx = c->fx = c->tx = wa->x;
|
c->x = c->tx = wa->x;
|
||||||
c->by = c->fy = c->ty = wa->y;
|
c->y = c->ty = wa->y;
|
||||||
c->bw = c->fw = c->tw = wa->width;
|
c->w = c->tw = wa->width;
|
||||||
c->fh = c->th = wa->height;
|
c->h = wa->height;
|
||||||
c->bh = bh;
|
c->th = bh;
|
||||||
|
|
||||||
diff = sw - c->fw;
|
if(c->y < bh)
|
||||||
c->fx = random() % (diff ? diff : 1);
|
c->y = c->ty = bh;
|
||||||
diff = sh - c->fh - bh;
|
|
||||||
c->fy = random() % (diff ? diff : 1);
|
|
||||||
|
|
||||||
if(c->fy < bh)
|
|
||||||
c->by = c->fy = c->ty = bh;
|
|
||||||
|
|
||||||
c->border = 1;
|
c->border = 1;
|
||||||
c->proto = getproto(c->win);
|
c->proto = getproto(c->win);
|
||||||
|
@ -227,7 +222,7 @@ manage(Window w, XWindowAttributes *wa)
|
||||||
twa.background_pixmap = ParentRelative;
|
twa.background_pixmap = ParentRelative;
|
||||||
twa.event_mask = ExposureMask;
|
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,
|
0, DefaultDepth(dpy, screen), CopyFromParent,
|
||||||
DefaultVisual(dpy, screen),
|
DefaultVisual(dpy, screen),
|
||||||
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
|
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
|
||||||
|
@ -251,9 +246,7 @@ manage(Window w, XWindowAttributes *wa)
|
||||||
(c->maxw == c->minw) && (c->maxh == c->minh));
|
(c->maxw == c->minw) && (c->maxh == c->minh));
|
||||||
|
|
||||||
|
|
||||||
setgeom(c);
|
|
||||||
settitle(c);
|
settitle(c);
|
||||||
|
|
||||||
arrange(NULL);
|
arrange(NULL);
|
||||||
|
|
||||||
/* mapping the window now prevents flicker */
|
/* mapping the window now prevents flicker */
|
||||||
|
@ -273,10 +266,10 @@ maximize(Arg *arg)
|
||||||
{
|
{
|
||||||
if(!sel)
|
if(!sel)
|
||||||
return;
|
return;
|
||||||
*sel->x = sx;
|
sel->x = sx;
|
||||||
*sel->y = sy + bh;
|
sel->y = sy + bh;
|
||||||
*sel->w = sw - 2 * sel->border;
|
sel->w = sw - 2 * sel->border;
|
||||||
*sel->h = sh - 2 * sel->border - bh;
|
sel->h = sh - 2 * sel->border - bh;
|
||||||
higher(sel);
|
higher(sel);
|
||||||
resize(sel, False, TopLeft);
|
resize(sel, False, TopLeft);
|
||||||
}
|
}
|
||||||
|
@ -297,43 +290,43 @@ void
|
||||||
resize(Client *c, Bool inc, Corner sticky)
|
resize(Client *c, Bool inc, Corner sticky)
|
||||||
{
|
{
|
||||||
XConfigureEvent e;
|
XConfigureEvent e;
|
||||||
int right = *c->x + *c->w;
|
int right = c->x + c->w;
|
||||||
int bottom = *c->y + *c->h;
|
int bottom = c->y + c->h;
|
||||||
|
|
||||||
if(inc) {
|
if(inc) {
|
||||||
if(c->incw)
|
if(c->incw)
|
||||||
*c->w -= (*c->w - c->basew) % c->incw;
|
c->w -= (c->w - c->basew) % c->incw;
|
||||||
if(c->inch)
|
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 */
|
if(c->x > sw) /* might happen on restart */
|
||||||
*c->x = sw - *c->w;
|
c->x = sw - c->w;
|
||||||
if(*c->y > sh)
|
if(c->y > sh)
|
||||||
*c->y = sh - *c->h;
|
c->y = sh - c->h;
|
||||||
if(c->minw && *c->w < c->minw)
|
if(c->minw && c->w < c->minw)
|
||||||
*c->w = c->minw;
|
c->w = c->minw;
|
||||||
if(c->minh && *c->h < c->minh)
|
if(c->minh && c->h < c->minh)
|
||||||
*c->h = c->minh;
|
c->h = c->minh;
|
||||||
if(c->maxw && *c->w > c->maxw)
|
if(c->maxw && c->w > c->maxw)
|
||||||
*c->w = c->maxw;
|
c->w = c->maxw;
|
||||||
if(c->maxh && *c->h > c->maxh)
|
if(c->maxh && c->h > c->maxh)
|
||||||
*c->h = c->maxh;
|
c->h = c->maxh;
|
||||||
if(sticky == TopRight || sticky == BotRight)
|
if(sticky == TopRight || sticky == BotRight)
|
||||||
*c->x = right - *c->w;
|
c->x = right - c->w;
|
||||||
if(sticky == BotLeft || sticky == BotRight)
|
if(sticky == BotLeft || sticky == BotRight)
|
||||||
*c->y = bottom - *c->h;
|
c->y = bottom - c->h;
|
||||||
|
|
||||||
resizetitle(c);
|
resizetitle(c);
|
||||||
XSetWindowBorderWidth(dpy, c->win, 1);
|
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.type = ConfigureNotify;
|
||||||
e.event = c->win;
|
e.event = c->win;
|
||||||
e.window = c->win;
|
e.window = c->win;
|
||||||
e.x = *c->x;
|
e.x = c->x;
|
||||||
e.y = *c->y;
|
e.y = c->y;
|
||||||
e.width = *c->w;
|
e.width = c->w;
|
||||||
e.height = *c->h;
|
e.height = c->h;
|
||||||
e.border_width = c->border;
|
e.border_width = c->border;
|
||||||
e.above = None;
|
e.above = None;
|
||||||
e.override_redirect = False;
|
e.override_redirect = False;
|
||||||
|
@ -341,23 +334,6 @@ resize(Client *c, Bool inc, Corner sticky)
|
||||||
XSync(dpy, False);
|
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
|
void
|
||||||
setsize(Client *c)
|
setsize(Client *c)
|
||||||
{
|
{
|
||||||
|
|
7
dwm.h
7
dwm.h
|
@ -67,10 +67,8 @@ struct Client {
|
||||||
char name[256];
|
char name[256];
|
||||||
char *tags[TLast];
|
char *tags[TLast];
|
||||||
int proto;
|
int proto;
|
||||||
int *x, *y, *w, *h; /* current geom */
|
int x, y, w, h;
|
||||||
int bx, by, bw, bh; /* title bar */
|
int tx, ty, tw, th; /* title */
|
||||||
int fx, fy, fw, fh; /* floating geom */
|
|
||||||
int tx, ty, tw, th; /* tiled geom */
|
|
||||||
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
||||||
int grav;
|
int grav;
|
||||||
unsigned int border;
|
unsigned int border;
|
||||||
|
@ -109,7 +107,6 @@ extern void manage(Window w, XWindowAttributes *wa);
|
||||||
extern void maximize(Arg *arg);
|
extern void maximize(Arg *arg);
|
||||||
extern void pop(Client *c);
|
extern void pop(Client *c);
|
||||||
extern void resize(Client *c, Bool inc, Corner sticky);
|
extern void resize(Client *c, Bool inc, Corner sticky);
|
||||||
extern void setgeom(Client *c);
|
|
||||||
extern void setsize(Client *c);
|
extern void setsize(Client *c);
|
||||||
extern void settitle(Client *c);
|
extern void settitle(Client *c);
|
||||||
extern void unmanage(Client *c);
|
extern void unmanage(Client *c);
|
||||||
|
|
30
event.c
30
event.c
|
@ -70,8 +70,8 @@ movemouse(Client *c)
|
||||||
unsigned int dui;
|
unsigned int dui;
|
||||||
Window dummy;
|
Window dummy;
|
||||||
|
|
||||||
ocx = *c->x;
|
ocx = c->x;
|
||||||
ocy = *c->y;
|
ocy = c->y;
|
||||||
if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
|
if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
|
||||||
None, cursor[CurMove], CurrentTime) != GrabSuccess)
|
None, cursor[CurMove], CurrentTime) != GrabSuccess)
|
||||||
return;
|
return;
|
||||||
|
@ -85,8 +85,8 @@ movemouse(Client *c)
|
||||||
break;
|
break;
|
||||||
case MotionNotify:
|
case MotionNotify:
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
*c->x = ocx + (ev.xmotion.x - x1);
|
c->x = ocx + (ev.xmotion.x - x1);
|
||||||
*c->y = ocy + (ev.xmotion.y - y1);
|
c->y = ocy + (ev.xmotion.y - y1);
|
||||||
resize(c, False, TopLeft);
|
resize(c, False, TopLeft);
|
||||||
break;
|
break;
|
||||||
case ButtonRelease:
|
case ButtonRelease:
|
||||||
|
@ -103,12 +103,12 @@ resizemouse(Client *c)
|
||||||
int ocx, ocy;
|
int ocx, ocy;
|
||||||
Corner sticky;
|
Corner sticky;
|
||||||
|
|
||||||
ocx = *c->x;
|
ocx = c->x;
|
||||||
ocy = *c->y;
|
ocy = c->y;
|
||||||
if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
|
if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
|
||||||
None, cursor[CurResize], CurrentTime) != GrabSuccess)
|
None, cursor[CurResize], CurrentTime) != GrabSuccess)
|
||||||
return;
|
return;
|
||||||
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, *c->w, *c->h);
|
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
|
||||||
for(;;) {
|
for(;;) {
|
||||||
XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
|
XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
|
||||||
switch(ev.type) {
|
switch(ev.type) {
|
||||||
|
@ -118,10 +118,10 @@ resizemouse(Client *c)
|
||||||
break;
|
break;
|
||||||
case MotionNotify:
|
case MotionNotify:
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
*c->w = abs(ocx - ev.xmotion.x);
|
c->w = abs(ocx - ev.xmotion.x);
|
||||||
*c->h = abs(ocy - ev.xmotion.y);
|
c->h = abs(ocy - ev.xmotion.y);
|
||||||
*c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - *c->w;
|
c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
|
||||||
*c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - *c->h;
|
c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h;
|
||||||
if(ocx <= ev.xmotion.x)
|
if(ocx <= ev.xmotion.x)
|
||||||
sticky = (ocy <= ev.xmotion.y) ? TopLeft : BotLeft;
|
sticky = (ocy <= ev.xmotion.y) ? TopLeft : BotLeft;
|
||||||
else
|
else
|
||||||
|
@ -203,13 +203,13 @@ configurerequest(XEvent *e)
|
||||||
if((c = getclient(ev->window))) {
|
if((c = getclient(ev->window))) {
|
||||||
gravitate(c, True);
|
gravitate(c, True);
|
||||||
if(ev->value_mask & CWX)
|
if(ev->value_mask & CWX)
|
||||||
*c->x = ev->x;
|
c->x = ev->x;
|
||||||
if(ev->value_mask & CWY)
|
if(ev->value_mask & CWY)
|
||||||
*c->y = ev->y;
|
c->y = ev->y;
|
||||||
if(ev->value_mask & CWWidth)
|
if(ev->value_mask & CWWidth)
|
||||||
*c->w = ev->width;
|
c->w = ev->width;
|
||||||
if(ev->value_mask & CWHeight)
|
if(ev->value_mask & CWHeight)
|
||||||
*c->h = ev->height;
|
c->h = ev->height;
|
||||||
if(ev->value_mask & CWBorderWidth)
|
if(ev->value_mask & CWBorderWidth)
|
||||||
c->border = 1;
|
c->border = 1;
|
||||||
gravitate(c, False);
|
gravitate(c, False);
|
||||||
|
|
34
tag.c
34
tag.c
|
@ -53,7 +53,6 @@ dofloat(Arg *arg)
|
||||||
|
|
||||||
arrange = dofloat;
|
arrange = dofloat;
|
||||||
for(c = clients; c; c = c->next) {
|
for(c = clients; c; c = c->next) {
|
||||||
setgeom(c);
|
|
||||||
if(c->tags[tsel]) {
|
if(c->tags[tsel]) {
|
||||||
resize(c, True, TopLeft);
|
resize(c, True, TopLeft);
|
||||||
}
|
}
|
||||||
|
@ -87,7 +86,6 @@ dotile(Arg *arg)
|
||||||
h = sh - bh;
|
h = sh - bh;
|
||||||
|
|
||||||
for(i = 0, c = clients; c; c = c->next) {
|
for(i = 0, c = clients; c; c = c->next) {
|
||||||
setgeom(c);
|
|
||||||
if(c->tags[tsel]) {
|
if(c->tags[tsel]) {
|
||||||
if(c->isfloat) {
|
if(c->isfloat) {
|
||||||
higher(c);
|
higher(c);
|
||||||
|
@ -95,28 +93,28 @@ dotile(Arg *arg)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(n == 1) {
|
if(n == 1) {
|
||||||
*c->x = sx;
|
c->x = sx;
|
||||||
*c->y = sy + bh;
|
c->y = sy + bh;
|
||||||
*c->w = sw - 2 * c->border;
|
c->w = sw - 2 * c->border;
|
||||||
*c->h = sh - 2 * c->border - bh;
|
c->h = sh - 2 * c->border - bh;
|
||||||
}
|
}
|
||||||
else if(i == 0) {
|
else if(i == 0) {
|
||||||
*c->x = sx;
|
c->x = sx;
|
||||||
*c->y = sy + bh;
|
c->y = sy + bh;
|
||||||
*c->w = mw - 2 * c->border;
|
c->w = mw - 2 * c->border;
|
||||||
*c->h = sh - 2 * c->border - bh;
|
c->h = sh - 2 * c->border - bh;
|
||||||
}
|
}
|
||||||
else if(h > bh) {
|
else if(h > bh) {
|
||||||
*c->x = sx + mw;
|
c->x = sx + mw;
|
||||||
*c->y = sy + (i - 1) * h + bh;
|
c->y = sy + (i - 1) * h + bh;
|
||||||
*c->w = w - 2 * c->border;
|
c->w = w - 2 * c->border;
|
||||||
*c->h = h - 2 * c->border;
|
c->h = h - 2 * c->border;
|
||||||
}
|
}
|
||||||
else { /* fallback if h < bh */
|
else { /* fallback if h < bh */
|
||||||
*c->x = sx + mw;
|
c->x = sx + mw;
|
||||||
*c->y = sy + bh;
|
c->y = sy + bh;
|
||||||
*c->w = w - 2 * c->border;
|
c->w = w - 2 * c->border;
|
||||||
*c->h = sh - 2 * c->border - bh;
|
c->h = sh - 2 * c->border - bh;
|
||||||
}
|
}
|
||||||
resize(c, False, TopLeft);
|
resize(c, False, TopLeft);
|
||||||
i++;
|
i++;
|
||||||
|
|
Loading…
Reference in New Issue