summaryrefslogtreecommitdiff
path: root/widgets/tasklist.lua
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/tasklist.lua')
-rw-r--r--widgets/tasklist.lua80
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