diff --git a/frontend/device/devicelistener.lua b/frontend/device/devicelistener.lua index 96120b9b2..759d296ae 100644 --- a/frontend/device/devicelistener.lua +++ b/frontend/device/devicelistener.lua @@ -5,6 +5,7 @@ local Notification = require("ui/widget/notification") local Screen = Device.screen local UIManager = require("ui/uimanager") local bit = require("bit") +local logger = require("logger") local _ = require("gettext") local T = require("ffi/util").template @@ -342,8 +343,7 @@ function DeviceListener:onSwapPageTurnButtons(side) if side == "left" then -- Revert any prior global inversions first, as we could end up with an all greyed out menu. if G_reader_settings:isTrue("input_invert_page_turn_keys") then - G_reader_settings:makeFalse("input_invert_page_turn_keys") - Device:invertButtons() + self:setPageTurnButtonDirection(true) end G_reader_settings:flipNilOrFalse("input_invert_left_page_turn_keys") Device:invertButtonsLeft() @@ -355,8 +355,7 @@ function DeviceListener:onSwapPageTurnButtons(side) elseif side == "right" then -- Revert any prior global inversions first, as we could end up with an all greyed out menu. if G_reader_settings:isTrue("input_invert_page_turn_keys") then - G_reader_settings:makeFalse("input_invert_page_turn_keys") - Device:invertButtons() + self:setPageTurnButtonDirection(true) end G_reader_settings:flipNilOrFalse("input_invert_right_page_turn_keys") Device:invertButtonsRight() @@ -370,8 +369,7 @@ function DeviceListener:onSwapPageTurnButtons(side) if G_reader_settings:isTrue("input_invert_left_page_turn_keys") and G_reader_settings:isTrue("input_invert_right_page_turn_keys") then G_reader_settings:makeFalse("input_invert_left_page_turn_keys") G_reader_settings:makeFalse("input_invert_right_page_turn_keys") - G_reader_settings:makeFalse("input_invert_page_turn_keys") - Device:invertButtons() + self:setPageTurnButtonDirection(true) new_text = _("Page-turn buttons no longer inverted.") Notification:notify(new_text) return true @@ -394,6 +392,35 @@ function DeviceListener:onSwapPageTurnButtons(side) return true end +-- @param invert bool if the page turn buttons should be set to inverted or not +function DeviceListener:setPageTurnButtonDirection(invert) + local setting = G_reader_settings:readSetting("input_invert_page_turn_keys") + if invert == setting then + return + end + G_reader_settings:saveSetting("input_invert_page_turn_keys", invert) + Device:invertButtons() +end + +-- @param invert bool if the page turn buttons should be set to inverted or not +function DeviceListener:onSetPageTurnButtonDirection(invert) + local setting = G_reader_settings:readSetting("input_invert_page_turn_keys") + logger.dbg("DeviceListener:onSetPageTurnButtonDirection", invert, setting) + if invert == setting then + logger.dbg("DeviceListener:onSetPageTurnButtonDirection", "not toggling page turn buttons") + return + end + logger.dbg("DeviceListener:onSetPageTurnButtonDirection", "toggling page turn buttons") + self:setPageTurnButtonDirection(invert) + local text + if invert then + text = _("Page-turn buttons inverted.") + else + text = _("Page-turn buttons no longer inverted.") + end + Notification:notify(text) +end + function DeviceListener:onToggleKeyRepeat(toggle) if toggle == true then G_reader_settings:makeFalse("input_no_key_repeat") diff --git a/frontend/dispatcher.lua b/frontend/dispatcher.lua index 5f89e3712..9113ea317 100644 --- a/frontend/dispatcher.lua +++ b/frontend/dispatcher.lua @@ -86,7 +86,8 @@ local settingsList = { ---- swap_left_page_turn_buttons = {category="none", event="SwapPageTurnButtons", arg="left", title=_("Invert left-side page-turn buttons"), device=true, condition= Device:hasDPad() and Device:useDPadAsActionKeys()}, swap_right_page_turn_buttons = {category="none", event="SwapPageTurnButtons", arg="right", title=_("Invert right-side page-turn buttons"), device=true, condition= Device:hasDPad() and Device:useDPadAsActionKeys()}, - swap_page_turn_buttons = {category="none", event="SwapPageTurnButtons", title=_("Invert page-turn buttons"), device=true, condition=Device:hasKeys(), separator=true}, + swap_page_turn_buttons = {category="none", event="SwapPageTurnButtons", title=_("Invert page-turn buttons"), device=true, condition=Device:hasKeys()}, + set_page_turn_buttons = {category="string", event="SetPageTurnButtonDirection", title=_("Set page-turn button inversion"), device=true, condition=Device:hasKeys(), args = {true, false}, toggle = { _("on"), _("off")}, separator=true}, ---- toggle_key_repeat = {category="none", event="ToggleKeyRepeat", title=_("Toggle key repeat"), device=true, condition=Device:hasKeys() and Device:canKeyRepeat(), separator=true}, toggle_gsensor = {category="none", event="ToggleGSensor", title=_("Toggle accelerometer"), device=true, condition=Device:hasGSensor()}, @@ -323,9 +324,10 @@ local dispatcher_menu_order = { "touch_input_off", "toggle_touch_input", ---- - "swap_page_turn_buttons", "swap_left_page_turn_buttons", "swap_right_page_turn_buttons", + "swap_page_turn_buttons", + "set_page_turn_buttons", ---- "toggle_key_repeat", "toggle_gsensor",