From f750124d5cefe1b4b66caf11db7f69f53e1278b9 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Tue, 1 Jul 2008 11:38:40 +0200 Subject: [PATCH] tag: add {new,}index, use it for selected Signed-off-by: Julien Danjou --- awesomerc.lua.in | 6 +-- common/tokenize.gperf | 1 + lib/awful.lua | 10 ++--- tag.c | 94 ++++++++++++++++++++++++++++--------------- 4 files changed, 70 insertions(+), 41 deletions(-) diff --git a/awesomerc.lua.in b/awesomerc.lua.in index edcf595d..d3f01609 100644 --- a/awesomerc.lua.in +++ b/awesomerc.lua.in @@ -71,7 +71,7 @@ for s = 1, screen.count() do tags[s][tagnumber]:add(s) end -- I'm sure you want to see at least one tag. - tags[s][1]:view(true) + tags[s][1].selected = true end -- }}} @@ -80,7 +80,7 @@ end mytaglist = widget({ type = "taglist", name = "mytaglist" }) mytaglist:mouse_add(mouse({}, 1, function (object, tag) awful.tag.viewonly(tag) end)) mytaglist:mouse_add(mouse({ modkey }, 1, function (object, tag) awful.client.movetotag(tag) end)) -mytaglist:mouse_add(mouse({}, 3, function (object, tag) tag:view(not tag:isselected()) end)) +mytaglist:mouse_add(mouse({}, 3, function (object, tag) tag.selected = not tag.selected end)) mytaglist:mouse_add(mouse({ modkey }, 3, function (object, tag) awful.client.toggletag(tag) end)) mytaglist:mouse_add(mouse({ }, 4, awful.tag.viewnext)) mytaglist:mouse_add(mouse({ }, 5, awful.tag.viewprev)) @@ -162,7 +162,7 @@ for i = 1, keynumber do function () local screen = mouse.screen_get() if tags[screen][i] then - tags[screen][i]:view(not tags[screen][i]:isselected()) + tags[screen][i].selected = not tags[screen][i].selected end end):add() keybinding({ modkey, "Shift" }, i, diff --git a/common/tokenize.gperf b/common/tokenize.gperf index 8ce800a1..5bb64a32 100644 --- a/common/tokenize.gperf +++ b/common/tokenize.gperf @@ -26,6 +26,7 @@ plot_data_add plot_properties_set resize right +selected shadow shadow_offset show diff --git a/lib/awful.lua b/lib/awful.lua index dd640ebe..727a86c8 100644 --- a/lib/awful.lua +++ b/lib/awful.lua @@ -161,7 +161,7 @@ function P.tag.selectedlist(s) local tags = tag.geti(screen) local vtags = {} for i, t in pairs(tags) do - if t:isselected() then + if t.selected then vtags[#vtags + 1] = t end end @@ -233,7 +233,7 @@ end function P.tag.viewnone(screen) local tags = tag.get(screen or mouse.screen_get()) for i, t in pairs(tags) do - t:view(false) + t.selected = false end end @@ -246,7 +246,7 @@ function P.tag.viewidx(i, screen) P.tag.viewnone() for k, t in ipairs(tags) do if t == sel then - tags[cycle(#tags, k + i)]:view(true) + tags[cycle(#tags, k + i)].selected = true end end end @@ -265,7 +265,7 @@ end -- @param t The tag object. function P.tag.viewonly(t) P.tag.viewnone() - t:view(true) + t.selected = true end --- View only a set of tags. @@ -274,7 +274,7 @@ end function P.tag.viewmore(tags, screen) P.tag.viewnone(screen) for i, t in pairs(tags) do - t:view(true) + t.selected = true end end diff --git a/tag.c b/tag.c index 5fa327e0..953d0458 100644 --- a/tag.c +++ b/tag.c @@ -333,37 +333,6 @@ luaA_tag_new(lua_State *L) return luaA_tag_userdata_new(L, tag); } -/** Add or remove a tag from the current view. - * \param L The Lua VM state. - * - * \luastack - * \lvalue A tag. - * \lparam A boolean value, true to view tag, false otherwise. - */ -static int -luaA_tag_view(lua_State *L) -{ - tag_t **tag = luaA_checkudata(L, 1, "tag"); - bool view = luaA_checkboolean(L, 2); - tag_view(*tag, view); - return 0; -} - -/** Get the tag selection attribute. - * \param L The Lua VM state. - * - * \luastack - * \lvalue A tag. - * \lreturn True if the tag is viewed, false otherwise. - */ -static int -luaA_tag_isselected(lua_State *L) -{ - tag_t **tag = luaA_checkudata(L, 1, "tag"); - lua_pushboolean(L, (*tag)->selected); - return 1; -} - /** Set the tag master width factor. This value is used in various layouts to * determine the size of the master window. * \param L The Lua VM state. @@ -558,6 +527,65 @@ luaA_tag_layout_set(lua_State *L) } +/** Tag index. + * \param L The Lua VM state. + * \return The number of elements pushed on stack. + */ +static int +luaA_tag_index(lua_State *L) +{ + size_t len; + tag_t **tag = luaA_checkudata(L, 1, "tag"); + const char *attr; + + lua_getmetatable(L, 1); + lua_pushvalue(L, 2); + lua_rawget(L, -2); + if (!lua_isnil(L, -1)) + { + lua_remove(L, -2); + return 1; + } + lua_pop(L, 2); + + attr = luaL_checklstring(L, 2, &len); + + switch(a_tokenize(attr, len)) + { + case A_TK_SELECTED: + lua_pushboolean(L, (*tag)->selected); + break; + default: + return 0; + } + + return 1; +} + +/** Tag newindex. + * \param L The Lua VM state. + * \return The number of elements pushed on stack. + */ +static int +luaA_tag_newindex(lua_State *L) +{ + size_t len; + tag_t **tag = luaA_checkudata(L, 1, "tag"); + const char *attr = luaL_checklstring(L, 2, &len); + + switch(a_tokenize(attr, len)) + { + case A_TK_SELECTED: + tag_view(*tag, luaA_checkboolean(L, 3)); + break; + default: + return 0; + } + + return 0; +} + + const struct luaL_reg awesome_tag_methods[] = { { "__call", luaA_tag_new }, @@ -568,8 +596,6 @@ const struct luaL_reg awesome_tag_methods[] = const struct luaL_reg awesome_tag_meta[] = { { "add", luaA_tag_add }, - { "view", luaA_tag_view }, - { "isselected", luaA_tag_isselected }, { "mwfact_set", luaA_tag_mwfact_set }, { "mwfact_get", luaA_tag_mwfact_get }, { "ncol_set", luaA_tag_ncol_set }, @@ -580,6 +606,8 @@ const struct luaL_reg awesome_tag_meta[] = { "name_set", luaA_tag_name_set }, { "layout_get", luaA_tag_layout_get }, { "layout_set", luaA_tag_layout_set }, + { "__index", luaA_tag_index }, + { "__newindex", luaA_tag_newindex }, { "__eq", luaA_tag_eq }, { "__gc", luaA_tag_gc }, { "__tostring", luaA_tag_tostring },