From 455e9041200c2b8870b09b93c6a6cb71209ab711 Mon Sep 17 00:00:00 2001 From: poire-z Date: Tue, 9 Jan 2024 13:28:59 +0100 Subject: [PATCH] Text selection: add option to disable corner scroll People using 2-steps text selection (via the Select button) may want to not be annoyed by this feature. Also tweak a bit its behaviour, requiring now the text selection to come from outside a corder into a corner to activate it, which should allow starting text selection from a corner without triggering a scroll yet. --- .../apps/reader/modules/readerhighlight.lua | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 79ade0f52..418913907 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -568,6 +568,26 @@ function ReaderHighlight:addToMainMenu(menu_items) UIManager:show(items) end, }) + + table.insert(menu_items.long_press.sub_item_table, { + text = _("Auto-scroll when selection reaches a corner"), + help_text = _([[ +Auto-scroll to show part of the previous page when your text selection reaches the top left corner, or of the next page when it reaches the bottom right corner. +Except when in two columns mode, where this is limited to showing only the previous or next column.]]), + checked_func = function() + if self.ui.paging then return false end + return not self.view.highlight.disabled and G_reader_settings:nilOrTrue("highlight_corner_scroll") + end, + enabled_func = function() + if self.ui.paging then return false end + return not self.view.highlight.disabled + end, + callback = function() + G_reader_settings:flipNilOrTrue("highlight_corner_scroll") + self.allow_corner_scroll = G_reader_settings:nilOrTrue("highlight_corner_scroll") + end, + }) + -- long_press menu is under taps_and_gestures menu which is not available for non touch device -- Clone long_press menu and change label making much meaning for non touch devices if not Device:isTouchDevice() and Device:hasDPad() then @@ -1182,6 +1202,8 @@ function ReaderHighlight:onHold(arg, ges) end self.gest_pos = self.hold_pos + self.allow_hold_pan_corner_scroll = false -- reset this, don't allow that yet + -- check if we were holding on an image -- we provide want_frames=true, so we get a list of images for -- animated GIFs (supported by ImageViewer) @@ -1275,7 +1297,7 @@ function ReaderHighlight:onHoldPan(_, ges) self.holdpan_pos = self.view:screenToPageTransform(ges.pos) logger.dbg("holdpan position in page", self.holdpan_pos) - if self.ui.rolling and self.selected_text_start_xpointer then + if self.ui.rolling and self.allow_corner_scroll and self.selected_text_start_xpointer then -- With CreDocuments, allow text selection across multiple pages -- by (temporarily) switching to scroll mode when panning to the -- top left or bottom right corners. @@ -1301,7 +1323,15 @@ function ReaderHighlight:onHoldPan(_, ges) is_in_next_page_corner = self.holdpan_pos.y > 7/8*self.screen_h and self.holdpan_pos.x > 7/8*self.screen_w end - if is_in_prev_page_corner or is_in_next_page_corner then + if not self.allow_hold_pan_corner_scroll then + if not is_in_prev_page_corner and not is_in_next_page_corner then + -- We expect the user to come from a non-corner zone into a corner + -- to enable this; this allows normal highlighting without scrolling + -- if the selection is started in the corner: the user will have to + -- move out from and go back in to trigger a scroll. + self.allow_hold_pan_corner_scroll = true + end + elseif is_in_prev_page_corner or is_in_next_page_corner then self:_resetHoldTimer() if self.was_in_some_corner then -- Do nothing, wait for the user to move his finger out of that corner @@ -2117,6 +2147,8 @@ function ReaderHighlight:onReadSettings(config) self.view.highlight.disabled = G_reader_settings:has("default_highlight_action") and G_reader_settings:readSetting("default_highlight_action") == "nothing" + self.allow_corner_scroll = G_reader_settings:nilOrTrue("highlight_corner_scroll") + -- panel zoom settings isn't supported in EPUB if self.document.info.has_pages then local ext = util.getFileNameSuffix(self.ui.document.file)