From 4a11107d677466a03e6a0a8358488d4ac9a4258d Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sat, 17 Dec 2011 18:51:42 +0100 Subject: [PATCH] Fix possible fail in rules parsing, first tag mapping at reload --- src/client.c | 7 ++----- src/config.c | 26 ++++++++++---------------- src/tag.c | 2 -- src/wmfs.c | 28 ++++++++++++++++------------ 4 files changed, 28 insertions(+), 35 deletions(-) diff --git a/src/client.c b/src/client.c index e49502d..86161ea 100644 --- a/src/client.c +++ b/src/client.c @@ -513,11 +513,8 @@ client_focus(struct client *c) if(W->client && W->client != c) { client_grabbuttons(W->client, false); - - if(!(W->client->flags & CLIENT_TABMASTER - && c->tabmaster == W->client)) - client_frame_update(W->client, &W->client->ncol); - } + client_frame_update(W->client, &W->client->ncol); + } /* Focus c */ if((W->client = c)) diff --git a/src/config.c b/src/config.c index 5fddc80..049ab33 100644 --- a/src/config.c +++ b/src/config.c @@ -113,7 +113,6 @@ static void config_tag(void) { struct screen *s; - struct tag *t; size_t i, n; struct conf_sec *sec, **ks; char *name; @@ -132,13 +131,7 @@ config_tag(void) SLIST_FOREACH(s, &W->h.screen, next) if(screenid == s->id || screenid == -1) - { - t = tag_new(s, name); - - /* Set first tag as seltag */ - if(t == TAILQ_FIRST(&s->tags)) - s->seltag = t; - } + tag_new(s, name); } free(ks); @@ -182,14 +175,15 @@ config_rule(void) FLAGAPPLY(r->flags, fetch_opt_first(ks[i], "false", "max").boolean, RULE_MAX); FLAGAPPLY(r->flags, fetch_opt_first(ks[i], "false", "ignore_tag").boolean, RULE_IGNORE_TAG); - tn = fetch_opt_first(ks[i], "", "theme").str; - SLIST_FOREACH(t, &W->h.theme, next) - if(!strcmp(tn, t->name)) - { - r->theme = t; - break; - } - + if((tn = fetch_opt_first(ks[i], "", "theme").str)) + { + SLIST_FOREACH(t, &W->h.theme, next) + if(!strcmp(tn, t->name)) + { + r->theme = t; + break; + } + } SLIST_INSERT_HEAD(&W->h.rule, r, next); } diff --git a/src/tag.c b/src/tag.c index 7bf7ef9..bec82ad 100644 --- a/src/tag.c +++ b/src/tag.c @@ -41,8 +41,6 @@ tag_new(struct screen *s, char *name) void tag_screen(struct screen *s, struct tag *t) { - struct client *c; - t->prev = s->seltag; s->seltag = t; diff --git a/src/wmfs.c b/src/wmfs.c index 74669ef..a7a2ece 100644 --- a/src/wmfs.c +++ b/src/wmfs.c @@ -298,6 +298,22 @@ wmfs_scan(void) } } + /* Set back selected tag */ + if(pstag) + { + struct tag *t; + + for(i = 0; i < nscreen; ++i) + { + s = screen_gb_id(i); + + if((t = tag_gb_id(s, tret[i])) != s->seltag) + tag_screen(s, t); + } + + XFree(tret); + } + /* Re-adjust tabbed clients */ SLIST_FOREACH(c, &W->h.client, next) if((cc = client_gb_win(c->tmp)) && cc != c) @@ -306,18 +322,6 @@ wmfs_scan(void) if((fc = client_gb_win(focus)) && fc != W->client) client_focus(fc); - /* Set back selected tag */ - if(pstag) - { - for(i = 0; i < nscreen; ++i) - { - s = screen_gb_id(i); - tag_screen(s, tag_gb_id(s, tret[i])); - } - - XFree(tret); - } - W->flags &= ~WMFS_SCAN; XFree(w);