tapplied Gottox' patches, and also removed usegrab - dwm - [fork] customized bu… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 565697087b92db6eb09e896f60f68503ce0a4ac1 | |
parent ea0008cba24b57f7955541568c8c527c06329ccd | |
Author: Anselm R Garbe <[email protected]> | |
Date: Tue, 17 Mar 2009 19:53:00 +0000 | |
applied Gottox' patches, and also removed usegrab | |
Diffstat: | |
M config.def.h | 2 -- | |
M dwm.c | 120 ++++++++++++++---------------… | |
2 files changed, 55 insertions(+), 67 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -12,8 +12,6 @@ static unsigned int borderpx = 1; /* border pi… | |
static unsigned int snap = 32; /* snap pixel */ | |
static Bool showbar = True; /* False means no bar */ | |
static Bool topbar = True; /* False means bottom bar */ | |
-static Bool usegrab = False; /* True means grabbing the X s… | |
- during mouse-based resizals… | |
/* tagging */ | |
static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8"… | |
diff --git a/dwm.c b/dwm.c | |
t@@ -129,7 +129,7 @@ typedef struct { | |
/* function declarations */ | |
static void applyrules(Client *c); | |
-static void applysizehints(Client *c, int *w, int *h); | |
+static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h); | |
static void arrange(void); | |
static void attach(Client *c); | |
static void attachstack(Client *c); | |
t@@ -252,6 +252,7 @@ applyrules(Client *c) { | |
XClassHint ch = { 0 }; | |
/* rule matching */ | |
+ c->isfloating = c->tags = 0; | |
if(XGetClassHint(dpy, c->win, &ch)) { | |
for(i = 0; i < LENGTH(rules); i++) { | |
r = &rules[i]; | |
t@@ -259,7 +260,7 @@ applyrules(Client *c) { | |
&& (!r->class || (ch.res_class && strstr(ch.res_class,… | |
&& (!r->instance || (ch.res_name && strstr(ch.res_name… | |
c->isfloating = r->isfloating; | |
- c->tags |= r->tags & TAGMASK ? r->tags & TAGMA… | |
+ c->tags |= r->tags; | |
} | |
} | |
if(ch.res_class) | |
t@@ -267,60 +268,72 @@ applyrules(Client *c) { | |
if(ch.res_name) | |
XFree(ch.res_name); | |
} | |
- if(!c->tags) | |
- c->tags = tagset[seltags]; | |
+ c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : tagset[seltags]; | |
} | |
-void | |
-applysizehints(Client *c, int *w, int *h) { | |
+Bool | |
+applysizehints(Client *c, int *x, int *y, int *w, int *h) { | |
Bool baseismin; | |
- if(!resizehints && !c->isfloating) | |
- return; | |
- | |
- /* see last two sentences in ICCCM 4.1.2.3 */ | |
- baseismin = c->basew == c->minw && c->baseh == c->minh; | |
- | |
/* set minimum possible */ | |
*w = MAX(1, *w); | |
*h = MAX(1, *h); | |
- if(!baseismin) { /* temporarily remove base dimensions */ | |
- *w -= c->basew; | |
- *h -= c->baseh; | |
- } | |
+ if(*x > sx + sw) | |
+ *x = sw - WIDTH(c); | |
+ if(*y > sy + sh) | |
+ *y = sh - HEIGHT(c); | |
+ if(*x + *w + 2 * c->bw < sx) | |
+ *x = sx; | |
+ if(*y + *h + 2 * c->bw < sy) | |
+ *y = sy; | |
+ if(*h < bh) | |
+ *h = bh; | |
+ if(*w < bh) | |
+ *w = bh; | |
+ | |
+ if(resizehints || c->isfloating) { | |
+ /* see last two sentences in ICCCM 4.1.2.3 */ | |
+ baseismin = c->basew == c->minw && c->baseh == c->minh; | |
+ | |
+ if(!baseismin) { /* temporarily remove base dimensions */ | |
+ *w -= c->basew; | |
+ *h -= c->baseh; | |
+ } | |
- /* adjust for aspect limits */ | |
- if(c->mina > 0 && c->maxa > 0) { | |
- if(c->maxa < (float)*w / *h) | |
- *w = *h * c->maxa; | |
- else if(c->mina < (float)*h / *w) | |
- *h = *w * c->mina; | |
- } | |
+ /* adjust for aspect limits */ | |
+ if(c->mina > 0 && c->maxa > 0) { | |
+ if(c->maxa < (float)*w / *h) | |
+ *w = *h * c->maxa; | |
+ else if(c->mina < (float)*h / *w) | |
+ *h = *w * c->mina; | |
+ } | |
- if(baseismin) { /* increment calculation requires this */ | |
- *w -= c->basew; | |
- *h -= c->baseh; | |
- } | |
+ if(baseismin) { /* increment calculation requires this */ | |
+ *w -= c->basew; | |
+ *h -= c->baseh; | |
+ } | |
- /* adjust for increment value */ | |
- if(c->incw) | |
- *w -= *w % c->incw; | |
- if(c->inch) | |
- *h -= *h % c->inch; | |
+ /* adjust for increment value */ | |
+ if(c->incw) | |
+ *w -= *w % c->incw; | |
+ if(c->inch) | |
+ *h -= *h % c->inch; | |
- /* restore base dimensions */ | |
- *w += c->basew; | |
- *h += c->baseh; | |
+ /* restore base dimensions */ | |
+ *w += c->basew; | |
+ *h += c->baseh; | |
- *w = MAX(*w, c->minw); | |
- *h = MAX(*h, c->minh); | |
+ *w = MAX(*w, c->minw); | |
+ *h = MAX(*h, c->minh); | |
- if(c->maxw) | |
- *w = MIN(*w, c->maxw); | |
+ if(c->maxw) | |
+ *w = MIN(*w, c->maxw); | |
- if(c->maxh) | |
- *h = MIN(*h, c->maxh); | |
+ if(c->maxh) | |
+ *h = MIN(*h, c->maxh); | |
+ } | |
+ return *x != c->x || *y != c->y || *w != c->w || *h != c->h; | |
} | |
void | |
t@@ -1005,8 +1018,6 @@ movemouse(const Arg *arg) { | |
None, cursor[CurMove], CurrentTime) != GrabSuccess) | |
return; | |
XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui); | |
- if(usegrab) | |
- XGrabServer(dpy); | |
do { | |
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMas… | |
switch (ev.type) { | |
t@@ -1037,8 +1048,6 @@ movemouse(const Arg *arg) { | |
} | |
} | |
while(ev.type != ButtonRelease); | |
- if(usegrab) | |
- XUngrabServer(dpy); | |
XUngrabPointer(dpy, CurrentTime); | |
} | |
t@@ -1091,22 +1100,7 @@ void | |
resize(Client *c, int x, int y, int w, int h) { | |
XWindowChanges wc; | |
- applysizehints(c, &w, &h); | |
- if(w <= 0 || h <= 0) | |
- return; | |
- if(x > sx + sw) | |
- x = sw - WIDTH(c); | |
- if(y > sy + sh) | |
- y = sh - HEIGHT(c); | |
- if(x + w + 2 * c->bw < sx) | |
- x = sx; | |
- if(y + h + 2 * c->bw < sy) | |
- y = sy; | |
- if(h < bh) | |
- h = bh; | |
- if(w < bh) | |
- w = bh; | |
- if(c->x != x || c->y != y || c->w != w || c->h != h) { | |
+ if(applysizehints(c, &x, &y, &w, &h)) { | |
c->x = wc.x = x; | |
c->y = wc.y = y; | |
c->w = wc.width = w; | |
t@@ -1135,8 +1129,6 @@ resizemouse(const Arg *arg) { | |
None, cursor[CurResize], CurrentTime) != GrabSuccess) | |
return; | |
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c… | |
- if(usegrab) | |
- XGrabServer(dpy); | |
do { | |
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMas… | |
switch(ev.type) { | |
t@@ -1161,8 +1153,6 @@ resizemouse(const Arg *arg) { | |
} | |
} | |
while(ev.type != ButtonRelease); | |
- if(usegrab) | |
- XUngrabServer(dpy); | |
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c… | |
XUngrabPointer(dpy, CurrentTime); | |
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); |