[statusbar] Check for names and uniqness before adding, add remove function
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
ab62a78884
commit
2b0e70dc5b
38
statusbar.c
38
statusbar.c
|
@ -369,13 +369,24 @@ static int
|
||||||
luaA_statusbar_add(lua_State *L)
|
luaA_statusbar_add(lua_State *L)
|
||||||
{
|
{
|
||||||
statusbar_t *s, **sb = luaL_checkudata(L, 1, "statusbar");
|
statusbar_t *s, **sb = luaL_checkudata(L, 1, "statusbar");
|
||||||
int screen = luaL_checknumber(L, 2) - 1;
|
int i, screen = luaL_checknumber(L, 2) - 1;
|
||||||
|
|
||||||
luaA_checkscreen(screen);
|
luaA_checkscreen(screen);
|
||||||
|
|
||||||
|
/* Check for uniq name and id. */
|
||||||
|
for(i = 0; i < globalconf.screens_info->nscreen; i++)
|
||||||
|
for(s = globalconf.screens[i].statusbar; s; s = s->next)
|
||||||
|
{
|
||||||
|
if(s == *sb)
|
||||||
|
luaL_error(L, "this statusbar is already on screen %d",
|
||||||
|
s->screen + 1);
|
||||||
|
if(!a_strcmp(s->name, (*sb)->name))
|
||||||
|
luaL_error(L, "a statusbar with that name is already on screen %d\n",
|
||||||
|
s->screen + 1);
|
||||||
|
}
|
||||||
|
|
||||||
(*sb)->screen = screen;
|
(*sb)->screen = screen;
|
||||||
|
|
||||||
/* \todo check for uniq name */
|
|
||||||
statusbar_list_append(&globalconf.screens[screen].statusbar, *sb);
|
statusbar_list_append(&globalconf.screens[screen].statusbar, *sb);
|
||||||
for(s = globalconf.screens[(*sb)->screen].statusbar; s; s = s->next)
|
for(s = globalconf.screens[(*sb)->screen].statusbar; s; s = s->next)
|
||||||
statusbar_position_update(s, s->position);
|
statusbar_position_update(s, s->position);
|
||||||
|
@ -386,6 +397,28 @@ luaA_statusbar_add(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
luaA_statusbar_remove(lua_State *L)
|
||||||
|
{
|
||||||
|
statusbar_t *s, **sb = luaL_checkudata(L, 1, "statusbar");
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i = 0; i < globalconf.screens_info->nscreen; i++)
|
||||||
|
for(s = globalconf.screens[i].statusbar; s; s = s->next)
|
||||||
|
if(s == *sb)
|
||||||
|
{
|
||||||
|
statusbar_position_update(*sb, Off);
|
||||||
|
statusbar_list_detach(&globalconf.screens[i].statusbar, *sb);
|
||||||
|
statusbar_unref(sb);
|
||||||
|
globalconf.screens[i].need_arrange = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
luaL_error(L, "unable to remove statusbar: not on any screen");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
luaA_statusbar_new(lua_State *L)
|
luaA_statusbar_new(lua_State *L)
|
||||||
{
|
{
|
||||||
|
@ -449,6 +482,7 @@ const struct luaL_reg awesome_statusbar_meta[] =
|
||||||
{ "position_set", luaA_statusbar_position_set },
|
{ "position_set", luaA_statusbar_position_set },
|
||||||
{ "align_set", luaA_statusbar_align_set },
|
{ "align_set", luaA_statusbar_align_set },
|
||||||
{ "add", luaA_statusbar_add },
|
{ "add", luaA_statusbar_add },
|
||||||
|
{ "remove", luaA_statusbar_remove },
|
||||||
{ "__gc", luaA_statusbar_gc },
|
{ "__gc", luaA_statusbar_gc },
|
||||||
{ "__eq", luaA_statusbar_eq },
|
{ "__eq", luaA_statusbar_eq },
|
||||||
{ "__tostring", luaA_statusbar_tostring },
|
{ "__tostring", luaA_statusbar_tostring },
|
||||||
|
|
Loading…
Reference in New Issue