add: natural management of update arguments
This commit is contained in:
parent
a005967191
commit
2f2beb69cb
|
@ -23,10 +23,11 @@ local template = {
|
||||||
queued_updates = {}
|
queued_updates = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
function template:_do_update_now(args)
|
function template:_do_update_now()
|
||||||
if type(self.update_callback) == 'function' then
|
if type(self.update_callback) == "function" then
|
||||||
self:update_callback(args)
|
self:update_callback(self.update_args)
|
||||||
end
|
end
|
||||||
|
self.update_args = nil
|
||||||
template.queued_updates[self] = false
|
template.queued_updates[self] = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -37,23 +38,19 @@ end
|
||||||
-- is called multiple times during the same GLib event loop, only the first call
|
-- is called multiple times during the same GLib event loop, only the first call
|
||||||
-- will be run.
|
-- will be run.
|
||||||
-- All arguments are passed to the queued `update_callback` call.
|
-- All arguments are passed to the queued `update_callback` call.
|
||||||
-- @treturn boolean Returns `true` if the update_callback have been queued to be
|
|
||||||
-- run at the end of the event loop. Returns `false` if there is already an update
|
|
||||||
-- in the queue (in this case, this new update request is discared).
|
|
||||||
function template:update(args)
|
function template:update(args)
|
||||||
|
if type(args) == "table" then
|
||||||
|
self.update_args = gtable.crush(gtable.clone(self.update_args or {}, false), args)
|
||||||
|
end
|
||||||
|
|
||||||
if not template.queued_updates[self] then
|
if not template.queued_updates[self] then
|
||||||
local update_args = gtable.crush(gtable.clone(self.update_args, false), args or {})
|
|
||||||
gtimer.delayed_call(
|
gtimer.delayed_call(
|
||||||
function()
|
function()
|
||||||
self:_do_update_now(update_args)
|
self:_do_update_now()
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
template.queued_updates[self] = true
|
template.queued_updates[self] = true
|
||||||
|
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Create a new `wibox.widget.template` instance.
|
--- Create a new `wibox.widget.template` instance.
|
||||||
|
@ -71,7 +68,6 @@ function template.new(args)
|
||||||
local widget = wbase.make_widget_from_value(widget_template)
|
local widget = wbase.make_widget_from_value(widget_template)
|
||||||
|
|
||||||
widget.update_callback = args.update_callback
|
widget.update_callback = args.update_callback
|
||||||
widget.update_args = args.update_args or {}
|
|
||||||
|
|
||||||
gtable.crush(widget, template, true)
|
gtable.crush(widget, template, true)
|
||||||
|
|
||||||
|
|
|
@ -50,21 +50,36 @@ describe("wibox.widget.template", function()
|
||||||
|
|
||||||
it("update parameters", function()
|
it("update parameters", function()
|
||||||
local spied_update_callback = spy.new(function() end)
|
local spied_update_callback = spy.new(function() end)
|
||||||
local args_structure = { foo = "string" }
|
local args = { foo = "string" }
|
||||||
local update_args = { foo = "bar" }
|
|
||||||
|
|
||||||
widget.update_args = args_structure
|
|
||||||
widget.update_callback = function(...) spied_update_callback(...) end
|
widget.update_callback = function(...) spied_update_callback(...) end
|
||||||
|
|
||||||
widget:update(update_args)
|
widget:update(args)
|
||||||
|
|
||||||
gtimer.run_delayed_calls_now()
|
gtimer.run_delayed_calls_now()
|
||||||
|
|
||||||
assert.spy(spied_update_callback).was.called_with(
|
assert.spy(spied_update_callback).was.called_with(
|
||||||
match.is_ref(widget),
|
match.is_ref(widget),
|
||||||
match.is_same_table_struture(widget.update_args)
|
match.is_same(args)
|
||||||
)
|
)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("crush update parameters", function()
|
||||||
|
local spied_update_callback = spy.new(function() end)
|
||||||
|
|
||||||
|
widget.update_callback = function(...) spied_update_callback(...) end
|
||||||
|
|
||||||
|
widget:update { foo = "bar" }
|
||||||
|
widget:update { bar = 10 }
|
||||||
|
|
||||||
|
gtimer.run_delayed_calls_now()
|
||||||
|
|
||||||
|
assert.spy(spied_update_callback).was.called_with(
|
||||||
|
match.is_ref(widget),
|
||||||
|
match.is_same { foo = "bar", bar = 10 }
|
||||||
|
)
|
||||||
|
end)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue