summaryrefslogtreecommitdiff
path: root/awesome/lib/awful/widget/launcher.lua
diff options
context:
space:
mode:
Diffstat (limited to 'awesome/lib/awful/widget/launcher.lua')
-rw-r--r--awesome/lib/awful/widget/launcher.lua41
1 files changed, 41 insertions, 0 deletions
diff --git a/awesome/lib/awful/widget/launcher.lua b/awesome/lib/awful/widget/launcher.lua
new file mode 100644
index 0000000..a944908
--- /dev/null
+++ b/awesome/lib/awful/widget/launcher.lua
@@ -0,0 +1,41 @@
+---------------------------------------------------------------------------
+-- @author Julien Danjou <julien@danjou.info>
+-- @copyright 2008-2009 Julien Danjou
+-- @classmod awful.widget.launcher
+---------------------------------------------------------------------------
+
+local setmetatable = setmetatable
+local util = require("awful.util")
+local spawn = require("awful.spawn")
+local wbutton = require("awful.widget.button")
+local button = require("awful.button")
+
+local launcher = { mt = {} }
+
+--- Create a button widget which will launch a command.
+-- @param args Standard widget table arguments, plus image for the image path
+-- and command for the command to run on click, or either menu to create menu.
+-- @return A launcher widget.
+function launcher.new(args)
+ if not args.command and not args.menu then return end
+ local w = wbutton(args)
+ if not w then return end
+
+ local b
+ if args.command then
+ b = util.table.join(w:buttons(), button({}, 1, nil, function () spawn(args.command) end))
+ elseif args.menu then
+ b = util.table.join(w:buttons(), button({}, 1, nil, function () args.menu:toggle() end))
+ end
+
+ w:buttons(b)
+ return w
+end
+
+function launcher.mt:__call(...)
+ return launcher.new(...)
+end
+
+return setmetatable(launcher, launcher.mt)
+
+-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80