Tag: Add tag_swap and uicb function: tag_swap with cmd = <tag>, tag_swap_next & tag_swap_prev

This commit is contained in:
Martin Duquesnoy 2010-04-18 18:50:08 +02:00
parent 8c0e37cb38
commit 0f25f75f0d
5 changed files with 83 additions and 8 deletions

View File

@ -218,7 +218,8 @@ barwin_unmap_subwin(BarWindow *bw)
void void
barwin_move(BarWindow *bw, int x, int y) barwin_move(BarWindow *bw, int x, int y)
{ {
CHECK(bw); if(!bw || (bw->geo.x == x && bw->geo.y == y))
return;
XMoveWindow(dpy, bw->win, (bw->geo.x = x), (bw->geo.y = y)); XMoveWindow(dpy, bw->win, (bw->geo.x = x), (bw->geo.y = y));
@ -233,7 +234,8 @@ barwin_move(BarWindow *bw, int x, int y)
void void
barwin_resize(BarWindow *bw, uint w, uint h) barwin_resize(BarWindow *bw, uint w, uint h)
{ {
CHECK(bw); if(!bw || (bw->geo.width == w && bw->geo.height == h))
return;
bw->geo.width = w; bw->geo.width = w;
bw->geo.height = h; bw->geo.height = h;

View File

@ -56,6 +56,9 @@ func_name_list_t tmp_func_list[] =
{"tag_transfert_prev", uicb_tagtransfert_prev }, {"tag_transfert_prev", uicb_tagtransfert_prev },
{"tag_urgent", uicb_tag_urgent }, {"tag_urgent", uicb_tag_urgent },
{"tag_toggle_additional", uicb_tag_toggle_additional }, {"tag_toggle_additional", uicb_tag_toggle_additional },
{"tag_swap", uicb_tag_swap },
{"tag_swap_next", uicb_tag_swap_next },
{"tag_swap_prev", uicb_tag_swap_previous },
{"set_mwfact", uicb_set_mwfact }, {"set_mwfact", uicb_set_mwfact },
{"set_nmaster", uicb_set_nmaster }, {"set_nmaster", uicb_set_nmaster },
{"quit", uicb_quit }, {"quit", uicb_quit },

View File

@ -219,7 +219,7 @@ infobar_draw_selbar(int sc)
void void
infobar_draw_taglist(int sc) infobar_draw_taglist(int sc)
{ {
int i, x; int i, x, j;
Client *c; Client *c;
Bool is_occupied[MAXTAG]; Bool is_occupied[MAXTAG];
@ -233,9 +233,8 @@ infobar_draw_taglist(int sc)
if(c->screen == sc) if(c->screen == sc)
is_occupied[c->tag] = True; is_occupied[c->tag] = True;
for(i = 1, x = 0; i < conf.ntag[sc] + 1; ++i) for(i = 1, x = j = 0; i < conf.ntag[sc] + 1; ++i)
{ {
/* Autohide tag feature */ /* Autohide tag feature */
if(conf.tagautohide) if(conf.tagautohide)
{ {

View File

@ -296,5 +296,74 @@ uicb_tag_toggle_additional(uicb_t cmd)
return; return;
} }
/** Swap 2 tags
*\param s Screen
*\param t1 Tag 1
*\param t2 Tag 2
*/
void
tag_swap(int s, int t1, int t2)
{
Tag t;
int i, j;
if(t1 > conf.ntag[s] || t1 < 0
|| t2 > conf.ntag[s] || t2 < 0 || t1 == t2)
return;
t = tags[s][t1];
tags[s][t1] = tags[s][t2];
tags[s][t2] = t;
/* Adapt tags buttons */
for(i = 1, j = 0; i < conf.ntag[s] + 1; ++i)
{
barwin_move(infobar[s].tags[i], j, 0);
j += textw(tags[s][i].name) + PAD;
barwin_resize(infobar[s].tags[i], textw(tags[s][i].name) + PAD, infobar[s].geo.height);
barwin_resize(infobar[s].tags_board, j, infobar[s].geo.height);
}
tag_set(t2);
return;
}
/** Swap current tag with a specified tag
*\param cmd uicb_t type
*/
void
uicb_tag_swap(uicb_t cmd)
{
screen_get_sel();
tag_swap(selscreen, seltag[selscreen], atoi(cmd));
return;
}
/** Swap current tag with next tag
*\param cmd uicb_t type
*/
void
uicb_tag_swap_next(uicb_t cmd)
{
screen_get_sel();
tag_swap(selscreen, seltag[selscreen], seltag[selscreen] + 1);
return;
}
/** Swap current tag with previous tag
*\param cmd uicb_t type
*/
void
uicb_tag_swap_previous(uicb_t cmd)
{
screen_get_sel();
tag_swap(selscreen, seltag[selscreen], seltag[selscreen] - 1);
return;
}

View File

@ -284,7 +284,6 @@ char *clean_value(char *str);
int parse_image_block(ImageAttr *im, char *str); int parse_image_block(ImageAttr *im, char *str);
#endif /* HAVE_IMLIB */ #endif /* HAVE_IMLIB */
/* tag.c */ /* tag.c */
void tag_set(int tag); void tag_set(int tag);
void tag_transfert(Client *c, int tag); void tag_transfert(Client *c, int tag);
@ -297,8 +296,11 @@ void uicb_tagtransfert_next(uicb_t);
void uicb_tagtransfert_prev(uicb_t); void uicb_tagtransfert_prev(uicb_t);
void uicb_tag_urgent(uicb_t cmd); void uicb_tag_urgent(uicb_t cmd);
void tag_additional(int sc, int tag, int adtag); void tag_additional(int sc, int tag, int adtag);
void uicb_tag_toggle_additional(uicb_t cmd); void uicb_tag_toggle_additional(uicb_t);
void tag_swap(int s, int t1, int t2);
void uicb_tag_swap(uicb_t);
void uicb_tag_swap_next(uicb_t);
void uicb_tag_swap_previous(uicb_t);
/* screen.c */ /* screen.c */
int screen_count(void); int screen_count(void);