81 lines
2 KiB
Lua
81 lines
2 KiB
Lua
local wibox = require('wibox')
|
|
local awful = require('awful')
|
|
local gears = require('gears')
|
|
local naughty = require('naughty')
|
|
local beautiful = require('beautiful')
|
|
local dpi = beautiful.xresources.apply_dpi
|
|
|
|
local config_dir = gears.filesystem.get_configuration_dir()
|
|
local widget_icon_dir = config_dir .. 'widget/notif-center/icons/'
|
|
|
|
local empty_notifbox = require('widget.notif-center.build-notifbox.empty-notifbox')
|
|
local notifbox_scroller = require('widget.notif-center.build-notifbox.notifbox-scroller')
|
|
|
|
local notif_core = {}
|
|
|
|
notif_core.remove_notifbox_empty = true
|
|
|
|
notif_core.notifbox_layout = wibox.widget {
|
|
layout = wibox.layout.fixed.vertical,
|
|
spacing = dpi(5),
|
|
empty_notifbox
|
|
}
|
|
|
|
notifbox_scroller(notif_core.notifbox_layout)
|
|
|
|
notif_core.reset_notifbox_layout = function()
|
|
notif_core.notifbox_layout:reset()
|
|
notif_core.notifbox_layout:insert(1, empty_notifbox)
|
|
notif_core.remove_notifbox_empty = true
|
|
end
|
|
|
|
local notifbox_add = function(n, notif_icon, notifbox_color)
|
|
if #notif_core.notifbox_layout.children == 1 and notif_core.remove_notifbox_empty then
|
|
notif_core.notifbox_layout:reset(notif_core.notifbox_layout)
|
|
notif_core.remove_notifbox_empty = false
|
|
end
|
|
|
|
local notifbox_box = require('widget.notif-center.build-notifbox.notifbox-builder')
|
|
notif_core.notifbox_layout:insert(
|
|
1,
|
|
notifbox_box(
|
|
n,
|
|
notif_icon,
|
|
n.title,
|
|
n.message,
|
|
n.app_name,
|
|
notifbox_color
|
|
)
|
|
)
|
|
end
|
|
|
|
local notifbox_add_expired = function(n, notif_icon, notifbox_color)
|
|
n:connect_signal(
|
|
'destroyed',
|
|
function(self, reason, keep_visble)
|
|
if reason == 1 then
|
|
notifbox_add(n, notif_icon, notifbox_color)
|
|
end
|
|
end
|
|
)
|
|
end
|
|
|
|
naughty.connect_signal(
|
|
"request::display",
|
|
function(n)
|
|
local notifbox_color = beautiful.groups_bg
|
|
if n.urgency == 'critical' then
|
|
notifbox_color = n.bg .. '66'
|
|
end
|
|
|
|
local notif_icon = n.icon or n.app_icon
|
|
if not notif_icon then
|
|
notif_icon = widget_icon_dir .. 'new-notif' .. '.svg'
|
|
end
|
|
|
|
notifbox_add_expired(n, notif_icon, notifbox_color)
|
|
end
|
|
)
|
|
|
|
return notif_core
|