2019-03-12 19:25:23 +01:00
|
|
|
----------------------------------------------------------------------------
|
|
|
|
--- The default widget template for the notifications.
|
|
|
|
--
|
|
|
|
-- @author Emmanuel Lepage Vallee <elv1313@gmail.com>
|
|
|
|
-- @copyright 2019 Emmanuel Lepage Vallee
|
|
|
|
-- @classmod naughty.widget._default
|
|
|
|
----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
local wibox = require("wibox")
|
|
|
|
local actionlist = require("naughty.list.actions")
|
|
|
|
local wtitle = require("naughty.widget.title")
|
|
|
|
local wmessage = require("naughty.widget.message")
|
|
|
|
local wicon = require("naughty.widget.icon")
|
|
|
|
local wbg = require("naughty.container.background")
|
|
|
|
local beautiful = require("beautiful")
|
|
|
|
local dpi = require("beautiful").xresources.apply_dpi
|
|
|
|
|
|
|
|
-- It is not worth doing a special widget for this.
|
|
|
|
local function notif_size()
|
|
|
|
local constraint = wibox.container.constraint()
|
|
|
|
constraint:set_strategy("max")
|
|
|
|
constraint:set_width(beautiful.notification_max_width or dpi(500))
|
|
|
|
|
|
|
|
rawset(constraint, "set_notification", function(_, notif)
|
2021-11-01 03:30:17 +01:00
|
|
|
constraint._private.notification = setmetatable({notif}, {__mode = "v"})
|
2019-03-12 19:25:23 +01:00
|
|
|
local s = false
|
|
|
|
|
|
|
|
if notif.width and notif.width ~= beautiful.notification_max_width then
|
|
|
|
constraint.width = notif.width
|
|
|
|
s = true
|
|
|
|
end
|
|
|
|
if notif.height then
|
|
|
|
constraint.height = notif.height
|
|
|
|
s = true
|
|
|
|
end
|
|
|
|
|
|
|
|
constraint.strategy = s and "exact" or "max"
|
|
|
|
end)
|
|
|
|
|
2021-11-01 03:30:17 +01:00
|
|
|
rawset(constraint, "get_notification", function()
|
|
|
|
return constraint._private.notification[1]
|
|
|
|
end)
|
|
|
|
|
2019-03-12 19:25:23 +01:00
|
|
|
return constraint
|
|
|
|
end
|
|
|
|
|
|
|
|
-- It is not worth doing a special widget for this either.
|
|
|
|
local function notif_margins()
|
|
|
|
local margins = wibox.container.margin()
|
|
|
|
margins:set_margins(beautiful.notification_margin or 4)
|
|
|
|
|
|
|
|
rawset(margins, "set_notification", function(_, notif)
|
|
|
|
if notif.margin then
|
|
|
|
margins:set_margins(notif.margin)
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
return margins
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Used as a fallback when no widget_template is provided, emulate the legacy
|
|
|
|
-- widget.
|
|
|
|
return {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{
|
|
|
|
wicon,
|
|
|
|
{
|
|
|
|
wtitle,
|
|
|
|
wmessage,
|
|
|
|
spacing = 4,
|
|
|
|
layout = wibox.layout.fixed.vertical,
|
|
|
|
},
|
|
|
|
fill_space = true,
|
|
|
|
spacing = 4,
|
|
|
|
layout = wibox.layout.fixed.horizontal,
|
|
|
|
},
|
|
|
|
actionlist,
|
|
|
|
spacing = 10,
|
|
|
|
layout = wibox.layout.fixed.vertical,
|
|
|
|
},
|
|
|
|
widget = notif_margins,
|
|
|
|
},
|
|
|
|
id = "background_role",
|
|
|
|
widget = wbg,
|
|
|
|
},
|
|
|
|
widget = notif_size,
|
|
|
|
}
|