98 lines
3.8 KiB
Lua
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
|