ScreenSaver: Delay footer/header repaint if screensaver_delay is enabled (#7334)

Fix #7327
reviewable/pr7345/r1
NiLuJe 3 years ago committed by GitHub
parent 013a6076c1
commit d243097d75
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -116,7 +116,25 @@ ReaderCoptListener.onSetStatusLine = ReaderCoptListener.rescheduleHeaderRefreshI
ReaderCoptListener.onSetViewMode = ReaderCoptListener.rescheduleHeaderRefreshIfNeeded
-- ReaderView:onSetViewMode(), which sets view.view_mode, is called before
-- ReaderCoptListener.onSetViewMode, so we'll get the updated value
ReaderCoptListener.onResume = ReaderCoptListener.rescheduleHeaderRefreshIfNeeded
function ReaderCoptListener:onResume()
-- Don't repaint the header until OutOfScreenSaver if screensaver_delay is enabled...
local screensaver_delay = G_reader_settings:readSetting("screensaver_delay")
if screensaver_delay and screensaver_delay ~= "disable" then
self._delayed_screensaver = true
return
end
ReaderCoptListener:rescheduleHeaderRefreshIfNeeded()
end
function ReaderCoptListener:onOutOfScreenSaver()
if not self._delayed_screensaver then
return
end
self._delayed_screensaver = nil
ReaderCoptListener:rescheduleHeaderRefreshIfNeeded()
end
-- Unschedule on these events
ReaderCoptListener.onCloseDocument = ReaderCoptListener.unscheduleHeaderRefresh

@ -2177,6 +2177,24 @@ function ReaderFooter:refreshFooter(refresh, signal)
end
function ReaderFooter:onResume()
-- Don't repaint the footer until OutOfScreenSaver if screensaver_delay is enabled...
local screensaver_delay = G_reader_settings:readSetting("screensaver_delay")
if screensaver_delay and screensaver_delay ~= "disable" then
self._delayed_screensaver = true
return
end
-- Force a footer repaint on resume if it was visible
self:onUpdateFooter(self.view.footer_visible)
self:rescheduleFooterAutoRefreshIfNeeded()
end
function ReaderFooter:onOutOfScreenSaver()
if not self._delayed_screensaver then
return
end
self._delayed_screensaver = nil
-- Force a footer repaint on resume if it was visible
self:onUpdateFooter(self.view.footer_visible)
self:rescheduleFooterAutoRefreshIfNeeded()

@ -208,7 +208,7 @@ return {
}
},
{
text = _("Delay when exit from screensaver"),
text = _("Keep the screensaver on screen after wakeup"),
sub_item_table = {
{
text = _("Disable"),
@ -224,7 +224,7 @@ return {
end
},
{
text = _("1 second"),
text = _("For 1 second"),
checked_func = function()
if screensaverDelay() == "1" then
return true
@ -237,7 +237,7 @@ return {
end
},
{
text = _("3 seconds"),
text = _("For 3 seconds"),
checked_func = function()
if screensaverDelay() == "3" then
return true
@ -250,7 +250,7 @@ return {
end
},
{
text = _("5 seconds"),
text = _("For 5 seconds"),
checked_func = function()
if screensaverDelay() == "5" then
return true
@ -263,7 +263,7 @@ return {
end
},
{
text = _("Tap to exit screensaver"),
text = _("Until a tap"),
checked_func = function()
if screensaverDelay() == "tap" then
return true

@ -1,4 +1,5 @@
local Device = require("device")
local Event = require("ui/event")
local Geom = require("ui/geometry")
local GestureRange = require("ui/gesturerange")
local FrameContainer = require("ui/widget/container/framecontainer")
@ -73,6 +74,8 @@ end
function ScreenSaverWidget:onClose()
UIManager:close(self, "full")
-- Will come after the Resume event (how much later depends on screensaver_delay).
UIManager:broadcastEvent(Event:new("OutOfScreenSaver"))
return true
end

Loading…
Cancel
Save