[statusbar] Check for names and uniqness before adding, add remove function

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2008-05-25 14:13:50 +02:00
parent ab62a78884
commit 2b0e70dc5b
1 changed files with 36 additions and 2 deletions

View File

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