From 2c6f183cf16c571731d51ce5fa25349e7ab3e5c8 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Wed, 12 Oct 2011 23:56:56 +0200 Subject: [PATCH] Preset historic now works --- src/client.c | 3 ++- src/layout.c | 26 +++++++++++++++++++------- src/tag.c | 11 +++++++---- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/client.c b/src/client.c index e585cf5..81ab45f 100644 --- a/src/client.c +++ b/src/client.c @@ -616,6 +616,8 @@ client_maximize(struct client *c) c->geo.h = c->tag->screen->ugeo.h; client_moveresize(c, &c->geo); + + layout_save_set(c->tag); } /* @@ -798,7 +800,6 @@ client_fac_resize(struct client *c, enum position p, int fac) } } - XFreeGC(W->dpy, rgc); XUngrabServer(W->dpy); XUngrabKeyboard(W->dpy, CurrentTime); diff --git a/src/layout.c b/src/layout.c index 4343ebc..c6b49d4 100644 --- a/src/layout.c +++ b/src/layout.c @@ -17,8 +17,8 @@ layout_save_set(struct tag *t) { struct client *c; struct layout_set *l; - struct geo_list *g; - int n = 0; + struct geo_list *g, *gp; + int n = 1; l = xcalloc(1, sizeof(struct layout_set)); SLIST_INIT(&l->geos); @@ -27,8 +27,14 @@ layout_save_set(struct tag *t) { g = xcalloc(1, sizeof(struct geo_list)); g->geo = c->geo; - SLIST_INSERT_HEAD(&l->geos, g, next); + + if(!SLIST_FIRST(&l->geos)) + SLIST_INSERT_HEAD(&l->geos, g, next); + else + SLIST_INSERT_AFTER(gp, g, next); + ++n; + gp = g; } l->n = n; @@ -47,8 +53,7 @@ layout_apply_set(struct tag *t, struct layout_set *l) { if(g) { - if(!client_winsize(c, &g->geo, &c->wgeo)) - client_moveresize(c, &g->geo); + client_moveresize(c, &g->geo); g = SLIST_NEXT(g, next); } @@ -72,7 +77,7 @@ layout_apply_set(struct tag *t, struct layout_set *l) } /* Re-insert set in historic */ - TAILQ_INSERT_TAIL(&t->sets, l, next); + layout_save_set(t); } void @@ -303,6 +308,7 @@ layout_split_check_row_dir(struct client *c, struct client *g, enum position p) if(GEO_CHECK2(ghost->geo, c->geo, p)) \ { \ layout_split_arrange_size(&ghost->geo, c, p); \ + layout_save_set(ghost->tag); \ return; \ } \ } while(/* CONSTCOND */ 0); @@ -369,7 +375,7 @@ layout_split_integrate(struct client *c, struct client *sc) * Not even a first client in list, then * maximize the lonely client */ - if(!(sc = SLIST_FIRST(&c->tag->clients))) + if(!(sc = SLIST_NEXT(SLIST_FIRST(&c->tag->clients), tnext))) { client_maximize(c); return; @@ -470,6 +476,8 @@ layout_rotate(struct tag *t, bool left) /* Rotate sometimes do not set back perfect size.. */ SLIST_FOREACH(c, &t->clients, tnext) layout_fix_hole(c); + + layout_save_set(t); } void @@ -515,6 +523,8 @@ uicb_layout_vmirror(Uicb cmd) c->geo.x = W->screen->ugeo.w - (c->geo.x + c->geo.w); client_moveresize(c, &c->geo); } + + layout_save_set(W->screen->seltag); } void @@ -528,4 +538,6 @@ uicb_layout_hmirror(Uicb cmd) c->geo.y = W->screen->ugeo.h - (c->geo.y + c->geo.h); client_moveresize(c, &c->geo); } + + layout_save_set(W->screen->seltag); } diff --git a/src/tag.c b/src/tag.c index f2aa438..60cbea1 100644 --- a/src/tag.c +++ b/src/tag.c @@ -119,11 +119,14 @@ tag_client(struct tag *t, struct client *c) c->tag = t; - layout_split_integrate(c, t->sel); - - /* Insert in new tag list */ + /* + * Insert in new tag list before + * layout_split_integrate, because of set historic. + */ SLIST_INSERT_HEAD(&t->clients, c, tnext); -} + + layout_split_integrate(c, t->sel); + } void uicb_tag_set(Uicb cmd)