diff options
Diffstat (limited to 'cmd/wmii/view.c')
-rw-r--r-- | cmd/wmii/view.c | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/cmd/wmii/view.c b/cmd/wmii/view.c index 5bf43c5..4aa3d29 100644 --- a/cmd/wmii/view.c +++ b/cmd/wmii/view.c @@ -1,5 +1,5 @@ /* Copyright ©2004-2006 Anselm R. Garbe <garbeam at gmail dot com> - * Copyright ©2006-2010 Kris Maglione <maglione.k at Gmail> + * Copyright ©2006-2014 Kris Maglione <maglione.k at Gmail> * See LICENSE file for license details. */ #include "dat.h" @@ -113,6 +113,38 @@ view_init(View *v, int iscreen) { } void +view_update_screens(View *v) { + Area *a; + Frame *f; + int s; + + if (v->sel->screen > (long)nscreens) + v->sel = v->floating->next; + + v->selscreen = min(v->selscreen, nscreens); + + if (nscreens_new < nscreens) { + foreach_frame(v, s, a, f) { + f->oldscreen = min(f->oldscreen, nscreens_new); + if (a->screen >= nscreens_new) { + a->permanent = true; + area_detach(f); + view_attach(v, f); + } + } + + foreach_area(v, s, a) { + if (a->screen >= nscreens_new) + area_destroy(a); + } + } + + v->areas = erealloc(v->areas, nscreens_new * sizeof *v->areas); + v->r = erealloc(v->r, nscreens_new * sizeof *v->r); + v->pad = erealloc(v->pad, nscreens_new * sizeof *v->pad); +} + +void view_destroy(View *v) { View **vp; Frame *f; @@ -385,6 +417,7 @@ view_attach(View *v, Frame *f) { oldsel = v->oldsel; a = v->sel; + if(c->floating == Never) a = view_findarea(v, v->selscreen, v->selcol, false); else if(client_floats_p(c)) { @@ -392,8 +425,12 @@ view_attach(View *v, Frame *f) { oldsel = v->sel; a = v->floating; } + else if(c->sel && c->sel->screen >= 0 && c->sel->screen < nscreens_new && + c->sel->screen != v->sel->screen) + a = view_findarea(v, c->sel->screen, 0, false); else if((ff = client_groupframe(c, v))) { - a = ff->area; + if (ff->client != c && ff->area->screen < nscreens_new) + a = ff->area; if(v->oldsel && ff->client == view_selclient(v)) a = v->oldsel; } |