|
|
@@ -89,7 +89,7 @@ struct Client {
|
|
|
float mina, maxa;
|
|
|
int x, y, w, h;
|
|
|
int oldx, oldy, oldw, oldh;
|
|
|
- int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
|
|
+ int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid;
|
|
|
int bw, oldbw;
|
|
|
unsigned int tags;
|
|
|
int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
|
|
|
@@ -345,6 +345,8 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact)
|
|
|
if (*w < bh)
|
|
|
*w = bh;
|
|
|
if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) {
|
|
|
+ if (!c->hintsvalid)
|
|
|
+ updatesizehints(c);
|
|
|
/* 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 */
|
|
|
@@ -1059,7 +1061,6 @@ manage(Window w, XWindowAttributes *wa)
|
|
|
XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
|
|
|
configure(c); /* propagates border_width, if size doesn't change */
|
|
|
updatewindowtype(c);
|
|
|
- updatesizehints(c);
|
|
|
updatewmhints(c);
|
|
|
XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
|
|
|
grabbuttons(c, 0);
|
|
|
@@ -1233,7 +1234,7 @@ propertynotify(XEvent *e)
|
|
|
arrange(c->mon);
|
|
|
break;
|
|
|
case XA_WM_NORMAL_HINTS:
|
|
|
- updatesizehints(c);
|
|
|
+ c->hintsvalid = 0;
|
|
|
break;
|
|
|
case XA_WM_HINTS:
|
|
|
updatewmhints(c);
|
|
|
@@ -1989,6 +1990,7 @@ updatesizehints(Client *c)
|
|
|
} else
|
|
|
c->maxa = c->mina = 0.0;
|
|
|
c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh);
|
|
|
+ c->hintsvalid = 1;
|
|
|
}
|
|
|
|
|
|
void
|