Tag/Clients: Add client_ignore tag option (~Feature #6 requested by Elpinoutoufou)

This commit is contained in:
Martin Duquesnoy 2010-04-20 18:10:42 +02:00
parent 46608a14be
commit f8115d686d
5 changed files with 34 additions and 3 deletions

View File

@ -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;
}

View File

@ -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 },

View File

@ -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);

View File

@ -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;

View File

@ -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);