wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 756230ee932bde0e46a435da47eda4318a695208
parent 443c6cbe66f3b8634954d2e3fa0ce903d6d74287
Author: Kris Maglione <jg@suckless.org>
Date:   Sat,  9 Feb 2008 14:49:35 -0500

Fix bug causing random frames to float when toggling between managed/floating layer.

Diffstat:
cmd/wmii/_util.c | 4++--
cmd/wmii/area.c | 5+----
cmd/wmii/column.c | 6++++++
cmd/wmii/fns.h | 5++++-
cmd/wmii/frame.c | 3+--
5 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/cmd/wmii/_util.c b/cmd/wmii/_util.c @@ -125,7 +125,7 @@ spawn3l(int fd[3], const char *file, ...) { } void -backtrace(void) { +backtrace(char *btarg) { char *proc, *spid; int fd[3], p[2], q[2]; int pid, status, n; @@ -153,7 +153,7 @@ backtrace(void) { if(spawn3l(fd, "gdb", "gdb", "-batch", "-x", "/dev/fd/0", proc, spid, nil) < 0) exit(1); - fprint(p[1], "bt full\n"); + fprint(p[1], "bt %s\n", btarg); fprint(p[1], "detach\n"); close(p[1]); diff --git a/cmd/wmii/area.c b/cmd/wmii/area.c @@ -191,11 +191,8 @@ area_attach(Area *a, Frame *f) { view_arrange(a->view); - if(a->frame && a->sel == nil) { - fprint(2, "a->sel == nil\n"); - backtrace(); + if(btassert("4 full", a->frame && a->sel == nil)) a->sel = a->frame; - } } void diff --git a/cmd/wmii/column.c b/cmd/wmii/column.c @@ -164,6 +164,12 @@ column_scale(Area *a) { nuncol++; } + /* FIXME: Kludge. */ + dy = Dy(a->view->r) - Dy(a->r); + minh = colh * (ncol + nuncol - 1) + uncolh; + if(dy && Dy(a->r) < minh) + a->r.max.y += min(dy, minh - Dy(a->r)); + surplus = Dy(a->r) - (ncol * colh) - (nuncol * uncolh); diff --git a/cmd/wmii/fns.h b/cmd/wmii/fns.h @@ -12,6 +12,9 @@ # pragma varargck type "r" void #endif +#define btassert(arg, cond) \ + (cond ? fprint(1, __FILE__":%d: failed assertion: " #cond "\n", __LINE__), backtrace(arg), true : false) + /* area.c */ void area_attach(Area*, Frame*); Area* area_create(View*, Area *pos, uint w); @@ -226,7 +229,7 @@ void view_update_rect(View*); Rectangle* view_rects(View*, uint *num, Frame *ignore); /* _util.c */ -void backtrace(void); +void backtrace(char*); void closeexec(int); char** comm(int, char**, char**); int doublefork(void); diff --git a/cmd/wmii/frame.c b/cmd/wmii/frame.c @@ -300,9 +300,8 @@ frame_resize(Frame *f, Rectangle r) { Rectangle fr, cr; int collapsed, dx; - if(Dx(r) <= 0 || Dy(r) <= 0) { + if(btassert("4 full", Dx(r) <= 0 || Dy(r) <= 0)) { fprint(2, "Frame rect: %R\n", r); - backtrace(); r.max.x = min(r.min.x+1, r.max.x); r.max.y = min(r.min.y+1, r.max.y); }