wmii

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

commit e99f8a8a583ef34e2f01756fda4cd03907122ae3
parent 81d63271d1b88db750f05b447bb0f4dfbd53fcb9
Author: Kris Maglione <jg@suckless.org>
Date:   Mon, 15 Sep 2008 19:30:47 -0400

Fix some bugs related to windows which automagically float, and subsequent actions.

Diffstat:
cmd/wmii/float.c | 7++++---
cmd/wmii/view.c | 16+++++++++++++---
2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/cmd/wmii/float.c b/cmd/wmii/float.c @@ -24,12 +24,13 @@ float_attach(Area *a, Frame *f) { void float_detach(Frame *f) { Frame *pr; - Area *a, *sel; + Area *a, *sel, *oldsel; View *v; v = f->view; a = f->area; sel = view_findarea(v, v->selcol, false); + oldsel = v->oldsel; if(!(sel || !v->area->next)) warning("%s:%d: !(sel || !v->area->next)", __FILE__, __LINE__); pr = f->aprev; @@ -43,8 +44,8 @@ float_detach(Frame *f) { } f->area = nil; - if(v->oldsel) - area_focus(v->oldsel); + if(oldsel) + area_focus(oldsel); else if(!a->frame) if(sel && sel->frame) area_focus(sel); diff --git a/cmd/wmii/view.c b/cmd/wmii/view.c @@ -300,20 +300,27 @@ void view_attach(View *v, Frame *f) { Client *c; Frame *ff; - Area *a; + Area *a, *oldsel; c = f->client; + oldsel = nil; a = v->sel; if(client_floats_p(c)) { if(v->sel != v->area) - v->oldsel = v->sel; + oldsel = v->sel; a = v->area; } else if((ff = client_groupframe(c, v))) a = ff->area; else if(v->sel->floating) { - if(starting || c->sel && c->sel->area && !c->sel->area->floating) + if(v->oldsel) + a = v->oldsel; + /* Don't float a frame when starting or when its + * last focused frame didn't float. Important when + * tagging with +foo. + */ + else if(starting || c->sel && c->sel->area && !c->sel->area->floating) a = v->area->next; } @@ -332,6 +339,9 @@ view_attach(View *v, Frame *f) { area_setsel(f->area, f); } + if(oldsel) + v->oldsel = oldsel; + if(c->sel == nil) c->sel = f; view_update(v);