aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/ui/wicked/_default.lua
blob: 25283f9bd924d243c9ab057fd913e582b89b2c47 (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
----------------------------------------------------------------------------
--- The default widget template for the notifications.
--
-- @author Emmanuel Lepage Vallee <elv1313@gmail.com>
-- @copyright 2019 Emmanuel Lepage Vallee
-- @classmod naughty.widget._default
----------------------------------------------------------------------------

local wibox      = require("wibox")
local actionlist = require("naughty.list.actions")
local wtitle     = require("naughty.widget.title")
local wmessage   = require("naughty.widget.message")
local wicon      = require("naughty.widget.icon")
local wbg        = require("naughty.container.background")
local beautiful  = require("beautiful")
local dpi        = require("beautiful").xresources.apply_dpi

-- It is not worth doing a special widget for this.
local function notif_size()
    local constraint = wibox.container.constraint()
    constraint:set_strategy("max")
    constraint:set_width(beautiful.notification_max_width or dpi(500))

    rawset(constraint, "set_notification", function(_, notif)
        constraint._private.notification = setmetatable({notif}, {__mode = "v"})
        local s = false

        if notif.width and notif.width ~= beautiful.notification_max_width then
            constraint.width = notif.width
            s = true
        end
        if notif.height then
            constraint.height = notif.height
            s = true
        end

        constraint.strategy = s and "exact" or "max"
    end)

    rawset(constraint, "get_notification", function()
        return constraint._private.notification[1]
    end)

    return constraint
end

-- It is not worth doing a special widget for this either.
local function notif_margins()
    local margins = wibox.container.margin()
    margins:set_margins(beautiful.notification_margin or 4)

    rawset(margins, "set_notification", function(_, notif)
        if notif.margin then
            margins:set_margins(notif.margin)
        end
    end)

    return margins
end

-- Used as a fallback when no widget_template is provided, emulate the legacy
-- widget.
return {
    {
        {
            {
                {
                    wicon,
                    {
                        widget = wibox.container.place,
                        valign = "center",
                        halign = "center",
                        {
                            wtitle,
                            wmessage,
                            -- spacing = 4,
                            layout  = wibox.layout.fixed.vertical,
                        }
                    },
                    fill_space = true,
                    -- spacing    = 4,
                    layout     = wibox.layout.fixed.horizontal
                },
                actionlist,
                -- spacing = 10,
                layout  = wibox.layout.fixed.vertical,
            },
            widget = notif_margins,
        },
        id     = "background_role",
        widget = wbg,
    },
    widget  = notif_size,
}