mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
ScreenSaver: Delay footer/header repaint if screensaver_delay is enabled (#7334)
Fix #7327
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user