From 4e54b38991ae6fbda3ed136bbff9dd2ac6c45027 Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage Vallee Date: Sat, 4 Jan 2014 01:27:52 -0500 Subject: [PATCH] Add sub_menu_on option --- README.md | 3 ++- bar.lua | 5 +++++ base.lua | 48 +++++++++++++++++++++++++++++++----------------- context.lua | 13 ++++++++++++- 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 3fb93ee..11f2e08 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ Multiple items can have multiple sets of options. | icon_size | Icon size | number | | auto_resize | Resize menu if items are too large | boolean | | parent_geometry | Set the menu parent | geometry array | -| arrow_type | Set the arrow type when use arrow style | see "arrow_type" | +| arrow_type | Set the arrow type when use arrow style | see "arrow_type" enum | | visible | Show or hide the menu | boolean | | direction | The direction from which the arrow will point | "left","right","top","bottom" | | row | Number of row (in grid layout) | number | @@ -144,6 +144,7 @@ Multiple items can have multiple sets of options. | disable_markup | Disable pango markup in items text | boolean | | x | X position (absolute) | number | | y | Y position (absolute) | number | +| sub_menu_on | Show submenu on selection or when clicking | see "sub_menu_on" enum | ###Item options diff --git a/bar.lua b/bar.lua index 5440a44..eac2433 100644 --- a/bar.lua +++ b/bar.lua @@ -93,6 +93,11 @@ local function create_item(item,data) m:set_widget(layout) -- Content + if item.icon then + local icon = wibox.widget.imagebox() + icon:set_image(item.icon) + layout:add(icon) + end local tb = wibox.widget.textbox() layout:add(tb) item.widget = bg diff --git a/base.lua b/base.lua index 208581c..f415d56 100644 --- a/base.lua +++ b/base.lua @@ -16,11 +16,13 @@ local module = { CENTERED = 2, }, sub_menu_on ={ - SELECTED = 0, - CLICKED = 1, - NEVER = 2, - } -}} + NEVER = 0, + BUTTON1 = 1, + BUTTON2 = 2, + BUTTON3 = 3, + SELECTED = 100, + }, +} local function filter(data) if not data.filter == false then @@ -44,6 +46,21 @@ local function filter(data) end end +local function execute_sub_menu(data,item) + if (item._private_data.sub_menu_f or item._private_data.sub_menu_m) then + local sub_menu = item._private_data.sub_menu_m or item._private_data.sub_menu_f() + if sub_menu and sub_menu.rowcount > 0 then + sub_menu.arrow_type = module.arrow_type.NONE + sub_menu.parent_item = item + sub_menu.parent_geometry = data + sub_menu.visible = true + item._tmp_menu = sub_menu + data._tmp_menu = sub_menu + end + end +end +module._execute_sub_menu = execute_sub_menu + ------------------------------------KEYBOARD HANDLING----------------------------------- local function activateKeyboard(data) if not data then return end @@ -75,8 +92,12 @@ local function activateKeyboard(data) end if (key == 'Return') and data._current_item and data._current_item.button1 then - data._current_item.button1() - data.visible = false + if data.sub_menu_on == module.sub_menu_on.BUTTON1 then + execute_sub_menu(data,data._current_item) + else + data._current_item.button1() + data.visible = false + end elseif key == 'Escape' or (key == 'Tab' and data.filter_string == "") then data.visible = false capi.keygrabber.stop() @@ -154,16 +175,8 @@ local function add_item(data,args) end data._current_item.selected = false end - if (private_data.sub_menu_f or private_data.sub_menu_m)and data._current_item ~= item then - local sub_menu = private_data.sub_menu_m or private_data.sub_menu_f() - if sub_menu and sub_menu.rowcount > 0 then - sub_menu.arrow_type = module.arrow_type.NONE - sub_menu.parent_item = item - sub_menu.parent_geometry = data - sub_menu.visible = true - item._tmp_menu = sub_menu - data._tmp_menu = sub_menu - end + if data.sub_menu_on == module.sub_menu_on.SELECTED and data._current_item ~= item then + execute_sub_menu(data,item) end data.item_style(data,item,true,false) data._current_item = item @@ -274,6 +287,7 @@ local function new(args) disable_markup = args.disable_markup or false, x = args.x or 0, y = args.y or 0, + sub_menu_on = args.sub_menu_on or module.sub_menu_on.SELECTED, }, get_map = { is_menu = function() return true end, diff --git a/context.lua b/context.lua index fd93477..7a12f6d 100644 --- a/context.lua +++ b/context.lua @@ -173,7 +173,14 @@ local function setup_item(data,item,args) buttons[#buttons+1] = button({},i,args["button"..i]) end end - if not buttons[3] then --Hide on right click + + -- Click to open sub_menu + if not buttons[1] and data.sub_menu_on == base.sub_menu_on.BUTTON1 then + buttons[#buttons+1] = button({},1,function() base._execute_sub_menu(data,item) end) + end + + --Hide on right click + if not buttons[3] then buttons[#buttons+1] = button({},3,function() data.visible = false if data.parent_geometry and data.parent_geometry.is_menu then @@ -181,11 +188,15 @@ local function setup_item(data,item,args) end end) end + + -- Scroll up if not buttons[4] then buttons[#buttons+1] = button({},4,function() data:scroll_up() end) end + + -- Scroll down if not buttons[5] then buttons[#buttons+1] = button({},5,function() data:scroll_down()