From 5bc18b3c783b792877df3920347f22fc5104b5cf Mon Sep 17 00:00:00 2001 From: poire-z Date: Mon, 26 Feb 2018 17:25:34 +0100 Subject: [PATCH] [fix] Long Hold on DjVu/PDF documents crash (#3697) Holding on a word for more than 3s should bring the highlight menu. It crashed on readerpaging documents because self.hold_pos is no more a Geom object with them. Also inverted selected_word/selected_text logic, as with PDF, selected_word stays set when selected_text is available. --- frontend/apps/reader/modules/readerhighlight.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 9b2aa5c35..92bbd7727 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -260,6 +260,7 @@ function ReaderHighlight:onHold(arg, ges) -- disable hold gesture if highlighting is disabled if self.view.highlight.disabled then return true end self:clear() -- clear previous highlight (delayed clear may not have done it yet) + self.hold_ges_pos = ges.pos -- remember hold original gesture position self.hold_pos = self.view:screenToPageTransform(ges.pos) logger.dbg("hold position in page", self.hold_pos) if not self.hold_pos then @@ -375,13 +376,10 @@ function ReaderHighlight:onHoldRelease() -- if we were holding for more than 3 seconds on a word, make -- it behave like we panned and selected more words, so we can -- directly access the highlight menu and avoid a dict lookup - self:onHoldPan(nil, {pos=self.hold_pos}) + self:onHoldPan(nil, {pos=self.hold_ges_pos}) end end - if self.selected_word then - self:lookup(self.selected_word, self.selected_link) - self.selected_word = nil - elseif self.selected_text then + if self.selected_text then logger.dbg("show highlight dialog") self.highlight_dialog = ButtonDialog:new{ buttons = { @@ -460,6 +458,9 @@ function ReaderHighlight:onHoldRelease() tap_close_callback = function() self:handleEvent(Event:new("Tap")) end, } UIManager:show(self.highlight_dialog) + elseif self.selected_word then + self:lookup(self.selected_word, self.selected_link) + self.selected_word = nil end return true end