Add a toggle_ignore_tag uicb command. Don't tab if two client haven't the same ignore_tag rule
This commit is contained in:
parent
9cc33f8904
commit
0085dd16e3
22
src/client.c
22
src/client.c
@ -548,7 +548,8 @@ _client_tab(struct client *c, struct client *cm)
|
||||
|
||||
/* Do not tab already tabbed client */
|
||||
if(c->flags & (CLIENT_TABBED | CLIENT_TABMASTER)
|
||||
|| c->tag != cm->tag || c == cm)
|
||||
|| c->tag != cm->tag || c == cm
|
||||
|| (c->flags & CLIENT_IGNORE_TAG) != (cm->flags & CLIENT_IGNORE_TAG))
|
||||
return;
|
||||
|
||||
layout_split_arrange_closed(c);
|
||||
@ -1459,6 +1460,25 @@ uicb_client_toggle_free(Uicb cmd)
|
||||
}
|
||||
}
|
||||
|
||||
void uicb_client_toggle_ignore_tag(Uicb cmd)
|
||||
{
|
||||
struct client *c;
|
||||
(void)cmd;
|
||||
|
||||
if(!(W->client))
|
||||
return;
|
||||
|
||||
W->client->flags ^= CLIENT_IGNORE_TAG;
|
||||
|
||||
/* Set tabbed client of toggled client as ignore_tag */
|
||||
if(W->client->flags & CLIENT_TABMASTER)
|
||||
{
|
||||
SLIST_FOREACH(c, &W->client->tag->clients, tnext)
|
||||
if(c->tabmaster == W->client && c != W->client)
|
||||
c->flags ^= CLIENT_IGNORE_TAG;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
uicb_client_tab_next_opened(Uicb cmd)
|
||||
{
|
||||
|
||||
@ -58,6 +58,7 @@ void client_update_props(struct client *c, Flags f);
|
||||
void client_fac_hint(struct client *c);
|
||||
void uicb_client_untab(Uicb cmd);
|
||||
void uicb_client_toggle_free(Uicb cmd);
|
||||
void uicb_client_toggle_ignore_tag(Uicb cmd);
|
||||
void uicb_client_tab_next_opened(Uicb cmd);
|
||||
|
||||
/* Generated */
|
||||
|
||||
55
src/config.h
55
src/config.h
@ -55,33 +55,34 @@ static const struct { char *name; void (*func)(Uicb cmd); } uicb_list[] =
|
||||
{ "layout_integrate_bottom", uicb_layout_integrate_Bottom },
|
||||
|
||||
/* Client */
|
||||
{ "client_close", uicb_client_close },
|
||||
{ "client_resize_right", uicb_client_resize_Right },
|
||||
{ "client_resize_left", uicb_client_resize_Left },
|
||||
{ "client_resize_top", uicb_client_resize_Top },
|
||||
{ "client_resize_bottom", uicb_client_resize_Bottom },
|
||||
{ "client_focus_right", uicb_client_focus_Right },
|
||||
{ "client_focus_left", uicb_client_focus_Left },
|
||||
{ "client_focus_top", uicb_client_focus_Top },
|
||||
{ "client_focus_bottom", uicb_client_focus_Bottom },
|
||||
{ "client_tab_right", uicb_client_tab_Right },
|
||||
{ "client_tab_left", uicb_client_tab_Left },
|
||||
{ "client_tab_top", uicb_client_tab_Top },
|
||||
{ "client_tab_bottom", uicb_client_tab_Bottom },
|
||||
{ "client_swap_right", uicb_client_swap_Right },
|
||||
{ "client_swap_left", uicb_client_swap_Left },
|
||||
{ "client_swap_top", uicb_client_swap_Top },
|
||||
{ "client_swap_bottom", uicb_client_swap_Bottom },
|
||||
{ "client_focus_next", uicb_client_focus_next },
|
||||
{ "client_focus_prev", uicb_client_focus_prev },
|
||||
{ "client_swap_next", uicb_client_swapsel_next },
|
||||
{ "client_swap_prev", uicb_client_swapsel_prev },
|
||||
{ "client_untab", uicb_client_untab },
|
||||
{ "client_focus_next_tab", uicb_client_focus_next_tab },
|
||||
{ "client_focus_prev_tab", uicb_client_focus_prev_tab },
|
||||
{ "client_focus_click", uicb_client_focus_click },
|
||||
{ "client_toggle_free", uicb_client_toggle_free },
|
||||
{ "client_tab_next_opened", uicb_client_tab_next_opened },
|
||||
{ "client_close", uicb_client_close },
|
||||
{ "client_resize_right", uicb_client_resize_Right },
|
||||
{ "client_resize_left", uicb_client_resize_Left },
|
||||
{ "client_resize_top", uicb_client_resize_Top },
|
||||
{ "client_resize_bottom", uicb_client_resize_Bottom },
|
||||
{ "client_focus_right", uicb_client_focus_Right },
|
||||
{ "client_focus_left", uicb_client_focus_Left },
|
||||
{ "client_focus_top", uicb_client_focus_Top },
|
||||
{ "client_focus_bottom", uicb_client_focus_Bottom },
|
||||
{ "client_tab_right", uicb_client_tab_Right },
|
||||
{ "client_tab_left", uicb_client_tab_Left },
|
||||
{ "client_tab_top", uicb_client_tab_Top },
|
||||
{ "client_tab_bottom", uicb_client_tab_Bottom },
|
||||
{ "client_swap_right", uicb_client_swap_Right },
|
||||
{ "client_swap_left", uicb_client_swap_Left },
|
||||
{ "client_swap_top", uicb_client_swap_Top },
|
||||
{ "client_swap_bottom", uicb_client_swap_Bottom },
|
||||
{ "client_focus_next", uicb_client_focus_next },
|
||||
{ "client_focus_prev", uicb_client_focus_prev },
|
||||
{ "client_swap_next", uicb_client_swapsel_next },
|
||||
{ "client_swap_prev", uicb_client_swapsel_prev },
|
||||
{ "client_untab", uicb_client_untab },
|
||||
{ "client_focus_next_tab", uicb_client_focus_next_tab },
|
||||
{ "client_focus_prev_tab", uicb_client_focus_prev_tab },
|
||||
{ "client_focus_click", uicb_client_focus_click },
|
||||
{ "client_toggle_free", uicb_client_toggle_free },
|
||||
{ "client_toggle_ignore_tag", uicb_client_toggle_ignore_tag },
|
||||
{ "client_tab_next_opened", uicb_client_tab_next_opened },
|
||||
|
||||
/* Status */
|
||||
{ "status" , uicb_status },
|
||||
|
||||
@ -59,8 +59,8 @@ tag_screen(struct screen *s, struct tag *t)
|
||||
|
||||
/* Move clients if they ignore tags */
|
||||
SLIST_FOREACH(c, &W->h.client, next)
|
||||
if (c->flags & CLIENT_IGNORE_TAG)
|
||||
tag_client(c->screen->seltag, c);
|
||||
if (c->flags & CLIENT_IGNORE_TAG && c->screen == s)
|
||||
tag_client(s->seltag, c);
|
||||
|
||||
clients_arrange_map();
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user