luca-awesome-dotfiles/home/.config/awesome/widgets/tray-toggle/init.lua
2022-11-22 13:25:44 +01:00

68 lines
1.5 KiB
Lua

local awful = require('awful')
local wibox = require('wibox')
local gears = require('gears')
local dpi = require('beautiful').xresources.apply_dpi
local clickable_container = require('widget.clickable-container')
local config_dir = gears.filesystem.get_configuration_dir()
local widget_icon_dir = config_dir .. 'widget/tray-toggle/icons/'
local widget = wibox.widget {
{
id = 'icon',
image = widget_icon_dir .. 'right-arrow' .. '.svg',
widget = wibox.widget.imagebox,
resize = true
},
layout = wibox.layout.align.horizontal
}
local widget_button = wibox.widget {
{
widget,
margins = dpi(7),
widget = wibox.container.margin
},
widget = clickable_container
}
widget_button:buttons(
gears.table.join(
awful.button(
{},
1,
nil,
function()
awesome.emit_signal('widget::systray:toggle')
end
)
)
)
-- Listen to signal
awesome.connect_signal(
'widget::systray:toggle',
function()
if screen.primary.systray then
if not screen.primary.systray.visible then
widget.icon:set_image(gears.surface.load_uncached(widget_icon_dir .. 'left-arrow.svg'))
else
widget.icon:set_image(gears.surface.load_uncached(widget_icon_dir .. 'right-arrow.svg'))
end
screen.primary.systray.visible = not screen.primary.systray.visible
end
end
)
-- Update icon on start-up
if screen.primary.systray then
if screen.primary.systray.visible then
widget.icon:set_image(widget_icon_dir .. 'right-arrow' .. '.svg')
end
end
-- Show only the tray button in the primary screen
return awful.widget.only_on_screen(widget_button, 'primary')