From 8cd80288a034d0646e9f1a41c92139ed439d8e81 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Thu, 6 Nov 2014 12:59:00 +0100 Subject: [PATCH] Implement UIManager:unschedule(action). Fixes #1007. --- frontend/device/generic/device.lua | 4 +++- frontend/ui/uimanager.lua | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index 5fc4b3721..0e5f718f1 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -90,7 +90,7 @@ function Device:onPowerEvent(ev) self.screen:setRotationMode(0) Screensaver:show() self:prepareSuspend() - UIManager:scheduleIn(2, function() self:Suspend() end) + UIManager:scheduleIn(10, self.Suspend) elseif (ev == "Power" or ev == "Resume") and self.screen_saver_mode then DEBUG("Resuming...") -- restore to previous rotation mode @@ -113,6 +113,8 @@ function Device:Suspend() end function Device:Resume() + local UIManager = require("ui/uimanager") + UIManager:unschedule(self.Suspend) self.screen:refresh(1) self.screen_saver_mode = false end diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 2656d9f66..de7e2da8b 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -191,6 +191,16 @@ function UIManager:scheduleIn(seconds, action) self:schedule(when, action) end +function UIManager:unschedule(action) + for i = #self._execution_stack, 1, -1 do + local task = self._execution_stack[i] + if task.action == action then + -- remove from table + table.remove(self._execution_stack, i) + end + end +end + -- register a widget to be repainted function UIManager:setDirty(widget, refresh_type) -- "auto": request full refresh