diff --git a/lib/awful/widget/tasklist.lua b/lib/awful/widget/tasklist.lua
index 700c87245..b8a3cdb58 100644
--- a/lib/awful/widget/tasklist.lua
+++ b/lib/awful/widget/tasklist.lua
@@ -24,6 +24,50 @@
--
⬍ | maximized_vertical |
--
--
+-- **Customizing the tasklist:**
+--
+-- The `tasklist` created by `rc.lua` use the default values for almost
+-- everything. However, it is possible to override each aspects to create a
+-- very different widget. Here's an example that create a tasklist similar to
+-- the default one, but with an explicit layout and some spacing widgets:
+--
+--@DOC_wibox_awidget_tasklist_rounded_EXAMPLE@
+--
+-- As demonstrated in the example above, there are a few "shortcuts" to avoid
+-- re-inventing the wheel. By setting the predefined roles as widget `id`s,
+-- `awful.widget.common` will do most of the work to update the values
+-- automatically. All of them are optional. The supported roles are:
+--
+-- * `icon_role`: A `wibox.widget.imagebox`
+-- * `text_role`: A `wibox.widget.textbox`
+-- * `background_role`: A `wibox.container.background`
+-- * `text_margin_role`: A `wibox.container.margin`
+-- * `icon_margin_role`: A `wibox.container.margin`
+--
+-- `awful.widget.common` also has 2 callbacks to give more control over the widget:
+--
+-- * `create_callback`: Called once after the widget instance is created
+-- * `update_callback`: Called everytime the data is refreshed
+--
+-- Both callback have the same parameters:
+--
+-- * `self`: The widget instance (*widget*).
+-- * `c`: The client (*client*)
+-- * `index`: The widget position in the list (*number*)
+-- * `clients`: The list of client, in order (*table*)
+--
+-- It is also possible to omit some roles and create an icon only tasklist.
+-- Notice that this example use the `awful.widget.clienticon` widget instead
+-- of an `imagebox`. This allows higher resoluton icons to be loaded. This
+-- example reproduces the Windows 10 tasklist look and feel:
+--
+--@DOC_wibox_awidget_tasklist_windows10_EXAMPLE@
+--
+-- The tasklist can also be created in an `awful.popup` in case there is no
+-- permanent `awful.wibar`:
+--
+--@DOC_awful_popup_alttab_EXAMPLE@
+--
-- @author Julien Danjou <julien@danjou.info>
-- @copyright 2008-2009 Julien Danjou
-- @classmod awful.widget.tasklist
@@ -246,7 +290,9 @@ local function tasklist_label(c, args, tb)
local maximized_horizontal = args.maximized_horizontal or theme.tasklist_maximized_horizontal or '⬌'
local maximized_vertical = args.maximized_vertical or theme.tasklist_maximized_vertical or '⬍'
- tb:set_align(align)
+ if tb then
+ tb:set_align(align)
+ end
if not theme.tasklist_plain_task_name then
if c.sticky then name = name .. sticky end
@@ -339,7 +385,10 @@ local function tasklist_label(c, args, tb)
text = text .. ""..name..""
bg_image = bg_image_normal
end
- tb:set_font(font)
+
+ if tb then
+ tb:set_font(font)
+ end
local other_args = {
shape = shape,
@@ -350,7 +399,7 @@ local function tasklist_label(c, args, tb)
return text, bg, bg_image, not tasklist_disable_icon and c.icon or nil, other_args
end
-local function tasklist_update(s, w, buttons, filter, data, style, update_function)
+local function tasklist_update(s, w, buttons, filter, data, style, update_function, args)
local clients = {}
for _, c in ipairs(capi.client.get()) do
if not (c.skip_taskbar or c.hidden
@@ -362,7 +411,7 @@ local function tasklist_update(s, w, buttons, filter, data, style, update_functi
local function label(c, tb) return tasklist_label(c, style, tb) end
- update_function(w, buttons, label, data, clients)
+ update_function(w, buttons, label, data, clients, args)
end
--- Create a new tasklist widget.
@@ -381,6 +430,7 @@ end
-- update. See `awful.widget.common.list_update`.
-- @tparam[opt] table args.layout Container widget for tag widgets. Default
-- is `wibox.layout.flex.horizontal`.
+-- @tparam[opt] table widget_template A custom widget to be used for each client
-- @tparam[opt={}] table args.style The style overrides default theme.
-- @tparam[opt=nil] string|pattern args.style.fg_normal
-- @tparam[opt=nil] string|pattern args.style.bg_normal
@@ -465,7 +515,7 @@ function tasklist.new(args, filter, buttons, style, update_function, base_widget
function w._do_tasklist_update_now()
queued_update = false
if screen.valid then
- tasklist_update(screen, w, args.buttons, args.filter, data, args.style, uf)
+ tasklist_update(screen, w, args.buttons, args.filter, data, args.style, uf, args)
end
end