ScreenSaver: On race-y platforms, only force a refresh on close if the

widget was actually closed *immediately*.

If it's delayed (by time, tap or gesture), leave it alone.

Fix #9285
reviewable/pr9441/r1
NiLuJe 2 years ago
parent 8e7dddd927
commit e3228abb19

@ -273,8 +273,8 @@ function Device:onPowerEvent(ev)
end end
end end
self:resume() self:resume()
Screensaver:close() local widget_was_closed = Screensaver:close()
if self:needsScreenRefreshAfterResume() then if widget_was_closed and self:needsScreenRefreshAfterResume() then
UIManager:scheduleIn(1, function() self.screen:refreshFull() end) UIManager:scheduleIn(1, function() self.screen:refreshFull() end)
end end
self.screen_saver_mode = false self.screen_saver_mode = false

@ -273,10 +273,12 @@ function Kindle:outofScreenSaver()
if self.screen_saver_mode == true then if self.screen_saver_mode == true then
if self:supportsScreensaver() then if self:supportsScreensaver() then
local Screensaver = require("ui/screensaver") local Screensaver = require("ui/screensaver")
Screensaver:close() local widget_was_closed = Screensaver:close()
-- And redraw everything in case the framework managed to screw us over... if widget_was_closed then
local UIManager = require("ui/uimanager") -- And redraw everything in case the framework managed to screw us over...
UIManager:nextTick(function() UIManager:setDirty("all", "full") end) local UIManager = require("ui/uimanager")
UIManager:nextTick(function() UIManager:setDirty("all", "full") end)
end
else else
-- Stop awesome again if need be... -- Stop awesome again if need be...
if os.getenv("AWESOME_STOPPED") == "yes" then if os.getenv("AWESOME_STOPPED") == "yes" then

@ -776,6 +776,9 @@ function Screensaver:close()
self.delayed_close = true self.delayed_close = true
elseif screensaver_delay == "disable" then elseif screensaver_delay == "disable" then
self:close_widget() self:close_widget()
-- NOTE: Notify platforms that race with the native system (e.g., Kindle or needsScreenRefreshAfterResume)
-- that we've actually closed the widget *right now*.
return true
elseif screensaver_delay == "gesture" then elseif screensaver_delay == "gesture" then
if self.screensaver_widget then if self.screensaver_widget then
self.screensaver_widget:showWaitForGestureMessage() self.screensaver_widget:showWaitForGestureMessage()

Loading…
Cancel
Save