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.list = require("naughty.list")
|
||||||
naughty.layout = require("naughty.layout")
|
naughty.layout = require("naughty.layout")
|
||||||
naughty.widget = require("naughty.widget")
|
naughty.widget = require("naughty.widget")
|
||||||
|
naughty.container = require("naughty.container")
|
||||||
|
naughty.action = require("naughty.action")
|
||||||
naughty.notification = require("naughty.notification")
|
naughty.notification = require("naughty.notification")
|
||||||
|
|
||||||
return naughty
|
return naughty
|
||||||
|
|
Loading…
Reference in New Issue