tapplied Gottox' resizehints patch, thanks Gottox! - dwm - [fork] customized bu… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit af508c2e8209a5e967dc67726919bc4da60b2c2c | |
parent f0d1d5206f926f58b259af3294a4eebf53a9e7bd | |
Author: Anselm R Garbe <[email protected]> | |
Date: Mon, 2 Mar 2009 10:43:48 +0000 | |
applied Gottox' resizehints patch, thanks Gottox! | |
Diffstat: | |
M dwm.c | 97 +++++++++++++++++------------… | |
1 file changed, 52 insertions(+), 45 deletions(-) | |
--- | |
diff --git a/dwm.c b/dwm.c | |
t@@ -129,6 +129,7 @@ typedef struct { | |
/* function declarations */ | |
static void applyrules(Client *c); | |
+static void applysizehints(Client *c, int *w, int *h); | |
static void arrange(void); | |
static void attach(Client *c); | |
static void attachstack(Client *c); | |
t@@ -271,6 +272,55 @@ applyrules(Client *c) { | |
} | |
void | |
+applysizehints(Client *c, int *w, int *h) { | |
+ Bool baseismin; | |
+ | |
+ /* 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; | |
+ } | |
+ | |
+ /* 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; | |
+ } | |
+ | |
+ /* 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; | |
+ | |
+ *w = MAX(*w, c->minw); | |
+ *h = MAX(*h, c->minh); | |
+ | |
+ if(c->maxw) | |
+ *w = MIN(*w, c->maxw); | |
+ | |
+ if(c->maxh) | |
+ *h = MIN(*h, c->maxh); | |
+} | |
+ | |
+void | |
arrange(void) { | |
unsigned int nt; | |
Client *c; | |
t@@ -1038,51 +1088,8 @@ void | |
resize(Client *c, int x, int y, int w, int h, Bool sizehints) { | |
XWindowChanges wc; | |
- if(sizehints) { | |
- /* see last two sentences in ICCCM 4.1.2.3 */ | |
- Bool 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; | |
- } | |
- | |
- /* 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; | |
- } | |
- | |
- /* 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; | |
- | |
- w = MAX(w, c->minw); | |
- h = MAX(h, c->minh); | |
- | |
- if(c->maxw) | |
- w = MIN(w, c->maxw); | |
- | |
- if(c->maxh) | |
- h = MIN(h, c->maxh); | |
- } | |
+ if(sizehints) | |
+ applysizehints(c, &w, &h); | |
if(w <= 0 || h <= 0) | |
return; | |
if(x > sx + sw) |