textclock: Round timeout so that displayed time is more accurate
Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
94e61ec94b
commit
8dc6fa8666
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
local setmetatable = setmetatable
|
||||||
local os = os
|
local os = os
|
||||||
|
local fmod = math.fmod
|
||||||
local textbox = require("wibox.widget.textbox")
|
local textbox = require("wibox.widget.textbox")
|
||||||
local timer = require("gears.timer")
|
local timer = require("gears.timer")
|
||||||
|
|
||||||
|
@ -13,6 +14,14 @@ local timer = require("gears.timer")
|
||||||
-- awful.widget.textclock
|
-- awful.widget.textclock
|
||||||
local textclock = { mt = {} }
|
local textclock = { mt = {} }
|
||||||
|
|
||||||
|
-- This lowers the timeout so that it occurs "correctly". For example, a timeout
|
||||||
|
-- of 60 is rounded so that it occurs the next time the clock reads ":00 seconds".
|
||||||
|
local function calc_timeout(real_timeout)
|
||||||
|
local date = os.date("*t")
|
||||||
|
local date_time = (date.hour * 60 + date.min) * 60 + date.sec
|
||||||
|
return real_timeout - fmod(date_time, real_timeout)
|
||||||
|
end
|
||||||
|
|
||||||
--- Create a textclock widget. It draws the time it is in a textbox.
|
--- Create a textclock widget. It draws the time it is in a textbox.
|
||||||
-- @param format The time format. Default is " %a %b %d, %H:%M ".
|
-- @param format The time format. Default is " %a %b %d, %H:%M ".
|
||||||
-- @param timeout How often update the time. Default is 60.
|
-- @param timeout How often update the time. Default is 60.
|
||||||
|
@ -23,7 +32,11 @@ function textclock.new(format, timeout)
|
||||||
|
|
||||||
local w = textbox()
|
local w = textbox()
|
||||||
local t = timer { timeout = timeout }
|
local t = timer { timeout = timeout }
|
||||||
t:connect_signal("timeout", function() w:set_markup(os.date(format)) end)
|
t:connect_signal("timeout", function()
|
||||||
|
w:set_markup(os.date(format))
|
||||||
|
t.timeout = calc_timeout(timeout)
|
||||||
|
t:again()
|
||||||
|
end)
|
||||||
t:start()
|
t:start()
|
||||||
t:emit_signal("timeout")
|
t:emit_signal("timeout")
|
||||||
return w
|
return w
|
||||||
|
|
Loading…
Reference in New Issue