diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index a0afcd887..4dee307e2 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -107,13 +107,28 @@ if Device:setDateTime() then end if Device:isKobo() then - common_settings.sleepcover = { - text = _("Ignore sleepcover events"), + common_settings.ignore_sleepcover = { + text = _("Ignore all sleepcover events"), checked_func = function() return G_reader_settings:isTrue("ignore_power_sleepcover") end, callback = function() G_reader_settings:flipNilOrFalse("ignore_power_sleepcover") + G_reader_settings:flipFalse("ignore_open_sleepcover") + UIManager:show(InfoMessage:new{ + text = _("This will take effect on next restart."), + }) + end + } + + common_settings.ignore_open_sleepcover = { + text = _("Ignore sleepcover wakeup events"), + checked_func = function() + return G_reader_settings:isTrue("ignore_open_sleepcover") + end, + callback = function() + G_reader_settings:flipNilOrFalse("ignore_open_sleepcover") + G_reader_settings:flipFalse("ignore_power_sleepcover") UIManager:show(InfoMessage:new{ text = _("This will take effect on next restart."), }) diff --git a/frontend/ui/elements/filemanager_menu_order.lua b/frontend/ui/elements/filemanager_menu_order.lua index e1c21cf73..ed6e9e05a 100644 --- a/frontend/ui/elements/filemanager_menu_order.lua +++ b/frontend/ui/elements/filemanager_menu_order.lua @@ -40,7 +40,8 @@ local order = { "time", "battery", "autosuspend", - "sleepcover", + "ignore_sleepcover", + "ignore_open_sleepcover", "mass_storage_settings", }, navigation = { diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index 5382ba6bb..1a1b78c95 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -60,7 +60,8 @@ local order = { "time", "battery", "autosuspend", - "sleepcover", + "ignore_sleepcover", + "ignore_open_sleepcover", "mass_storage_settings", }, navigation = { diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 018e52db8..859323be1 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -117,24 +117,30 @@ function UIManager:init() self:suspend() end end - if not G_reader_settings:readSetting("ignore_power_sleepcover") then + -- Sleep Cover handling + if G_reader_settings:readSetting("ignore_power_sleepcover") then + -- NOTE: The hardware event itself will wake the kernel up if it's in suspend (:/). + -- Let the unexpected wakeup guard handle that. + self.event_handlers["SleepCoverClosed"] = nil + self.event_handlers["SleepCoverOpened"] = nil + elseif G_reader_settings:readSetting("ignore_open_sleepcover") then + -- Just ignore wakeup events, and do NOT set is_cover_closed, + -- so device/generic/device will let us use the power button to wake ;). self.event_handlers["SleepCoverClosed"] = function() - Device.is_cover_closed = true self:suspend() end self.event_handlers["SleepCoverOpened"] = function() Device.is_cover_closed = false - self:resume() end else - -- Closing/opening the cover will still wake up the device, so we - -- need to put it back to sleep if we are in screen saver mode self.event_handlers["SleepCoverClosed"] = function() - if Device.screen_saver_mode then - self:suspend() - end + Device.is_cover_closed = true + self:suspend() + end + self.event_handlers["SleepCoverOpened"] = function() + Device.is_cover_closed = false + self:resume() end - self.event_handlers["SleepCoverOpened"] = self.event_handlers["SleepCoverClosed"] end self.event_handlers["Light"] = function() Device:getPowerDevice():toggleFrontlight()