From 617ed2c0782944efad48e16063a88bc785aa2e61 Mon Sep 17 00:00:00 2001 From: gbyl <71516803+gbyl@users.noreply.github.com> Date: Thu, 22 Apr 2021 11:35:08 -0500 Subject: [PATCH] Gestures: Allow disabling tap and/or swipes for page turns (#7572) Co-authored-by: gbyl Co-authored-by: NiLuJe --- frontend/apps/reader/modules/readerpaging.lua | 38 ++++++++++++------- .../apps/reader/modules/readerrolling.lua | 36 ++++++++++++------ .../elements/common_settings_menu_table.lua | 1 + .../ui/elements/filemanager_menu_order.lua | 1 + frontend/ui/elements/page_turns.lua | 25 ++++++++++++ frontend/ui/elements/reader_menu_order.lua | 1 + 6 files changed, 77 insertions(+), 25 deletions(-) create mode 100644 frontend/ui/elements/page_turns.lua diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 927b4a578..791f84fad 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -132,13 +132,21 @@ function ReaderPaging:setupTapTouchZones() id = "tap_forward", ges = "tap", screen_zone = forward_zone, - handler = function() return self:onGotoViewRel(1) end, + handler = function() + if G_reader_settings:nilOrFalse("page_turns_disable_tap") then + return self:onGotoViewRel(1) + end + end, }, { id = "tap_backward", ges = "tap", screen_zone = backward_zone, - handler = function() return self:onGotoViewRel(-1) end, + handler = function() + if G_reader_settings:nilOrFalse("page_turns_disable_tap") then + return self:onGotoViewRel(-1) + end + end, }, }) end @@ -159,7 +167,7 @@ function ReaderPaging:setupTouchZones() screen_zone = { ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1, }, - handler = function(ges) return self:onSwipe(nil, ges) end + handler = function(ges) return self:onSwipe(nil, ges) end, }, { id = "paging_pan", @@ -168,7 +176,7 @@ function ReaderPaging:setupTouchZones() screen_zone = { ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1, }, - handler = function(ges) return self:onPan(nil, ges) end + handler = function(ges) return self:onPan(nil, ges) end, }, { id = "paging_pan_release", @@ -176,7 +184,7 @@ function ReaderPaging:setupTouchZones() screen_zone = { ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1, }, - handler = function(ges) return self:onPanRelease(nil, ges) end + handler = function(ges) return self:onPanRelease(nil, ges) end, }, }) end @@ -418,16 +426,20 @@ function ReaderPaging:onSwipe(_, ges) elseif self.page_flipping_mode and self.original_page then self:_gotoPage(self.original_page) elseif direction == "west" then - if self.inverse_reading_order then - self:onGotoViewRel(-1) - else - self:onGotoViewRel(1) + if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then + if self.inverse_reading_order then + self:onGotoViewRel(-1) + else + self:onGotoViewRel(1) + end end elseif direction == "east" then - if self.inverse_reading_order then - self:onGotoViewRel(1) - else - self:onGotoViewRel(-1) + if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then + if self.inverse_reading_order then + self:onGotoViewRel(1) + else + self:onGotoViewRel(-1) + end end else -- update footer (time & battery) diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index dd36ba2c3..aa8e79689 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -349,13 +349,21 @@ function ReaderRolling:setupTouchZones() id = "tap_forward", ges = "tap", screen_zone = forward_zone, - handler = function() return self:onGotoViewRel(1) end, + handler = function() + if G_reader_settings:nilOrFalse("page_turns_disable_tap") then + return self:onGotoViewRel(1) + end + end, }, { id = "tap_backward", ges = "tap", screen_zone = backward_zone, - handler = function() return self:onGotoViewRel(-1) end, + handler = function() + if G_reader_settings:nilOrFalse("page_turns_disable_tap") then + return self:onGotoViewRel(-1) + end + end, }, { id = "rolling_swipe", @@ -363,7 +371,7 @@ function ReaderRolling:setupTouchZones() screen_zone = { ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1, }, - handler = function(ges) return self:onSwipe(nil, ges) end + handler = function(ges) return self:onSwipe(nil, ges) end, }, { id = "rolling_pan", @@ -372,7 +380,7 @@ function ReaderRolling:setupTouchZones() screen_zone = { ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1, }, - handler = function(ges) return self:onPan(nil, ges) end + handler = function(ges) return self:onPan(nil, ges) end, }, }) end @@ -509,16 +517,20 @@ end function ReaderRolling:onSwipe(_, ges) local direction = BD.flipDirectionIfMirroredUILayout(ges.direction) if direction == "west" then - if self.inverse_reading_order then - self:onGotoViewRel(-1) - else - self:onGotoViewRel(1) + if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then + if self.inverse_reading_order then + self:onGotoViewRel(-1) + else + self:onGotoViewRel(1) + end end elseif direction == "east" then - if self.inverse_reading_order then - self:onGotoViewRel(1) - else - self:onGotoViewRel(-1) + if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then + if self.inverse_reading_order then + self:onGotoViewRel(1) + else + self:onGotoViewRel(-1) + end end else -- update footer (time & battery) diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index 10560fe25..bf2e5c2e3 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -199,6 +199,7 @@ common_settings.screen_rotation = require("ui/elements/screen_rotation_menu_tabl common_settings.screen_dpi = require("ui/elements/screen_dpi_menu_table") common_settings.screen_eink_opt = require("ui/elements/screen_eink_opt_menu_table") common_settings.menu_activate = require("ui/elements/menu_activate") +common_settings.page_turns = require("ui/elements/page_turns") common_settings.screen_disable_double_tab = require("ui/elements/screen_disable_double_tap_table") common_settings.ignore_hold_corners = { text = _("Ignore hold on corners"), diff --git a/frontend/ui/elements/filemanager_menu_order.lua b/frontend/ui/elements/filemanager_menu_order.lua index f034995ca..4619cdb8f 100644 --- a/frontend/ui/elements/filemanager_menu_order.lua +++ b/frontend/ui/elements/filemanager_menu_order.lua @@ -90,6 +90,7 @@ local order = { "gesture_intervals", "----------------------------", "menu_activate", + "page_turns", "ignore_hold_corners", "screen_disable_double_tab", }, diff --git a/frontend/ui/elements/page_turns.lua b/frontend/ui/elements/page_turns.lua new file mode 100644 index 000000000..2e45d661c --- /dev/null +++ b/frontend/ui/elements/page_turns.lua @@ -0,0 +1,25 @@ +local _ = require("gettext") + +return { + text = _("Page turns"), + sub_item_table = { + { + text = _("Disable taps"), + checked_func = function() + return G_reader_settings:isTrue("page_turns_disable_tap") + end, + callback = function() + G_reader_settings:toggle("page_turns_disable_tap") + end + }, + { + text = _("Disable swipes"), + checked_func = function() + return G_reader_settings:isTrue("page_turns_disable_swipe") + end, + callback = function() + G_reader_settings:toggle("page_turns_disable_swipe") + end + }, + } +} diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index 531f65bd0..16366535c 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -133,6 +133,7 @@ local order = { "follow_links", "----------------------------", "menu_activate", + "page_turns", "ignore_hold_corners", "screen_disable_double_tab", },