Make textclock garbage-collectable
This fixes the textclock-specific part of the test that the previous commit added. To fix this, gears.timer.weak_start_new() is used. This function creates a timer that is automatically stopped when its callback function is garbage collected. The callback function is saved as a member of the texbox widget that is the "widget behind the textclock". Thus, the timer can only be stopped after the widget is garbage-collected, but the timer does not keep the widget alive. Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
901c8f680a
commit
e9377c4808
|
@ -31,13 +31,14 @@ function textclock.new(format, timeout)
|
||||||
local timeout = timeout or 60
|
local timeout = timeout or 60
|
||||||
|
|
||||||
local w = textbox()
|
local w = textbox()
|
||||||
local t = timer { timeout = timeout }
|
local t
|
||||||
t:connect_signal("timeout", function()
|
function w._textclock_update_cb()
|
||||||
w:set_markup(DateTime.new_now_local():format(format))
|
w:set_markup(DateTime.new_now_local():format(format))
|
||||||
t.timeout = calc_timeout(timeout)
|
t.timeout = calc_timeout(timeout)
|
||||||
t:again()
|
t:again()
|
||||||
end)
|
return true -- Continue the timer
|
||||||
t:start()
|
end
|
||||||
|
t = timer.weak_start_new(timeout, w._textclock_update_cb)
|
||||||
t:emit_signal("timeout")
|
t:emit_signal("timeout")
|
||||||
return w
|
return w
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue