naughty: Add a title widget.
It is a normal textbox with some extra boilerplate code. Having this in a separate widget allows the notification to be defined from rc.lua without a ton of beautiful options and connect_signal.
This commit is contained in:
parent
916b49bde0
commit
3592d33b6c
|
@ -5,4 +5,5 @@
|
|||
---------------------------------------------------------------------------
|
||||
|
||||
return {
|
||||
title = require( "naughty.widget.title" );
|
||||
}
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
----------------------------------------------------------------------------
|
||||
--- A notification title.
|
||||
--
|
||||
-- This widget is a specialized `wibox.widget.textbox` with the following extra
|
||||
-- features:
|
||||
--
|
||||
-- * Honor the `beautiful` notification variables.
|
||||
-- * React to the `naughty.notification` object title changes.
|
||||
--
|
||||
--@DOC_wibox_nwidget_title_simple_EXAMPLE@
|
||||
--
|
||||
-- @author Emmanuel Lepage Vallee <elv1313@gmail.com>
|
||||
-- @copyright 2017 Emmanuel Lepage Vallee
|
||||
-- @widgetmod naughty.widget.title
|
||||
-- @see wibox.widget.textbox
|
||||
----------------------------------------------------------------------------
|
||||
local textbox = require("wibox.widget.textbox")
|
||||
local gtable = require("gears.table")
|
||||
local beautiful = require("beautiful")
|
||||
|
||||
local title = {}
|
||||
|
||||
local function markup(notif, wdg)
|
||||
local ret = "<b>"..(notif.title or "").."</b>"
|
||||
local fg = notif.fg or beautiful.notification_fg
|
||||
|
||||
wdg:set_font(notif.font or beautiful.notification_font)
|
||||
|
||||
if fg then
|
||||
ret = "<span color='" .. fg .. "'>" .. ret .. "</span>"
|
||||
end
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
--- The attached notification.
|
||||
-- @property notification
|
||||
-- @tparam naughty.notification notification
|
||||
|
||||
function title:set_notification(notif)
|
||||
if self._private.notification == notif then return end
|
||||
|
||||
if self._private.notification then
|
||||
self._private.notification:disconnect_signal("poperty::message",
|
||||
self._private.title_changed_callback)
|
||||
self._private.notification:disconnect_signal("poperty::fg",
|
||||
self._private.title_changed_callback)
|
||||
end
|
||||
|
||||
self:set_markup(markup(notif, self))
|
||||
|
||||
self._private.notification = notif
|
||||
self._private.title_changed_callback()
|
||||
|
||||
notif:connect_signal("poperty::title", self._private.title_changed_callback)
|
||||
notif:connect_signal("poperty::fg" , self._private.title_changed_callback)
|
||||
end
|
||||
|
||||
--- Create a new naughty.widget.title.
|
||||
-- @tparam table args
|
||||
-- @tparam naughty.notification args.notification The notification.
|
||||
-- @constructorfct naughty.widget.title
|
||||
|
||||
local function new(args)
|
||||
args = args or {}
|
||||
local tb = textbox()
|
||||
tb:set_wrap("word")
|
||||
tb:set_font(beautiful.notification_font)
|
||||
|
||||
gtable.crush(tb, title, true)
|
||||
|
||||
function tb._private.title_changed_callback()
|
||||
tb:set_markup(markup(tb._private.notification, tb))
|
||||
end
|
||||
|
||||
if args.notification then
|
||||
tb:set_notification(args.notification)
|
||||
end
|
||||
|
||||
return tb
|
||||
end
|
||||
|
||||
--@DOC_widget_COMMON@
|
||||
|
||||
--@DOC_object_COMMON@
|
||||
|
||||
return setmetatable(title, {__call = function(_, ...) return new(...) end})
|
Loading…
Reference in New Issue