naughty: Add a shared default widget_template for the notifications.
This will be shared by the notifications stored in a wibox/wibar and the ones using a popup. It extends the constraint and margins container to take care of some boilerplate code. While other widgets have their own public API, those 2 are private since they are not different enough to warrent a new public module.
This commit is contained in:
parent
5b5a25a57c
commit
6e50ee2a41
|
@ -0,0 +1,85 @@
|
|||
----------------------------------------------------------------------------
|
||||
--- 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)
|
||||
constraint._private.notification = notif
|
||||
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)
|
||||
|
||||
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,
|
||||
}
|
Loading…
Reference in New Issue