From abf71d99b9992dd90168861d6883273d80fa07d2 Mon Sep 17 00:00:00 2001 From: Julien Pivotto Date: Mon, 3 Jan 2011 21:49:25 +0100 Subject: [PATCH] [PATCH] Add a ignoretags rule --- src/client.c | 6 +++++- src/config.c | 15 ++++++++------- src/infobar.c | 2 +- src/structs.h | 1 + 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/client.c b/src/client.c index 426e5be..e7cf65a 100644 --- a/src/client.c +++ b/src/client.c @@ -1081,6 +1081,9 @@ client_set_rules(Client *c) if(conf.rule[i].free) c->flags |= FreeFlag; + if(conf.rule[i].ignoretags) + c->tag = MAXTAG + 1; + if(conf.rule[i].max) { client_maximize(c); @@ -1093,7 +1096,8 @@ client_set_rules(Client *c) client_focus(NULL); } - tags[c->screen][c->tag].layout.func(c->screen); + if(! conf.rule[i].ignoretags) + tags[c->screen][c->tag].layout.func(c->screen); } } } diff --git a/src/config.c b/src/config.c index 1755392..565e486 100644 --- a/src/config.c +++ b/src/config.c @@ -623,13 +623,14 @@ conf_rule_section(void) for(i = 0; i < conf.nrule; ++i) { - conf.rule[i].class = fetch_opt_first(rule[i], "", "class").str; - conf.rule[i].instance = fetch_opt_first(rule[i], "", "instance").str; - conf.rule[i].role = fetch_opt_first(rule[i], "", "role").str; - conf.rule[i].screen = fetch_opt_first(rule[i], "-1", "screen").num; - conf.rule[i].tag = fetch_opt_first(rule[i], "-1", "tag").num; - conf.rule[i].free = fetch_opt_first(rule[i], "false", "free").bool; - conf.rule[i].max = fetch_opt_first(rule[i], "false", "max").bool; + conf.rule[i].class = fetch_opt_first(rule[i], "", "class").str; + conf.rule[i].instance = fetch_opt_first(rule[i], "", "instance").str; + conf.rule[i].role = fetch_opt_first(rule[i], "", "role").str; + conf.rule[i].screen = fetch_opt_first(rule[i], "-1", "screen").num; + conf.rule[i].tag = fetch_opt_first(rule[i], "-1", "tag").num; + conf.rule[i].free = fetch_opt_first(rule[i], "false", "free").bool; + conf.rule[i].max = fetch_opt_first(rule[i], "false", "max").bool; + conf.rule[i].ignoretags = fetch_opt_first(rule[i], "false", "ignoretags").bool; } free(rule); diff --git a/src/infobar.c b/src/infobar.c index d89b8ef..390eb39 100644 --- a/src/infobar.c +++ b/src/infobar.c @@ -231,7 +231,7 @@ infobar_draw_taglist(int sc) is_occupied[i] = False; for(c = clients; c; c = c->next) - if(c->screen == sc) + if(c->screen == sc && c->tag != MAXTAG + 1) is_occupied[c->tag] = True; for(i = 1, x = 0; i < conf.ntag[sc] + 1; ++i) diff --git a/src/structs.h b/src/structs.h index c0da549..fce79fa 100644 --- a/src/structs.h +++ b/src/structs.h @@ -363,6 +363,7 @@ typedef struct int tag; Bool free; Bool max; + Bool ignoretags; } Rule; /* Configuration structure */