From f8115d686de72016c5b2b73bd08bafecbe711a47 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Tue, 20 Apr 2010 18:10:42 +0200 Subject: [PATCH] Tag/Clients: Add client_ignore tag option (~Feature #6 requested by Elpinoutoufou) --- src/client.c | 22 ++++++++++++++++++++-- src/config.c | 1 + src/tag.c | 11 +++++++++++ src/wmfs.c | 2 +- src/wmfs.h | 1 + 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/client.c b/src/client.c index e6505a0..ba1024f 100644 --- a/src/client.c +++ b/src/client.c @@ -435,7 +435,7 @@ client_hide(Client *c) Bool ishide(Client *c, int screen) { - if((c->tag == seltag[screen] && c->screen == screen) + if(((c->tag == seltag[screen] || c->tag == MAXTAG + 1) && c->screen == screen) || tags[screen][seltag[screen]].tagad & TagFlag(c->tag)) return False; @@ -703,7 +703,8 @@ client_moveresize(Client *c, XRectangle geo, Bool r) if(c->flags & FreeFlag || tags[c->screen][c->tag].layout.func == freelayout) c->free_geo = geo; - if((c->screen = screen_get_with_geo(c->geo.x, c->geo.y)) != os) + if((c->screen = screen_get_with_geo(c->geo.x, c->geo.y)) != os + && c->tag != MAXTAG + 1) c->tag = seltag[c->screen]; frame_moveresize(c, c->geo); @@ -1256,3 +1257,20 @@ uicb_checkclist(uicb_t cmd) return True; } +/** Set selected client on all tag (ignore tags + *\para cmd uicb_t type unused +*/ +void +uicb_client_ignore_tag(uicb_t cmd) +{ + CHECK(sel); + + screen_get_sel(); + + sel->tag = ((sel->tag == MAXTAG + 1) ? seltag[selscreen] : MAXTAG + 1); + + arrange(sel->screen, True); + + return; +} + diff --git a/src/config.c b/src/config.c index 8065b9e..9c7d4f9 100644 --- a/src/config.c +++ b/src/config.c @@ -44,6 +44,7 @@ func_name_list_t tmp_func_list[] = {"client_screen_prev", uicb_client_screen_prev }, {"client_move", uicb_client_move }, {"client_resize", uicb_client_resize }, + {"client_ignore_tag", uicb_client_ignore_tag }, {"toggle_max", uicb_togglemax }, {"layout_next", uicb_layout_next }, {"layout_prev", uicb_layout_prev }, diff --git a/src/tag.c b/src/tag.c index 94efff2..59669ca 100644 --- a/src/tag.c +++ b/src/tag.c @@ -76,7 +76,18 @@ tag_set(int tag) for(i = 1; i < conf.ntag[selscreen] + 1; ++i) if(tags[selscreen][i].tagad & TagFlag(seltag[selscreen])) + { al = True; + break; + } + + /* Check for ignore_tag clients */ + for(c = clients; c; c = c->next) + if(c->tag == MAXTAG + 1 && c->screen == selscreen) + { + al = True; + break; + } arrange(selscreen, al); diff --git a/src/wmfs.c b/src/wmfs.c index da57998..5968ec4 100644 --- a/src/wmfs.c +++ b/src/wmfs.c @@ -241,7 +241,7 @@ scan(void) c = client_manage(w[i], &wa, False); - if(tag != -1) + if(tag != -1 && tag != MAXTAG + 1) c->tag = tag; if(screen != -1 && screen <= s - 1) c->screen = screen; diff --git a/src/wmfs.h b/src/wmfs.h index 6726d02..c61c84e 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -201,6 +201,7 @@ void uicb_ignore_next_client_rules(uicb_t cmd); void uicb_clientlist(uicb_t cmd); void uicb_client_select(uicb_t cmd); Bool uicb_checkclist(uicb_t); +void uicb_client_ignore_tag(uicb_t); /* ewmh.c */ void ewmh_init_hints(void);