awful.tooltip: Use metatable magic to create wiboxes lazily
This might make the code a bit easier to follow. Unless you want to know where the wibox is created... Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
68bde9d584
commit
e347f7191c
|
@ -58,30 +58,32 @@ local ipairs = ipairs
|
||||||
-- @tfield boolean visible True if tooltip is visible.
|
-- @tfield boolean visible True if tooltip is visible.
|
||||||
local tooltip = { mt = {} }
|
local tooltip = { mt = {} }
|
||||||
|
|
||||||
local function get_wibox(self)
|
local instance_mt = {}
|
||||||
if not self.wibox then
|
|
||||||
self.wibox = wibox(self.wibox_properties)
|
function instance_mt:__index(key)
|
||||||
self.wibox:set_widget(self.marginbox)
|
if key == "wibox" then
|
||||||
|
local wb = wibox(self.wibox_properties)
|
||||||
|
wb:set_widget(self.marginbox)
|
||||||
|
|
||||||
-- Close the tooltip when clicking it. This gets done on release, to not
|
-- Close the tooltip when clicking it. This gets done on release, to not
|
||||||
-- emit the release event on an underlying object, e.g. the titlebar icon.
|
-- emit the release event on an underlying object, e.g. the titlebar icon.
|
||||||
self.wibox:buttons(abutton({}, 1, nil, self.hide))
|
wb:buttons(abutton({}, 1, nil, self.hide))
|
||||||
|
rawset(self, "wibox", wb)
|
||||||
|
return wb
|
||||||
end
|
end
|
||||||
return self.wibox
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Place the tooltip under the mouse.
|
-- Place the tooltip under the mouse.
|
||||||
--
|
--
|
||||||
-- @tparam tooltip self A tooltip object.
|
-- @tparam tooltip self A tooltip object.
|
||||||
local function set_geometry(self)
|
local function set_geometry(self)
|
||||||
local wb = get_wibox(self)
|
|
||||||
-- calculate width / height
|
-- calculate width / height
|
||||||
local n_w, n_h = self.textbox:get_preferred_size(mouse.screen)
|
local n_w, n_h = self.textbox:get_preferred_size(mouse.screen)
|
||||||
n_w = n_w + self.marginbox.left + self.marginbox.right
|
n_w = n_w + self.marginbox.left + self.marginbox.right
|
||||||
n_h = n_h + self.marginbox.top + self.marginbox.bottom
|
n_h = n_h + self.marginbox.top + self.marginbox.bottom
|
||||||
wb:geometry({ width = n_w, height = n_h })
|
self.wibox:geometry({ width = n_w, height = n_h })
|
||||||
a_placement.next_to_mouse(wb)
|
a_placement.next_to_mouse(self.wibox)
|
||||||
a_placement.no_offscreen(wb, mouse.screen)
|
a_placement.no_offscreen(self.wibox, mouse.screen)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Show a tooltip.
|
-- Show a tooltip.
|
||||||
|
@ -97,7 +99,7 @@ local function show(self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
set_geometry(self)
|
set_geometry(self)
|
||||||
get_wibox(self).visible = true
|
self.wibox.visible = true
|
||||||
self.visible = true
|
self.visible = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -112,7 +114,7 @@ local function hide(self)
|
||||||
self.timer:stop()
|
self.timer:stop()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
get_wibox(self).visible = false
|
self.wibox.visible = false
|
||||||
self.visible = false
|
self.visible = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -189,9 +191,9 @@ end
|
||||||
-- @see set_text
|
-- @see set_text
|
||||||
-- @see set_markup
|
-- @see set_markup
|
||||||
tooltip.new = function(args)
|
tooltip.new = function(args)
|
||||||
local self = {
|
local self = setmetatable({
|
||||||
visible = false,
|
visible = false,
|
||||||
}
|
}, instance_mt)
|
||||||
|
|
||||||
-- private data
|
-- private data
|
||||||
if args.delay_show then
|
if args.delay_show then
|
||||||
|
|
Loading…
Reference in New Issue