From 0bb14ad84b82a84a75c4fe379a03b3e5e06eea30 Mon Sep 17 00:00:00 2001 From: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com> Date: Sun, 25 May 2025 18:52:11 +0200 Subject: [PATCH] [feat] Dispatcher: Add 'Set page-turn button inversion' (#13836) Currently you can only toggle page turn buttons to inverted or not. This commit adds the ability to also have an option in dispatcher to set the value instead of just toggling. This can be useful for profiles that want to set the value rather then toggle. --- frontend/device/devicelistener.lua | 39 +++++++++++++++++++++++++----- frontend/dispatcher.lua | 6 +++-- 2 files changed, 37 insertions(+), 8 deletions(-) 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",