naughty: Expose 3 previously internal properties.

* app_name: To be used in filters when no clients are found.
 * max_width: Allow to set it from the rules, it might be different
    when a `widget_template` is used.
 * widget_template: Now it can be set from the rules without further
    boilerplate code.
This commit is contained in:
Emmanuel Lepage Vallee 2019-07-15 17:44:58 -04:00
parent e77ca1f4d8
commit f8cbb54913
3 changed files with 38 additions and 4 deletions

View File

@ -141,9 +141,12 @@ function notif_methods.Notify(sender, object_path, interface, method, parameters
return
end
end
if appname ~= "" then
args.appname = appname
args.appname = appname --TODO v6 Remove this.
args.app_name = appname
end
local preset = args.preset or cst.config.defaults
local notification
if actions then

View File

@ -17,6 +17,7 @@ local popup = require("awful.popup")
local awcommon = require("awful.widget.common")
local placement = require("awful.placement")
local abutton = require("awful.button")
local dpi = require("beautiful").xresources.apply_dpi
local default_widget = require("naughty.widget._default")
@ -136,9 +137,13 @@ end
local function generate_widget(args, n)
local w = wibox.widget.base.make_widget_from_value(
args.widget_template or default_widget
args.widget_template or (n and n.widget_template) or default_widget
)
if w.set_width then
w:set_width(n.max_width or beautiful.notification_max_width or dpi(500))
end
-- Call `:set_notification` on all children
awcommon._set_common_property(w, "notification", n or args.notification)
@ -224,7 +229,7 @@ local function new(args)
new_args = args and setmetatable(new_args, {__index = args}) or new_args
-- Generate the box before the popup is created to avoid the size changing
new_args.widget = generate_widget(new_args)
new_args.widget = generate_widget(new_args, new_args.notification)
local ret = popup(new_args)
ret._private.args = new_args

View File

@ -407,6 +407,31 @@ local notification = {}
-- @property clients
-- @param table
--- The maximum popup width.
--
-- Some notifications have overlong message, cap them to this width. Note that
-- this is ignored by `naughty.list.notifications` because it delegate this
-- decision to the layout.
--
-- @property[opt=500] max_width
-- @param number
--- The application name specified by the notification.
--
-- This can be anything. It is usually less relevant than the `clients`
-- property, but can sometime to specified for remote or headless notifications.
-- In these case, it helps to triage and detect the notification from the rules.
-- @property app_name
-- @param string
--- The widget template used to represent the notification.
--
-- Some notifications, such as chat messages or music applications are better
-- off with a specialized notification widget.
--
-- @property widget_template
-- @param table
--FIXME remove the screen attribute, let the handlers decide
-- document all handler extra properties
@ -526,7 +551,8 @@ local properties = {
"shape" , "opacity" , "margin" , "ignore_suspend",
"destroy" , "preset" , "callback", "actions" ,
"run" , "id" , "ignore" , "auto_reset_timeout",
"urgency" , "image" , "images" ,
"urgency" , "image" , "images" , "widget_template",
"max_width", "app_name",
}
for _, prop in ipairs(properties) do