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.
|
||||
local tooltip = { mt = {} }
|
||||
|
||||
local function get_wibox(self)
|
||||
if not self.wibox then
|
||||
self.wibox = wibox(self.wibox_properties)
|
||||
self.wibox:set_widget(self.marginbox)
|
||||
local instance_mt = {}
|
||||
|
||||
function instance_mt:__index(key)
|
||||
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
|
||||
-- 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
|
||||
return self.wibox
|
||||
end
|
||||
|
||||
-- Place the tooltip under the mouse.
|
||||
--
|
||||
-- @tparam tooltip self A tooltip object.
|
||||
local function set_geometry(self)
|
||||
local wb = get_wibox(self)
|
||||
-- calculate width / height
|
||||
local n_w, n_h = self.textbox:get_preferred_size(mouse.screen)
|
||||
n_w = n_w + self.marginbox.left + self.marginbox.right
|
||||
n_h = n_h + self.marginbox.top + self.marginbox.bottom
|
||||
wb:geometry({ width = n_w, height = n_h })
|
||||
a_placement.next_to_mouse(wb)
|
||||
a_placement.no_offscreen(wb, mouse.screen)
|
||||
self.wibox:geometry({ width = n_w, height = n_h })
|
||||
a_placement.next_to_mouse(self.wibox)
|
||||
a_placement.no_offscreen(self.wibox, mouse.screen)
|
||||
end
|
||||
|
||||
-- Show a tooltip.
|
||||
|
@ -97,7 +99,7 @@ local function show(self)
|
|||
end
|
||||
end
|
||||
set_geometry(self)
|
||||
get_wibox(self).visible = true
|
||||
self.wibox.visible = true
|
||||
self.visible = true
|
||||
end
|
||||
|
||||
|
@ -112,7 +114,7 @@ local function hide(self)
|
|||
self.timer:stop()
|
||||
end
|
||||
end
|
||||
get_wibox(self).visible = false
|
||||
self.wibox.visible = false
|
||||
self.visible = false
|
||||
end
|
||||
|
||||
|
@ -189,9 +191,9 @@ end
|
|||
-- @see set_text
|
||||
-- @see set_markup
|
||||
tooltip.new = function(args)
|
||||
local self = {
|
||||
local self = setmetatable({
|
||||
visible = false,
|
||||
}
|
||||
}, instance_mt)
|
||||
|
||||
-- private data
|
||||
if args.delay_show then
|
||||
|
|
Loading…
Reference in New Issue