summaryrefslogtreecommitdiff
path: root/widgets/tasklist.lua
blob: 76616bff91ba35405bcf404e29ccf14198d2c7ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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