diff --git a/frontend/apps/reader/modules/readercoptlistener.lua b/frontend/apps/reader/modules/readercoptlistener.lua index 79916ef2c..76139b837 100644 --- a/frontend/apps/reader/modules/readercoptlistener.lua +++ b/frontend/apps/reader/modules/readercoptlistener.lua @@ -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 diff --git a/frontend/apps/reader/modules/readerfooter.lua b/frontend/apps/reader/modules/readerfooter.lua index 2675a0e57..e89b0b735 100644 --- a/frontend/apps/reader/modules/readerfooter.lua +++ b/frontend/apps/reader/modules/readerfooter.lua @@ -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() diff --git a/frontend/ui/elements/screensaver_menu.lua b/frontend/ui/elements/screensaver_menu.lua index d2abe21e8..4dc194152 100644 --- a/frontend/ui/elements/screensaver_menu.lua +++ b/frontend/ui/elements/screensaver_menu.lua @@ -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 diff --git a/frontend/ui/widget/screensaverwidget.lua b/frontend/ui/widget/screensaverwidget.lua index b42d26304..d03f0a70d 100644 --- a/frontend/ui/widget/screensaverwidget.lua +++ b/frontend/ui/widget/screensaverwidget.lua @@ -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