From bee04c14bc59bac57b5a2db9b35b58a815e39c1a Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage Vallee Date: Sat, 22 Mar 2014 17:35:43 -0400 Subject: [PATCH] Fix issue #11, break API, may cause regressions --- base.lua | 53 +++++++++++++++++++--------------------- impl/alttab/init.lua | 40 +++++++++++++++++++++--------- item/init.lua | 2 +- item/style/arrow_alt.lua | 6 ++--- layout/grid.lua | 6 ++--- layout/horizontal.lua | 6 ++--- layout/vertical.lua | 10 ++++---- 7 files changed, 69 insertions(+), 54 deletions(-) diff --git a/base.lua b/base.lua index 73c22eb..5aea521 100644 --- a/base.lua +++ b/base.lua @@ -85,15 +85,15 @@ local function filter(data) local fs,visible_counter = data.filter_string:lower(),0 data._internal.visible_item_count = 0 for k,v in pairs(data.items) do - local tmp = v[1]._filter_out - v[1]._filter_out = (v[1].text:lower():find(fs) == nil)-- or (fs ~= "") - if tmp ~= v[1]._filter_out then - v[1].widget:emit_signal("widget::updated") + local tmp = v._filter_out + v._filter_out = (v.text:lower():find(fs) == nil)-- or (fs ~= "") + if tmp ~= v._filter_out then + v.widget:emit_signal("widget::updated") end - if (not v[1]._filter_out) and (not v[1]._hidden) then - visible_counter = visible_counter + v[1].height + if (not v._filter_out) and (not v._hidden) then + visible_counter = visible_counter + v.height data._internal.visible_item_count = data._internal.visible_item_count +1 - v[1].f_key = data._internal.visible_item_count + v.f_key = data._internal.visible_item_count end end data._total_item_height = visible_counter @@ -314,7 +314,6 @@ local function new(args) data.get_margin = function(_) return {left=0,bottom=0,right=0,left=0} end data.get_items = function(_) return internal.items end data.get_rowcount = function(_) return #internal.items end - data.get_columncount = function(_) return (#internal.items > 0) and #(internal.items[1]) or 0 end -- Setters data.set_auto_resize = function(_,val) private_data[""] = val end @@ -372,10 +371,8 @@ local function new(args) data.get_current_index = function(_) if data._current_item then for k,v in ipairs(internal.items) do --rows - for k2,v2 in ipairs(v) do --columns - if data._current_item == v2 then - return k,k2 --row, column as row is expected in most configurations - end + if data._current_item == v then + return k end end end @@ -383,17 +380,17 @@ local function new(args) data.get_previous_item = function(_) local candidate,idx = internal.items[(data.current_index or 0)-1],(data.current_index or 0)-1 - while candidate and (candidate[1]._hidden or candidate[1]._filter_out) and idx > 0 do + while candidate and (candidate._hidden or candidate._filter_out) and idx > 0 do candidate,idx = internal.items[idx - 1],idx-1 end - return (candidate or internal.items[data.rowcount])[1] + return (candidate or internal.items[data.rowcount]) end data.get_next_item = function(_) local candidate,idx = internal.items[(data.current_index or 0)+1],(data.current_index or 0)+1 - while candidate and (candidate[1]._hidden or candidate[1]._filter_out) and idx <= data.rowcount do + while candidate and (candidate._hidden or candidate._filter_out) and idx <= data.rowcount do candidate,idx = internal.items[idx + 1],idx+1 end - return (candidate or internal.items[1])[1] + return (candidate or internal.items) end --Repaint when appearance properties change @@ -456,7 +453,7 @@ local function new(args) if not item or not idx then return end local idx1 = nil for k,v in ipairs(internal.items) do --rows - if item == v[1] then + if item == v then idx1 = k break end @@ -473,7 +470,7 @@ local function new(args) item.index = idx data:emit_signal("item::moved",item,idx,idx1) for i=idx,idx1 do - internal.items[i][1].index = i + internal.items[i].index = i end end end @@ -483,7 +480,7 @@ local function new(args) if not item then return end local idx1 = nil for k,v in ipairs(internal.items) do --rows - if item == v[1] then + if item == v then idx1 = k break end @@ -492,7 +489,7 @@ local function new(args) table.remove(internal.items,idx1) data:emit_signal("item::removed",item,idx1) for i=idx1,#internal.items do - internal.items[i][1].index = i + internal.items[i].index = i end end end @@ -510,10 +507,10 @@ local function new(args) current_item:set_selected(false,true) end data._start_at = (data._start_at or 1) - 1 - internal.items[data._start_at][1]._hidden = false - data:emit_signal("_hidden::changed",internal.items[data._start_at][1]) - internal.items[data._start_at+data.max_items][1]._hidden = true - data:emit_signal("_hidden::changed",internal.items[data._start_at+data.max_items][1]) + internal.items[data._start_at]._hidden = false + data:emit_signal("_hidden::changed",internal.items[data._start_at]) + internal.items[data._start_at+data.max_items]._hidden = true + data:emit_signal("_hidden::changed",internal.items[data._start_at+data.max_items]) filter(data) end end @@ -525,10 +522,10 @@ local function new(args) current_item:set_selected(false,true) end data._start_at = (data._start_at or 1) + 1 - internal.items[data._start_at-1][1]._hidden = true - data:emit_signal("_hidden::changed",internal.items[data._start_at-1][1]) - internal.items[data._start_at-1+data.max_items][1]._hidden = false - data:emit_signal("_hidden::changed",internal.items[data._start_at-1+data.max_items][1]) + internal.items[data._start_at-1]._hidden = true + data:emit_signal("_hidden::changed",internal.items[data._start_at-1]) + internal.items[data._start_at-1+data.max_items]._hidden = false + data:emit_signal("_hidden::changed",internal.items[data._start_at-1+data.max_items]) filter(data) end end diff --git a/impl/alttab/init.lua b/impl/alttab/init.lua index 3eecc95..a793420 100644 --- a/impl/alttab/init.lua +++ b/impl/alttab/init.lua @@ -4,18 +4,13 @@ local button = require( "awful.button" ) local beautiful = require( "beautiful" ) local tag = require( "awful.tag" ) local client2 = require( "awful.client" ) -local menu = require( "radical.box" ) +local radical = require( "radical" ) local util = require( "awful.util" ) local wibox = require( "wibox" ) local capi = { client = client, mouse = mouse, screen = screen} local module,pause_monitoring = {},false -local function draw_underlay(text) - -- If blind is installed, it can be used to draw the tag(s) name in the background - return beautiful.draw_underlay and beautiful.draw_underlay(text) or nil -end - -- Keep its own history instead of using awful.client.focus.history local focusIdx,focusTable = 1,setmetatable({}, { __mode = 'v' }) local function push_focus(c) @@ -76,12 +71,35 @@ local function new(args) if #histo == o then return end - - local t,auto_release = tag.selected(capi.client.focus and capi.client.focus.screen or capi.mouse.screen),args.auto_release - local currentMenu = menu({filter = true, show_filter=true, autodiscard = true, - disable_markup=true,fkeys_prefix=not auto_release,width=(((capi.screen[capi.client.focus and capi.client.focus.screen or capi.mouse.screen]).geometry.width)/2), - icon_transformation = beautiful.alttab_icon_transformation}) + local t,auto_release = tag.selected(capi.client.focus and capi.client.focus.screen or capi.mouse.screen),args.auto_release + local currentMenu = radical.box({filter = true, show_filter=true, autodiscard = true, + disable_markup=true,fkeys_prefix=not auto_release,width=(((capi.screen[capi.client.focus and capi.client.focus.screen or capi.mouse.screen]).geometry.width)/2), + icon_transformation = beautiful.alttab_icon_transformation,filter_underlay="Use [Shift] to toggle clients",filter_underlay_color=beautiful.menu_bg_normal, + filter_placeholder="Type to filter"}) + + local pref_bg = wibox.widget.background() + local pref_l = wibox.layout.align.horizontal() + pref_bg.fit = function(s,w,h) + local w2,h2 = wibox.widget.background.fit(s,w,h) + return w2,currentMenu.item_height + end + pref_bg:set_bg(currentMenu.bg_alternate) + local tb2= wibox.widget.textbox() + tb2:set_text("foo!!!!") + pref_l:set_first(tb2) + pref_bg:set_widget(pref_l) + local pref_menu,pref_menu_l = radical.bar{item_style=radical.item.style.basic} + pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL)) + pref_menu:add_item{text="Exclusive"} + pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL)) + pref_menu:add_item{text="12 clients"} + pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL)) + pref_menu:add_item{text="Screen 1"} + pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL)) + pref_l:set_third(pref_menu_l) + + currentMenu:add_prefix_widget(pref_bg) currentMenu:add_key_hook({}, "Tab", "press", select_next) currentMenu:add_key_hook({}, "Shift_L", "press", function() diff --git a/item/init.lua b/item/init.lua index 420cbd4..52f5d05 100644 --- a/item/init.lua +++ b/item/init.lua @@ -132,7 +132,7 @@ local function new_item(data,args) -- Need to be done before painting data._internal.items[#data._internal.items+1] = {} - data._internal.items[#data._internal.items][1] = item + data._internal.items[#data._internal.items] = item -- Setters item.set_selected = function(_,value,force) diff --git a/item/style/arrow_alt.lua b/item/style/arrow_alt.lua index 6469ea9..f5b6029 100644 --- a/item/style/arrow_alt.lua +++ b/item/style/arrow_alt.lua @@ -91,11 +91,11 @@ end local function get_prev(data,item) for k,v in ipairs(data.items) do - if v[1] == item then + if v == item then while k > 0 do k = k - 1 - if k > 0 and (not data.items[k][1].hidden) and data.items[k][1]._internal.f_key == item._internal.f_key - 1 then - return data.items[k][1] + if k > 0 and (not data.items[k].hidden) and data.items[k]._internal.f_key == item._internal.f_key - 1 then + return data.items[k] end end return nil diff --git a/layout/grid.lua b/layout/grid.lua index fd6024e..c7febc3 100644 --- a/layout/grid.lua +++ b/layout/grid.lua @@ -20,7 +20,7 @@ local function up(data) if idx <= 0 then idx = rc + idx + 1 end - data.items[idx][1].selected = true + data.items[idx].selected = true end local function down(data) @@ -29,7 +29,7 @@ local function down(data) if idx > rc then idx = idx - rc - 1 end - data.items[idx][1].selected = true + data.items[idx].selected = true end function module:setup_key_hooks(data) @@ -69,7 +69,7 @@ local function new(data) end local rc = data.rowcount+1 for i=1,rc do - rows[((i-1)%constraint)+1]:add((rc == i and item.widget or data.items[i][1].widget)) + rows[((i-1)%constraint)+1]:add((rc == i and item.widget or data.items[i].widget)) end return true end diff --git a/layout/horizontal.lua b/layout/horizontal.lua index 9fc3012..68ce15f 100644 --- a/layout/horizontal.lua +++ b/layout/horizontal.lua @@ -13,7 +13,7 @@ local module = {} local function left(data) if data._current_item._tmp_menu then data = data._current_item._tmp_menu - data.items[1][1].selected = true + data.items.selected = true return true,data end end @@ -21,8 +21,8 @@ end local function right(data) if data.parent_geometry.is_menu then for k,v in ipairs(data.items) do - if v[1]._tmp_menu == data or v[1].sub_menu_m == data then - v[1].selected = true + if v._tmp_menu == data or v.sub_menu_m == data then + v.selected = true end end data.visible = false diff --git a/layout/vertical.lua b/layout/vertical.lua index 6e4a78c..6f935dd 100644 --- a/layout/vertical.lua +++ b/layout/vertical.lua @@ -12,7 +12,7 @@ local module = {} local function left(data) if data._current_item._tmp_menu then data = data._current_item._tmp_menu - data.items[1][1].selected = true + data.items[1].selected = true return true,data end end @@ -20,8 +20,8 @@ end local function right(data) if data.parent_geometry and data.parent_geometry.is_menu then for k,v in ipairs(data.items) do - if v[1]._tmp_menu == data or v[1].sub_menu_m == data then - v[1].selected = true + if v._tmp_menu == data or v.sub_menu_m == data then + v.selected = true end end data.visible = false @@ -202,8 +202,8 @@ local function compute_geo(data) visblerow = data.max_items if data.filter_string ~= "" then local cur,vis = (data._start_at or 1),0 - while (data._internal.items[cur] and data._internal.items[cur][1]) and cur < data.max_items + (data._start_at or 1) do - vis = vis + (data._internal.items[cur][1]._filter_out and 0 or 1) + while (data._internal.items[cur] and data._internal.items[cur]) and cur < data.max_items + (data._start_at or 1) do + vis = vis + (data._internal.items[cur]._filter_out and 0 or 1) cur = cur +1 end visblerow = vis