Fix issue #11, break API, may cause regressions
This commit is contained in:
parent
9b9c96be1b
commit
bee04c14bc
53
base.lua
53
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
|
||||
|
|
|
@ -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="<span fgcolor='".. (beautiful.menu_fg_disabled or beautiful.fg_disabled or "#777777") .."'>Type to filter</span>"})
|
||||
|
||||
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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue