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