From c3d38932f42a1b1b48b3a1f3f07a21b96f7ace52 Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage Vallee Date: Tue, 14 Jan 2014 23:19:49 -0500 Subject: [PATCH] Add 'add_key_binding' method (fix issue #5) --- README.md | 7 +++++++ base.lua | 13 +++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ad426e1..53766be 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,9 @@ The most simple kind of menus, contexts one, can be created like this: -- To add the menu to a widget: local mytextbox = wibox.widget.textbox() mytextbox:set_menu(menu,3) -- 3 = right mouse button, 1 = left mouse button + + -- To add a key binding on a "box" menu (and every other types) + menu:add_key_binding({"Mod4"},",") ``` In this example, a simple 3 item menu is created with a dynamically generated @@ -54,6 +57,10 @@ them once and passing the submenu object to the "sub_menu" item property. `:set_menu` can also take a lazy-loading function instead of a menu. The second parameter is not mandatory, the default is `1`. +`:add_key_binding` will add a key binding. It can also take a function as 3rd +parameter. However, it wont correctly place "context" menu as it have no idea +where you expect them. It work better with "box" menus. + ### Menu types The current valid types are: diff --git a/base.lua b/base.lua index 550ad8b..c1d81cb 100644 --- a/base.lua +++ b/base.lua @@ -4,9 +4,10 @@ local type,string = type,string local print,unpack = print, unpack local beautiful = require( "beautiful" ) local util = require( "awful.util" ) +local aw_key = require( "awful.key" ) local object = require( "radical.object" ) -local capi = { mouse = mouse, screen = screen , keygrabber = keygrabber } +local capi = { mouse = mouse, screen = screen , keygrabber = keygrabber, root=root, } local module = { arrow_type = { @@ -250,6 +251,14 @@ local function add_embeded_menu(data,menu) menu._embeded_parent = data end +local function add_key_binding(data,mod,key,func) + print("\n\n\nCAT",mod,key,func) + capi.root.keys(util.table.join(capi.root.keys(),aw_key(mod or {}, key, func and func() or function () + print("bob") + data.visible = not data.visible + end))) +end + ---------------------------------MENU HANDLING---------------------------------- local function new(args) @@ -326,7 +335,7 @@ local function new(args) autogen_signals = true, }) internal.get_map,internal.set_map,internal.private_data = get_map,set_map,private_data - data.add_item,data.add_widget,data.add_embeded_menu,data._internal = add_item,add_widget,add_embeded_menu,internal + data.add_item,data.add_widget,data.add_embeded_menu,data._internal,data.add_key_binding = add_item,add_widget,add_embeded_menu,internal,add_key_binding set_map.parent_geometry = function(value) private_data.parent_geometry = value if data._internal.get_direction then