local M = {} local wibox = require("wibox") local Pager = {} local function pager_fit(pager, width, height) return width, width * #pager.desktop.pages end local function pager_draw(pager, wibox, cr, width, height) if pager.desktop == nil then return end local nb_pages = #pager.desktop.pages local page_height = height / nb_pages for i = 1, nb_pages do local page = pager.desktop.pages[i] local draw_h_start = (i - 1) * page_height for j, client in pairs(page:clients()) do local text = client.name local extents = cr:text_extents(text) cr:move_to(0, draw_h_start) cr:show_text(text) draw_h_start = draw_h_start + extents.height end end cr:set_line_width(3) cr:stroke() end local function pager_set_desktop(pager, desktop) pager.desktop = desktop pager:emit_signal("widget::updated") end function Pager:new() local pager = wibox.widget.base.make_widget() pager.fit = pager_fit pager.draw = pager_draw pager.set_desktop = pager_set_desktop return pager end M.Pager = Pager return M