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
95
96
97
98
|
local lgi = require("lgi")
local Astal = lgi.require("Astal", "3.0")
local Gtk = lgi.require("Gtk", "3.0")
local astalify = require("astal.gtk3.astalify")
---@overload fun(ctor: any): function
local Widget = {
astalify = astalify,
Box = astalify(Astal.Box),
Button = astalify(Astal.Button),
CenterBox = astalify(Astal.CenterBox),
CircularProgress = astalify(Astal.CircularProgress),
DrawingArea = astalify(Gtk.DrawingArea),
Entry = astalify(Gtk.Entry),
EventBox = astalify(Astal.EventBox),
-- TODO: Fixed
-- TODO: FlowBox
Icon = astalify(Astal.Icon),
Label = astalify(Gtk.Label),
LevelBar = astalify(Astal.LevelBar),
-- TODO: ListBox
MenuButton = astalify(Gtk.MenuButton),
Overlay = astalify(Astal.Overlay),
Revealer = astalify(Gtk.Revealer),
Scrollable = astalify(Astal.Scrollable),
Slider = astalify(Astal.Slider),
Stack = astalify(Astal.Stack),
Switch = astalify(Gtk.Switch),
Window = astalify(Astal.Window),
}
Gtk.Widget._attribute.css = {
get = Astal.widget_get_css,
set = Astal.widget_set_css,
}
Gtk.Widget._attribute.class_name = {
get = function(self)
local result = ""
local strings = Astal.widget_get_class_names(self)
for i, str in ipairs(strings) do
result = result .. str
if i < #strings then
result = result .. " "
end
end
return result
end,
set = function(self, class_name)
local names = {}
for word in class_name:gmatch("%S+") do
table.insert(names, word)
end
Astal.widget_set_class_names(self, names)
end,
}
Gtk.Widget._attribute.cursor = {
get = Astal.widget_get_cursor,
set = Astal.widget_set_cursor,
}
Gtk.Widget._attribute.click_through = {
get = Astal.widget_get_click_through,
set = Astal.widget_set_click_through,
}
Gtk.Widget._attribute.action_group = {
set = function (self, v)
self:insert_action_group(v[1], v[2])
end
}
local no_implicit_destroy = {}
Gtk.Widget._attribute.no_implicit_destroy = {
get = function(self)
return no_implicit_destroy[self] or false
end,
set = function(self, v)
if no_implicit_destroy[self] == nil then
self.on_destroy = function()
no_implicit_destroy[self] = nil
end
end
no_implicit_destroy[self] = v
end,
}
Astal.Box._attribute.children = {
get = Astal.Box.get_children,
set = Astal.Box.set_children,
}
return setmetatable(Widget, {
__call = function(_, ctor)
return astalify(ctor)
end,
})
|