naughty: Make the actions API more useful to lua code
Previously it was just tailored for the dbus interface's needs. Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
509bbe7230
commit
239bc02d83
|
@ -310,7 +310,8 @@ end
|
||||||
-- @param callback function that will be called with all arguments
|
-- @param callback function that will be called with all arguments
|
||||||
-- the notification will only be displayed if the function returns true
|
-- the notification will only be displayed if the function returns true
|
||||||
-- note: this function is only relevant to notifications sent via dbus
|
-- note: this function is only relevant to notifications sent via dbus
|
||||||
-- @param actions array of pair of String:String for each action (id:localized text)
|
-- @param actions mapping that maps a string to a callback when this action is
|
||||||
|
-- selected
|
||||||
-- @usage naughty.notify({ title = "Achtung!", text = "You're idling", timeout = 0 })
|
-- @usage naughty.notify({ title = "Achtung!", text = "You're idling", timeout = 0 })
|
||||||
-- @return The notification object
|
-- @return The notification object
|
||||||
function naughty.notify(args)
|
function naughty.notify(args)
|
||||||
|
@ -445,17 +446,7 @@ function naughty.notify(args)
|
||||||
local actions_max_width = 0
|
local actions_max_width = 0
|
||||||
local actions_total_height = 0
|
local actions_total_height = 0
|
||||||
if actions then
|
if actions then
|
||||||
local action
|
for action, callback in pairs(actions) do
|
||||||
local actionid
|
|
||||||
-- create actions box
|
|
||||||
for i , v in ipairs(actions) do
|
|
||||||
if i % 2 == 1 then
|
|
||||||
actionid = v
|
|
||||||
if actionid == "default" then
|
|
||||||
has_default_action = true;
|
|
||||||
end
|
|
||||||
elseif actionid ~= nil and actionid ~= "default" then
|
|
||||||
action = v
|
|
||||||
local actiontextbox = wibox.widget.textbox()
|
local actiontextbox = wibox.widget.textbox()
|
||||||
local actionmarginbox = wibox.layout.margin()
|
local actionmarginbox = wibox.layout.margin()
|
||||||
actionmarginbox:set_margins(margin)
|
actionmarginbox:set_margins(margin)
|
||||||
|
@ -463,24 +454,15 @@ function naughty.notify(args)
|
||||||
actiontextbox:set_valign("middle")
|
actiontextbox:set_valign("middle")
|
||||||
actiontextbox:set_font(font)
|
actiontextbox:set_font(font)
|
||||||
actiontextbox:set_markup(string.format('<b>%s</b>', action))
|
actiontextbox:set_markup(string.format('<b>%s</b>', action))
|
||||||
-- calculate the height
|
-- calculate the height and width
|
||||||
local w, h = actiontextbox:fit(-1, -1)
|
local w, h = actiontextbox:fit(-1, -1)
|
||||||
local height = h + 2 * margin
|
local height = h + 2 * margin
|
||||||
|
|
||||||
-- calculate the width
|
|
||||||
w, h = actiontextbox:fit(-1, -1)
|
|
||||||
local width = w + 2 * margin
|
local width = w + 2 * margin
|
||||||
|
|
||||||
actionmarginbox:buttons(util.table.join(
|
actionmarginbox:buttons(util.table.join(
|
||||||
button({ }, 1, function()
|
button({ }, 1, callback),
|
||||||
sendActionInvoked(notification.id, actionid)
|
button({ }, 3, callback)
|
||||||
die(naughty.notificationClosedReason.dismissedByUser)
|
))
|
||||||
end),
|
|
||||||
button({ }, 3, function()
|
|
||||||
sendActionInvoked(notification.id, actionid)
|
|
||||||
die(naughty.notificationClosedReason.dismissedByUser)
|
|
||||||
end))
|
|
||||||
)
|
|
||||||
actionslayout:add(actionmarginbox)
|
actionslayout:add(actionmarginbox)
|
||||||
|
|
||||||
actions_total_height = actions_total_height + height
|
actions_total_height = actions_total_height + height
|
||||||
|
@ -489,7 +471,6 @@ function naughty.notify(args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
-- create iconbox
|
-- create iconbox
|
||||||
local iconbox = nil
|
local iconbox = nil
|
||||||
|
@ -648,7 +629,31 @@ if capi.dbus then
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local preset = args.preset or naughty.config.defaults
|
local preset = args.preset or naughty.config.defaults
|
||||||
args.actions = actions
|
local notification
|
||||||
|
if actions then
|
||||||
|
args.actions = {}
|
||||||
|
|
||||||
|
local actionid
|
||||||
|
-- create actions callbacks
|
||||||
|
for i , v in ipairs(actions) do
|
||||||
|
if i % 2 == 1 then
|
||||||
|
actionid = v
|
||||||
|
elseif actionid == "default" then
|
||||||
|
args.run = function()
|
||||||
|
sendActionInvoked(notification.id, "default")
|
||||||
|
naughty.destroy(notification, naughty.notificationClosedReason.dismissedByUser)
|
||||||
|
end
|
||||||
|
actionid = nil
|
||||||
|
elseif actionid ~= nil then
|
||||||
|
local action = actionid
|
||||||
|
args.actions[actionid] = function()
|
||||||
|
sendActionInvoked(notification.id, action)
|
||||||
|
naughty.destroy(notification, naughty.notificationClosedReason.dismissedByUser)
|
||||||
|
end
|
||||||
|
actionid = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
if not preset.callback or (type(preset.callback) == "function" and
|
if not preset.callback or (type(preset.callback) == "function" and
|
||||||
preset.callback(data, appname, replaces_id, icon, title, text, actions, hints, expire)) then
|
preset.callback(data, appname, replaces_id, icon, title, text, actions, hints, expire)) then
|
||||||
if icon ~= "" then
|
if icon ~= "" then
|
||||||
|
@ -708,8 +713,8 @@ if capi.dbus then
|
||||||
if expire and expire > -1 then
|
if expire and expire > -1 then
|
||||||
args.timeout = expire / 1000
|
args.timeout = expire / 1000
|
||||||
end
|
end
|
||||||
local id = naughty.notify(args).id
|
notification = naughty.notify(args)
|
||||||
return "u", id
|
return "u", notification.id
|
||||||
end
|
end
|
||||||
return "u", "0"
|
return "u", "0"
|
||||||
elseif data.member == "CloseNotification" then
|
elseif data.member == "CloseNotification" then
|
||||||
|
|
Loading…
Reference in New Issue