From 75e6f4cb9edcf0ec4b0225b684e07f45478acbd1 Mon Sep 17 00:00:00 2001 From: Damien Leone Date: Thu, 23 Oct 2008 15:11:13 +0200 Subject: [PATCH] awful.menu: change menu parameters to use a table, add height and width parameters Signed-off-by: Julien Danjou --- awesomerc.lua.in | 4 ++-- lib/awful/menu.lua.in | 37 +++++++++++++++++++++---------------- lib/awful/widget.lua.in | 2 +- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/awesomerc.lua.in b/awesomerc.lua.in index 47f43c827..fdce4e740 100644 --- a/awesomerc.lua.in +++ b/awesomerc.lua.in @@ -115,7 +115,7 @@ mymainmenu = { mylauncher = awful.widget.launcher({ name = "mylauncher", image = "@AWESOME_ICON_PATH@/awesome16.png", - menu = { "mymainmenu", mymainmenu } }) + menu = { id="mymainmenu", items=mymainmenu } }) -- Create a systray mysystray = widget({ type = "systray", name = "mysystray", align = "right" }) @@ -172,7 +172,7 @@ end -- {{{ Mouse bindings awesome.buttons({ - button({ }, 3, function () awful.menu.new("mymainmenu", mymainmenu) end), + button({ }, 3, function () awful.menu.new({ id="mymainmenu", items=mymainmenu }) end), button({ }, 4, awful.tag.viewnext), button({ }, 5, awful.tag.viewprev) }) diff --git a/lib/awful/menu.lua.in b/lib/awful/menu.lua.in index 097426b59..7cbf501c4 100644 --- a/lib/awful/menu.lua.in +++ b/lib/awful/menu.lua.in @@ -90,7 +90,7 @@ end local function exec(data, action, num) if type(action[2]) == "table" then destroy(data.child) - data.child = new(action[1], action[2], data, num) + data.child = new({ id=action[1], items=action[2] }, data, num) elseif type(action[2]) == "string" then destroy(get_parents(data)) util.spawn(action[2]) @@ -127,7 +127,7 @@ local function add_item(data, num, item_info) end else icon = widget({ type = "textbox", name = "icon", align = "left" }) - icon.width = theme.menu_height + icon.width = data.h end icon:buttons(bindings) @@ -162,10 +162,10 @@ local function add_item(data, num, item_info) item.widgets = { icon, label, submenu } item:geometry({ - width = theme.menu_width, - height = theme.menu_height, + width = data.w, + height = data.h, x = data.x, - y = data.y + theme.menu_height*(num - 1) + y = data.y + data.h*(num - 1) }) item.ontop = true @@ -188,37 +188,42 @@ function clients() end, c.icon } end - return new("Clients", cls_t) + return new({ id="Clients", items=cls_t }) end --- Open a menu popup. --- @param id Menu id, string naming your menu, only one menu with the same id can be displayed on screen at the same time. --- @param items Table containing the displayed items, each element is a tab containing: item name, tiggered action or submenu table, item icon (optional). +-- @param menu Table containing the menu informations. Element id: string naming your menu, only one menu with the same id can be displayed on screen at the same time. Element items: Table containing the displayed items, each element is a tab containing: item name, tiggered action or submenu table, item icon (optional). Elements width and height: force the geometry of your menu, if one (or both) of these elements is not specified, the default values will be used. -- @param parent Specify the parent menu if we want to open a submenu, this value should never be set by the user. -- @param num Specify the parent's clicked item number if we want to open a submenu, this value should never be set by the user. -function new(id, items, parent, num) +function new(menu, parent, num) -- Load config only one time if not theme then load_theme() end -- Close the menu if it was already opened - if menus[id] then - destroy(menus[id]) + if menus[menu.id] then + destroy(menus[menu.id]) end -- Create a table to store our menu informations local data = {} - data.id = id + data.id = menu.id data.screen = capi.mouse.screen data.items = {} data.child = nil if parent then - data.x = parent.x + theme.menu_width + theme.border_width - data.y = parent.y + theme.menu_height*(num - 1) + data.h = parent.h + data.w = parent.w + + data.x = parent.x + data.w + theme.border_width + data.y = parent.y + data.h*(num - 1) data.parent = parent else + data.h = menu.height and menu.height or theme.menu_height + data.w = menu.width and menu.width or theme.menu_width + local m_coords = capi.mouse.coords() data.x = m_coords.x data.y = m_coords.y @@ -226,12 +231,12 @@ function new(id, items, parent, num) end -- Create items - for k, v in pairs(items) do + for k, v in pairs(menu.items) do table.insert(data.items, add_item(data, k, v)) end -- Add menu to menus table - menus[id] = data + menus[menu.id] = data return data end diff --git a/lib/awful/widget.lua.in b/lib/awful/widget.lua.in index ff56722d0..849b269f0 100644 --- a/lib/awful/widget.lua.in +++ b/lib/awful/widget.lua.in @@ -388,7 +388,7 @@ function launcher(args) if args.command then b[#b + 1] = capi.button({}, 1, nil, function () util.spawn(args.command) end) elseif args.menu then - b[#b + 1] = capi.button({}, 1, nil, function () menu.new(args.menu[1], args.menu[2]) end) + b[#b + 1] = capi.button({}, 1, nil, function () menu.new(args.menu) end) end w:buttons(b)