Merge branch 'master' of git.philpep.org:wmfs into philpep

This commit is contained in:
Philippe Pepiot 2010-04-18 23:38:08 +02:00
commit ba841c74b3
5 changed files with 145 additions and 10 deletions

View File

@ -59,6 +59,8 @@ func_name_list_t tmp_func_list[] =
{"tag_swap", uicb_tag_swap },
{"tag_swap_next", uicb_tag_swap_next },
{"tag_swap_prev", uicb_tag_swap_previous },
{"tag_new", uicb_tag_new },
{"tag_del", uicb_tag_del },
{"set_mwfact", uicb_set_mwfact },
{"set_nmaster", uicb_set_nmaster },
{"quit", uicb_quit },

View File

@ -278,6 +278,47 @@ infobar_draw_taglist(int sc)
return;
}
/** Update taglist geo
*\param sc Screen number
*/
void
infobar_update_taglist(int sc)
{
int i, j;
for(i = 1, j = 0; i < conf.ntag[sc] + 1; ++i)
{
/* If the tag i does not exist yet (graphically) or need full update */
if(!infobar[sc].tags[i] || infobar[sc].need_update)
{
infobar[sc].tags[i] = barwin_create(infobar[sc].tags_board->win, j, 0,
textw(tags[sc][i].name) + PAD,
infobar[sc].geo.height,
conf.colors.bar, conf.colors.text, False, False, conf.border.tag);
barwin_map(infobar[sc].tags[i]);
barwin_map_subwin(infobar[sc].tags[i]);
j += textw(tags[sc][i].name) + PAD;
barwin_resize(infobar[sc].tags_board, j, infobar[sc].geo.height);
continue;
}
barwin_move(infobar[sc].tags[i], j, 0);
j += textw(tags[sc][i].name) + PAD;
barwin_resize(infobar[sc].tags[i], textw(tags[sc][i].name) + PAD, infobar[sc].geo.height);
barwin_resize(infobar[sc].tags_board, j, infobar[sc].geo.height);
}
infobar[sc].need_update = False;
return;
}
/** Destroy the InfoBar
*/
void

View File

@ -239,6 +239,7 @@ typedef struct
XRectangle geo;
int position;
char *statustext;
Bool need_update;
} InfoBar;
/* Layout Structure */

106
src/tag.c
View File

@ -306,7 +306,6 @@ tag_swap(int s, int t1, int t2)
{
Client *c;
Tag t;
int i, j;
if(t1 > conf.ntag[s] || t1 < 1
|| t2 > conf.ntag[s] || t2 < 1 || t1 == t2)
@ -324,15 +323,7 @@ tag_swap(int s, int t1, int t2)
c->tag = t1;
}
/* 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);
}
infobar_update_taglist(s);
tag_set(t2);
return;
@ -376,3 +367,98 @@ uicb_tag_swap_previous(uicb_t cmd)
return;
}
/** Adding a tag
*\param s Screen number
*\param name New tag name
*/
void
tag_new(int s, char *name)
{
Tag t = { NULL, NULL, 0, 0, 0.65, 1, False, False, False, False, IB_Top,
layout_name_to_struct(conf.layout, "tile_right", conf.nlayout, layout_list), 0, NULL, 0 };
if(conf.ntag[s] + 1 > MAXTAG)
{
warnx("Too many tag: Can't create new tag");
return;
}
++conf.ntag[s];
tags[s][conf.ntag[s]] = t;
tags[s][conf.ntag[s]].name = _strdup(((strlen(name)) ? name : "new tag"));
infobar_update_taglist(s);
infobar_draw(s);
return;
}
/** Adding a tag
*\param cmd uicb_t type
*/
void
uicb_tag_new(uicb_t cmd)
{
screen_get_sel();
tag_new(selscreen, (char*)cmd);
return;
}
/** Delete a tag
*\param s Screen number
*\param tag Tag number
*/
void
tag_delete(int s, int tag)
{
Tag t = { 0 };
Client *c;
int i;
if(tag < 0 || tag > conf.ntag[s] || conf.ntag[s] == 1)
return;
for(c = clients; c; c = c->next)
if(c->screen == s && c->tag == tag)
{
warnx("Client(s) present in this tag, can't delete it");
return;
}
--conf.ntag[s];
tags[s][tag] = t;
infobar[s].tags[tag] = NULL;
for(i = tag; i < conf.ntag[s] + 1; ++i)
tags[s][i] = tags[s][i + 1];
infobar[s].need_update = True;
infobar_update_taglist(s);
infobar_draw(s);
tag_set(tag);
return;
}
/** Delete a tag
*\param cmd uicb_t type
*/
void
uicb_tag_del(uicb_t cmd)
{
screen_get_sel();
tag_delete(selscreen, ((strlen((char*)cmd)) ? atoi(cmd) : seltag[selscreen]));
return;
}

View File

@ -146,6 +146,7 @@ void infobar_draw(int sc);
void infobar_draw_layout(int sc);
void infobar_draw_selbar(int sc);
void infobar_draw_taglist(int sc);
void infobar_update_taglist(int sc);
void infobar_destroy(void);
void infobar_set_position(int pos);
void uicb_infobar_togglepos(uicb_t);
@ -301,6 +302,10 @@ 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);
void tag_new(int s, char *name);
void uicb_tag_new(uicb_t);
void tag_delete(int s, int tag);
void uicb_tag_del(uicb_t);
/* screen.c */
int screen_count(void);