Fixed crash when window height was less or equal to bar height - tabbed - tab i… | |
git clone git://git.suckless.org/tabbed | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit dabf6a25ab01107fc1e0464ee6a3e369d1626f97 | |
parent b5f9ec647aae2d9a1d3bd586eb7523a4e0a329a3 | |
Author: mikau <[email protected]> | |
Date: Tue, 12 May 2020 17:09:01 +0200 | |
Fixed crash when window height was less or equal to bar height | |
When resizing, the embedded client is being resized to (height = wh - bh), | |
which is (<= 0) if (wh <= bh). This generates a BadValue Error leading to a | |
crash. This patch fixes that by hiding the tab bar if the window height is too | |
small, and also sets a min_height WM hint to prevent that situation from | |
happening in the first place. | |
Diffstat: | |
M tabbed.c | 18 ++++++++++++++---- | |
1 file changed, 14 insertions(+), 4 deletions(-) | |
--- | |
diff --git a/tabbed.c b/tabbed.c | |
@@ -152,7 +152,7 @@ static void (*handler[LASTEvent]) (const XEvent *) = { | |
[MapRequest] = maprequest, | |
[PropertyNotify] = propertynotify, | |
}; | |
-static int bh, wx, wy, ww, wh; | |
+static int bh, obh, wx, wy, ww, wh; | |
static unsigned int numlockmask; | |
static Bool running = True, nextfocus, doinitspawn = True, | |
fillagain = False, closelastclient = False, | |
@@ -256,6 +256,15 @@ configurenotify(const XEvent *e) | |
XFreePixmap(dpy, dc.drawable); | |
dc.drawable = XCreatePixmap(dpy, root, ww, wh, | |
DefaultDepth(dpy, screen)); | |
+ | |
+ if (!obh && (wh <= bh)) { | |
+ obh = bh; | |
+ bh = 0; | |
+ } else if (!bh && (wh > obh)) { | |
+ bh = obh; | |
+ obh = 0; | |
+ } | |
+ | |
if (sel > -1) | |
resize(sel, ww, wh - bh); | |
XSync(dpy, False); | |
@@ -872,7 +881,7 @@ resize(int c, int w, int h) | |
XWindowChanges wc; | |
ce.x = 0; | |
- ce.y = bh; | |
+ ce.y = wc.y = bh; | |
ce.width = wc.width = w; | |
ce.height = wc.height = h; | |
ce.type = ConfigureNotify; | |
@@ -883,7 +892,7 @@ resize(int c, int w, int h) | |
ce.override_redirect = False; | |
ce.border_width = 0; | |
- XConfigureWindow(dpy, clients[c]->win, CWWidth | CWHeight, &wc); | |
+ XConfigureWindow(dpy, clients[c]->win, CWY | CWWidth | CWHeight, &wc); | |
XSendEvent(dpy, clients[c]->win, False, StructureNotifyMask, | |
(XEvent *)&ce); | |
} | |
@@ -1046,9 +1055,10 @@ setup(void) | |
size_hint = XAllocSizeHints(); | |
if (!isfixed) { | |
- size_hint->flags = PSize; | |
+ size_hint->flags = PSize | PMinSize; | |
size_hint->height = wh; | |
size_hint->width = ww; | |
+ size_hint->min_height = bh + 1; | |
} else { | |
size_hint->flags = PMaxSize | PMinSize; | |
size_hint->min_width = size_hint->max_width = ww; |