From 2592198a8250719bf8f2f727d2b4ddaeaf8e2ad2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 4 Jul 2020 13:02:50 +0530 Subject: [PATCH] Viewer: Fix wheel mice that generate line scroll events per click requiring multiple wheel clicks to turn a page in paged mode. Fixes #1886231 [In 4.20 viewer, mouse wheel scroll is malfunctioning in paged mode](https://bugs.launchpad.net/calibre/+bug/1886231) --- src/pyj/read_book/paged_mode.pyj | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/pyj/read_book/paged_mode.pyj b/src/pyj/read_book/paged_mode.pyj index efa3490376..b23f7ebd12 100644 --- a/src/pyj/read_book/paged_mode.pyj +++ b/src/pyj/read_book/paged_mode.pyj @@ -548,30 +548,27 @@ class HandleWheel: self.last_event_mode = 'page' self.last_event_at = -10000 self.last_event_backwards = False - self.accumlated_scroll = 0 + self.accumulated_scroll = 0 def onwheel(self, evt): if not evt.deltaY: return backward = evt.deltaY < 0 - WheelEvent = window.WheelEvent - if evt.deltaMode is WheelEvent.DOM_DELTA_PAGE: - self.do_scroll(backward) + if evt.deltaMode is window.WheelEvent.DOM_DELTA_PIXEL: + self.add_pixel_scroll(backward, Math.abs(evt.deltaY)) else: - self.add_event(backward, Math.abs(evt.deltaY), 'line' if evt.deltaMode is WheelEvent.DOM_DELTA_LINE else 'pixel') + self.do_scroll(backward) - def add_event(self, backward, deltaY, mode): + def add_pixel_scroll(self, backward, deltaY): now = window.performance.now() - if now - self.last_event_at > 1000 or self.last_event_backwards is not backward or self.last_event_mode is not mode: - self.accumlated_scroll = 0 - self.last_event_mode = mode + if now - self.last_event_at > 1000 or self.last_event_backwards is not backward or self.last_event_mode is not 'pixel': + self.accumulated_scroll = 0 + self.last_event_mode = 'pixel' self.last_event_at = now self.last_event_backwards = backward + self.accumulated_scroll += deltaY lh = line_height() - if mode is 'line': - deltaY *= lh - self.accumlated_scroll += deltaY - if self.accumlated_scroll > 5 * lh: + if self.accumulated_scroll > 5 * lh: self.do_scroll(backward) def do_scroll(self, backward):