From 1e24a1c7a32f53329962ba503c969fcf690b800a Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Sun, 30 Oct 2022 23:05:04 +0100 Subject: [PATCH] ReaderUI: Properly neuter gesture handling from InputContainer modules None[1] of them actually rely on their own onGesture handler, they all register their own stuff to ReaderUI's. Hotfix #9710 revealed that the way this was handled didn't exactly work as expected ;). The only thing that consumes ges_events is InputContainer's onGesture method. All these modules *extend* InputContainer, but none of them *implement* a custom onGesture, so self.onGesture = nil was just a NOP, they always access InputContainer's method via inheritance. If we actively want to neuter it, we *have* to implement it in that module (with a NOP). [1] The exception being ReaderZooming, but that only when in flip mode. --- frontend/apps/reader/modules/readerbookmark.lua | 4 ++++ frontend/apps/reader/modules/readerconfig.lua | 5 +++++ frontend/apps/reader/modules/readerfont.lua | 5 +++++ frontend/apps/reader/modules/readerhighlight.lua | 9 +++++---- frontend/apps/reader/modules/readerlink.lua | 5 +++++ frontend/apps/reader/modules/readermenu.lua | 8 +++++--- frontend/apps/reader/modules/readerpaging.lua | 8 +++++--- frontend/apps/reader/modules/readerpanning.lua | 4 ++++ frontend/apps/reader/modules/readerrolling.lua | 8 +++++--- frontend/apps/reader/modules/readerrotation.lua | 4 ++++ frontend/apps/reader/modules/readertoc.lua | 5 +++++ 11 files changed, 52 insertions(+), 13 deletions(-) diff --git a/frontend/apps/reader/modules/readerbookmark.lua b/frontend/apps/reader/modules/readerbookmark.lua index 04522c0e5..10f9f61be 100644 --- a/frontend/apps/reader/modules/readerbookmark.lua +++ b/frontend/apps/reader/modules/readerbookmark.lua @@ -56,8 +56,12 @@ function ReaderBookmark:init() end self.ui.menu:registerToMainMenu(self) + -- NOP our own gesture handling + self.ges_events = nil end +function ReaderBookmark:onGesture() end + function ReaderBookmark:addToMainMenu(menu_items) menu_items.bookmarks = { text = _("Bookmarks"), diff --git a/frontend/apps/reader/modules/readerconfig.lua b/frontend/apps/reader/modules/readerconfig.lua index 079253222..f744ace10 100644 --- a/frontend/apps/reader/modules/readerconfig.lua +++ b/frontend/apps/reader/modules/readerconfig.lua @@ -28,8 +28,13 @@ function ReaderConfig:init() else self.activation_menu = "swipe_tap" end + + -- delegate gesture listener to ReaderUI, NOP our own + self.ges_events = nil end +function ReaderConfig:onGesture() end + function ReaderConfig:initGesListener() if not Device:isTouchDevice() then return end diff --git a/frontend/apps/reader/modules/readerfont.lua b/frontend/apps/reader/modules/readerfont.lua index fb1373eda..d9e06fd43 100644 --- a/frontend/apps/reader/modules/readerfont.lua +++ b/frontend/apps/reader/modules/readerfont.lua @@ -126,8 +126,13 @@ function ReaderFont:init() return self.font_face end self.ui.menu:registerToMainMenu(self) + + -- NOP our own gesture handling + self.ges_events = nil end +function ReaderFont:onGesture() end + function ReaderFont:onSetDimensions(dimen) self.dimen = dimen end diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 316283e92..3110569cf 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -230,13 +230,14 @@ function ReaderHighlight:init() self.ui:registerPostInitCallback(function() self.ui.menu:registerToMainMenu(self) end) + + -- delegate gesture listener to readerui, NOP our own + self.ges_events = nil end -function ReaderHighlight:setupTouchZones() - -- delegate gesture listener to readerui - self.ges_events = {} - self.onGesture = nil +function ReaderHighlight:onGesture() end +function ReaderHighlight:setupTouchZones() if not Device:isTouchDevice() then return end local hold_pan_rate = G_reader_settings:readSetting("hold_pan_rate") if not hold_pan_rate then diff --git a/frontend/apps/reader/modules/readerlink.lua b/frontend/apps/reader/modules/readerlink.lua index 687906f29..7f6bb089d 100644 --- a/frontend/apps/reader/modules/readerlink.lua +++ b/frontend/apps/reader/modules/readerlink.lua @@ -106,8 +106,13 @@ function ReaderLink:init() G_reader_settings:saveSetting("swipe_link_footnote_popup", nil) G_reader_settings:saveSetting("footnote_link_in_popup", true) end + + -- delegate gesture listener to readerui, NOP our own + self.ges_events = nil end +function ReaderLink:onGesture() end + function ReaderLink:onReadSettings(config) -- called when loading new document self.location_stack = {} diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index a33794e87..749433e6b 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -76,16 +76,18 @@ function ReaderMenu:init() else self.activation_menu = "swipe_tap" end + + -- delegate gesture listener to readerui, NOP our own + self.ges_events = nil end +function ReaderMenu:onGesture() end + function ReaderMenu:getPreviousFile() return require("readhistory"):getPreviousFile(self.ui.document.file) end function ReaderMenu:onReaderReady() - -- delegate gesture listener to readerui - self.ges_events = {} - self.onGesture = nil if not Device:isTouchDevice() then return end local DTAP_ZONE_MENU = G_defaults:readSetting("DTAP_ZONE_MENU") diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 802365c27..e1f3fc5f0 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -118,16 +118,18 @@ function ReaderPaging:init() end self.pan_interval = time.s(1 / self.pan_rate) self.number_of_pages = self.ui.document.info.number_of_pages + + -- delegate gesture listener to readerui, NOP our own + self.ges_events = nil end +function ReaderPaging:onGesture() end + function ReaderPaging:onReaderReady() self:setupTouchZones() end function ReaderPaging:setupTouchZones() - -- delegate gesture listener to readerui - self.ges_events = {} - self.onGesture = nil if not Device:isTouchDevice() then return end local forward_zone, backward_zone = self.view:getTapZones() diff --git a/frontend/apps/reader/modules/readerpanning.lua b/frontend/apps/reader/modules/readerpanning.lua index 05fb1bec1..fe4c38d98 100644 --- a/frontend/apps/reader/modules/readerpanning.lua +++ b/frontend/apps/reader/modules/readerpanning.lua @@ -38,8 +38,12 @@ function ReaderPanning:init() }, } end + -- NOP our own gesture handling + self.ges_events = nil end +function ReaderPanning:onGesture() end + function ReaderPanning:onSetDimensions(dimensions) self.dimen = dimensions end diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index ce17e7054..26232b7b9 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -148,8 +148,13 @@ function ReaderRolling:init() end) self.ui.menu:registerToMainMenu(self) self.batched_update_count = 0 + + -- delegate gesture listener to readerui, NOP our own + self.ges_events = nil end +function ReaderRolling:onGesture() end + function ReaderRolling:onReadSettings(config) -- 20180503: some fix in crengine has changed the way the DOM is built -- for HTML documents and may make XPATHs obtained from previous version @@ -331,9 +336,6 @@ function ReaderRolling:onReaderReady() end function ReaderRolling:setupTouchZones() - -- delegate gesture listener to readerui - self.ges_events = {} - self.onGesture = nil if not Device:isTouchDevice() then return end local forward_zone, backward_zone = self.view:getTapZones() diff --git a/frontend/apps/reader/modules/readerrotation.lua b/frontend/apps/reader/modules/readerrotation.lua index bab9b22b9..b44082b4a 100644 --- a/frontend/apps/reader/modules/readerrotation.lua +++ b/frontend/apps/reader/modules/readerrotation.lua @@ -23,8 +23,12 @@ function ReaderRotation:init() }, } end + -- NOP our own gesture handling + self.ges_events = nil end +function ReaderRotation:onGesture() end + --- @todo Reset rotation on new document, maybe on new page? function ReaderRotation:onRotate(rotate_by) diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index a80e90aa5..806b7ff41 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -55,8 +55,13 @@ function ReaderToc:init() self:resetToc() self.ui.menu:registerToMainMenu(self) + + -- NOP our own gesture handling + self.ges_events = nil end +function ReaderToc:onGesture() end + function ReaderToc:onReadSettings(config) self.toc_ticks_ignored_levels = config:readSetting("toc_ticks_ignored_levels") or {} self.toc_chapter_navigation_bind_to_ticks = config:readSetting("toc_chapter_navigation_bind_to_ticks")