On Tue, May 12, 2020 at 05:09:01PM +0200, [email protected] wrote: > From a29a0142ede7ea8ae7cd2fad351789512789ddef Mon Sep 17 00:00:00 2001 > From: Mikau <[email protected]> > Date: Tue, 12 May 2020 15:35:48 +0200 > Subject: [tabbed][PATCH] Fixed crash when window height was less or equal to > bar height > To: [email protected] > > 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. > --- > tabbed.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/tabbed.c b/tabbed.c > index ff3ada0..d1f087b 100644 > --- 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,16 @@ 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 +882,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 +893,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 +1056,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; > -- > 2.26.2 > >
Thanks, pushed :) -- Kind regards, Hiltjo
