diff options
| author | mikau <mikau@aaathats3as.com> | 2020-05-12 17:09:01 +0200 |
|---|---|---|
| committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2020-05-30 21:28:25 +0200 |
| commit | dabf6a25ab01107fc1e0464ee6a3e369d1626f97 (patch) | |
| tree | 9564367efc2443469349953ae7499c0b6c892ca7 /tabbed.c | |
| parent | b5f9ec647aae2d9a1d3bd586eb7523a4e0a329a3 (diff) | |
| download | tabbed-dabf6a25ab01107fc1e0464ee6a3e369d1626f97.tar.gz | |
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 (limited to 'tabbed.c')
| -rw-r--r-- | tabbed.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -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; |