naughty: Add a background widget.
There is some boilerplate code that make using the widget_template harder when using the raw `wibox.container.background`. This widget takes care of it.
This commit is contained in:
parent
cf364a7b35
commit
5b5a25a57c
|
@ -0,0 +1,99 @@
|
|||
----------------------------------------------------------------------------
|
||||
--- A notification background.
|
||||
--
|
||||
-- This widget holds the boilerplate code associated with the notification
|
||||
-- background. This includes the color and potentially some other styling
|
||||
-- elements such as the shape and border.
|
||||
--
|
||||
-- * Honor the `beautiful` notification variables.
|
||||
-- * React to the `naughty.notification` changes.
|
||||
--
|
||||
--@DOC_wibox_nwidget_background_simple_EXAMPLE@
|
||||
--
|
||||
-- Note that this widget is based on the `wibox.container.background`. This is
|
||||
-- an implementation detail and may change in the future without prior notice.
|
||||
--
|
||||
-- @author Emmanuel Lepage Vallee <elv1313@gmail.com>
|
||||
-- @copyright 2019 Emmanuel Lepage Vallee
|
||||
-- @containermod naughty.widget.background
|
||||
-- @see wibox.container.background
|
||||
----------------------------------------------------------------------------
|
||||
local wbg = require("wibox.container.background")
|
||||
local gtable = require("gears.table")
|
||||
local beautiful = require("beautiful")
|
||||
local gshape = require("gears.shape")
|
||||
|
||||
local background = {}
|
||||
|
||||
local function update_background(notif, wdg)
|
||||
local bg = notif.bg or beautiful.notification_bg
|
||||
local bw = notif.border_width or beautiful.notification_border_width
|
||||
local bc = notif.border_color or beautiful.notification_border_color
|
||||
|
||||
-- Always fallback to the rectangle to make sure the border works
|
||||
local shape = notif.shape or
|
||||
beautiful.notification_shape or gshape.rectangle
|
||||
|
||||
wdg:set_bg(bg)
|
||||
wdg:set_shape(shape) -- otherwise there's no borders
|
||||
wdg:set_shape_border_width(bw)
|
||||
wdg:set_shape_border_color(bc)
|
||||
end
|
||||
|
||||
--- The attached notification.
|
||||
-- @property notification
|
||||
-- @tparam naughty.notification notification
|
||||
|
||||
function background:set_notification(notif)
|
||||
if self._private.notification == notif then return end
|
||||
|
||||
if self._private.notification then
|
||||
self._private.notification:disconnect_signal("poperty::bg",
|
||||
self._private.background_changed_callback)
|
||||
self._private.notification:disconnect_signal("poperty::border_width",
|
||||
self._private.background_changed_callback)
|
||||
self._private.notification:disconnect_signal("poperty::border_color",
|
||||
self._private.background_changed_callback)
|
||||
self._private.notification:disconnect_signal("poperty::shape",
|
||||
self._private.background_changed_callback)
|
||||
end
|
||||
|
||||
update_background(notif, self)
|
||||
|
||||
self._private.notification = notif
|
||||
|
||||
notif:connect_signal("poperty::bg" , self._private.background_changed_callback)
|
||||
notif:connect_signal("poperty::border_width", self._private.background_changed_callback)
|
||||
notif:connect_signal("poperty::border_color", self._private.background_changed_callback)
|
||||
notif:connect_signal("poperty::shape" , self._private.background_changed_callback)
|
||||
end
|
||||
|
||||
--- Create a new naughty.container.background.
|
||||
-- @tparam table args
|
||||
-- @tparam naughty.notification args.notification The notification.
|
||||
-- @constructorfct naughty.container.background
|
||||
|
||||
local function new(args)
|
||||
args = args or {}
|
||||
|
||||
local bg = wbg()
|
||||
bg:set_border_strategy("inner")
|
||||
|
||||
gtable.crush(bg, background, true)
|
||||
|
||||
function bg._private.background_changed_callback()
|
||||
update_background(bg._private.notification, bg)
|
||||
end
|
||||
|
||||
if args.notification then
|
||||
bg:set_notification(args.notification)
|
||||
end
|
||||
|
||||
return bg
|
||||
end
|
||||
|
||||
--@DOC_widget_COMMON@
|
||||
|
||||
--@DOC_object_COMMON@
|
||||
|
||||
return setmetatable(background, {__call = function(_, ...) return new(...) end})
|
|
@ -0,0 +1,9 @@
|
|||
---------------------------------------------------------------------------
|
||||
-- @author Emmanuel Lepage Vallee <elv1313@gmail.com>
|
||||
-- @copyright 2019 Emmanuel Lepage Vallee
|
||||
-- @module naughty.container
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
return {
|
||||
background = require( "naughty.container.background" );
|
||||
}
|
|
@ -13,6 +13,8 @@ naughty.action = require("naughty.action")
|
|||
naughty.list = require("naughty.list")
|
||||
naughty.layout = require("naughty.layout")
|
||||
naughty.widget = require("naughty.widget")
|
||||
naughty.container = require("naughty.container")
|
||||
naughty.action = require("naughty.action")
|
||||
naughty.notification = require("naughty.notification")
|
||||
|
||||
return naughty
|
||||
|
|
Loading…
Reference in New Issue