diff options
Diffstat (limited to 'widgets/tasklist.lua')
-rw-r--r-- | widgets/tasklist.lua | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/widgets/tasklist.lua b/widgets/tasklist.lua new file mode 100644 index 0000000..76616bf --- /dev/null +++ b/widgets/tasklist.lua @@ -0,0 +1,80 @@ +local awful = require("awful") +local wibox = require("wibox") +local wibox_tooltip = require("lib.wiboxtooltip") +local beautiful = require("beautiful") + +local separator = { widget = wibox.widget.separator, opacity = 0 } + +function create_tasklist_widget(s, filter, font_focus) + return awful.widget.tasklist { + screen = s, + filter = filter, + buttons = tasklist_buttons, + widget_template = { + id = "text_role", + widget = wibox.widget.textbox, + align = "center", + }, + style = { + font_focus = font_focus, + }, + } +end + +function create_tasklist(s) + -- allow for different styles for different layouts + local tasklist_focused = create_tasklist_widget(s, awful.widget.tasklist.filter.focused, beautiful.tasklist_font) + local tasklist_currenttags = create_tasklist_widget(s, awful.widget.tasklist.filter.currenttags, beautiful.tasklist_font_focus) + + local change_layout = function(layout) + local max = layout == awful.layout.suit.max + tasklist_currenttags:set_visible(max) + tasklist_focused:set_visible(not max) + end + change_layout(s.selected_tag.layout) + + -- setup widgets + local tasklist = wibox.widget { + layout = wibox.layout.stack, + tasklist_currenttags, + tasklist_focused, + } + + local popup = wibox_tooltip(tasklist, awful.widget.tasklist { + screen = s, + filter = awful.widget.tasklist.filter.currenttags, + layout = { + layout = wibox.layout.fixed.vertical, + }, + widget_template = { + id = "text_role", + widget = wibox.widget.textbox, + align = "center", + }, + style = { + font_focus = beautiful.font_mono_bold, + }, + }) + + -- setup signals to change tasklist filter on layout changes + local change_layout_from_tag = function(t) + if t.screen ~= s then return end + change_layout(t.layout) + end + tag.connect_signal("property::layout", change_layout_from_tag) + tag.connect_signal("property::selected", change_layout_from_tag) + tag.connect_signal("tagged", change_layout_from_tag) + tag.connect_signal("untagged", change_layout_from_tag) + tag.connect_signal("property::screen", change_layout_from_tag) + + -- return widget + return wibox.widget { + layout = wibox.layout.align.horizontal, + expand = "outside", + separator, + tasklist, + separator, + } +end + +return create_tasklist |