AwesomeFiles/config/awesome/ui/widgets/pacman_taglist.lua
2022-03-06 20:04:04 +07:00

98 lines
3.8 KiB
Lua

local awful = require("awful")
local gears = require("gears")
local gfs = gears.filesystem
local wibox = require("wibox")
local beautiful = require("beautiful")
local xresources = require("beautiful.xresources")
local dpi = xresources.apply_dpi
local get_taglist = function(s)
-- Taglist buttons
local taglist_buttons = gears.table.join(
awful.button({}, 1,
function(t) t:view_only() end),
awful.button({modkey}, 1, function(t)
if client.focus then client.focus:move_to_tag(t) end
end), awful.button({}, 3, awful.tag.viewtoggle),
awful.button({modkey}, 3, function(t)
if client.focus then client.focus:toggle_tag(t) end
end), awful.button({}, 4, function(t)
awful.tag.viewnext(t.screen)
end), awful.button({}, 5, function(t)
awful.tag.viewprev(t.screen)
end))
-- The actual png icons
-- I do have the svgs, but inkscape does a better job of scaling
local ghost = gears.surface.load_uncached(
gfs.get_configuration_dir() .. "theme/assets/icons/taglist/ghost.png")
local ghost_icon = gears.color.recolor_image(ghost, beautiful.xcolor6)
local dot = gears.surface.load_uncached(
gfs.get_configuration_dir() .. "theme/assets/icons/taglist/dot.png")
local dot_icon = gears.color.recolor_image(dot, beautiful.xcolor8)
local pacman = gears.surface.load_uncached(
gfs.get_configuration_dir() .. "theme/assets/icons/taglist/pacman.png")
local pacman_icon = gears.color.recolor_image(pacman, beautiful.xcolor3)
-- Function to update the tags
local update_tags = function(self, c3)
local imgbox = self:get_children_by_id('icon_role')[1]
if c3.selected then
imgbox.image = pacman_icon
elseif #c3:clients() == 0 then
imgbox.image = dot_icon
else
imgbox.image = ghost_icon
end
end
local pac_taglist = awful.widget.taglist {
screen = s,
filter = awful.widget.taglist.filter.all,
style = {shape = gears.shape.rectangle},
layout = {spacing = 0, layout = wibox.layout.fixed.vertical},
widget_template = {
{
{id = 'icon_role', widget = wibox.widget.imagebox},
id = 'margin_role',
margins = dpi(8),
widget = wibox.container.margin
},
id = 'background_role',
widget = wibox.container.background,
create_callback = function(self, c3, index, objects)
update_tags(self, c3)
self:connect_signal('mouse::enter', function()
if #c3:clients() > 0 then
awesome.emit_signal("bling::tag_preview::update", c3)
awesome.emit_signal("bling::tag_preview::visibility", s,
true)
end
if self.bg ~= beautiful.lighter_bg then
self.backup = self.bg
self.has_backup = true
end
self.bg = beautiful.lighter_bg
end)
self:connect_signal('mouse::leave', function()
awesome.emit_signal("bling::tag_preview::visibility", s,
false)
if self.has_backup then
self.bg = self.backup
end
end)
end,
update_callback = function(self, c3, index, objects)
update_tags(self, c3)
end
},
buttons = taglist_buttons
}
return pac_taglist
end
return get_taglist