summaryrefslogtreecommitdiff
path: root/cmd/wmii/view.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/wmii/view.c')
-rw-r--r--cmd/wmii/view.c41
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;
}