mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Viewer: Fix mouse wheel not working while selection bar is visible
Fixes #1898413 [Viewer: some mouse actions with popup bar displayed should be changed](https://bugs.launchpad.net/calibre/+bug/1898413)
This commit is contained in:
parent
8bd7109300
commit
5bf8e926b6
@ -137,7 +137,7 @@ class IframeBoss:
|
|||||||
'scroll_to_ref': self.on_scroll_to_ref,
|
'scroll_to_ref': self.on_scroll_to_ref,
|
||||||
'set_reference_mode': self.set_reference_mode,
|
'set_reference_mode': self.set_reference_mode,
|
||||||
'toggle_autoscroll': self.toggle_autoscroll,
|
'toggle_autoscroll': self.toggle_autoscroll,
|
||||||
'wheel_from_margin': self.wheel_from_margin,
|
'fake_wheel_event': self.fake_wheel_event,
|
||||||
'window_size': self.received_window_size,
|
'window_size': self.received_window_size,
|
||||||
'overlay_visibility_changed': self.on_overlay_visibility_changed,
|
'overlay_visibility_changed': self.on_overlay_visibility_changed,
|
||||||
'show_search_result': self.show_search_result,
|
'show_search_result': self.show_search_result,
|
||||||
@ -305,7 +305,8 @@ class IframeBoss:
|
|||||||
def gesture_from_margin(self, data):
|
def gesture_from_margin(self, data):
|
||||||
self.handle_gesture(data.gesture)
|
self.handle_gesture(data.gesture)
|
||||||
|
|
||||||
def wheel_from_margin(self, data):
|
def fake_wheel_event(self, data):
|
||||||
|
# these are wheel events from margin or selection mode
|
||||||
self.onwheel(data.evt)
|
self.onwheel(data.evt)
|
||||||
|
|
||||||
def report_human_scroll(self, scrolled_by_frac):
|
def report_human_scroll(self, scrolled_by_frac):
|
||||||
|
@ -247,6 +247,7 @@ class SelectionBar:
|
|||||||
container.addEventListener('touchend', self.touchend_on_container, {'passive': False})
|
container.addEventListener('touchend', self.touchend_on_container, {'passive': False})
|
||||||
container.addEventListener('touchcancel', self.touchend_on_container, {'passive': False})
|
container.addEventListener('touchcancel', self.touchend_on_container, {'passive': False})
|
||||||
container.addEventListener('keydown', self.on_keydown, {'passive': False})
|
container.addEventListener('keydown', self.on_keydown, {'passive': False})
|
||||||
|
container.addEventListener('wheel', self.on_wheel, {'passive': False})
|
||||||
container.setAttribute('tabindex', '0')
|
container.setAttribute('tabindex', '0')
|
||||||
|
|
||||||
self.dragging_handle = None
|
self.dragging_handle = None
|
||||||
@ -289,6 +290,8 @@ class SelectionBar:
|
|||||||
clear(bar_container)
|
clear(bar_container)
|
||||||
bar_container.style.maxWidth = 'min(50rem, 90vw)' if self.supports_css_min_max else '50rem'
|
bar_container.style.maxWidth = 'min(50rem, 90vw)' if self.supports_css_min_max else '50rem'
|
||||||
bar_container.style.backgroundColor = get_color("window-background")
|
bar_container.style.backgroundColor = get_color("window-background")
|
||||||
|
notes_container = E.div()
|
||||||
|
notes_container.addEventListener('wheel', def(evt): evt.stopPropagation();, {'passive': True})
|
||||||
for x in [
|
for x in [
|
||||||
E.div(style='height: 4ex; display: flex; align-items: center; padding: 5px; justify-content: center'),
|
E.div(style='height: 4ex; display: flex; align-items: center; padding: 5px; justify-content: center'),
|
||||||
|
|
||||||
@ -296,7 +299,7 @@ class SelectionBar:
|
|||||||
|
|
||||||
E.div(
|
E.div(
|
||||||
style='display: none; padding: 5px;',
|
style='display: none; padding: 5px;',
|
||||||
E.div(),
|
notes_container,
|
||||||
)
|
)
|
||||||
]:
|
]:
|
||||||
bar_container.appendChild(x)
|
bar_container.appendChild(x)
|
||||||
@ -545,6 +548,10 @@ class SelectionBar:
|
|||||||
self.end_handle_drag()
|
self.end_handle_drag()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def on_wheel(self, ev):
|
||||||
|
ev.stopPropagation(), ev.preventDefault()
|
||||||
|
self.view.send_wheel_event_to_iframe(ev, 'selection-mode')
|
||||||
|
|
||||||
def on_keydown(self, ev):
|
def on_keydown(self, ev):
|
||||||
ev.stopPropagation(), ev.preventDefault()
|
ev.stopPropagation(), ev.preventDefault()
|
||||||
if ev.key is 'Escape':
|
if ev.key is 'Escape':
|
||||||
|
@ -389,10 +389,13 @@ class View:
|
|||||||
|
|
||||||
def on_margin_wheel(self, which, event):
|
def on_margin_wheel(self, which, event):
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
evt = {}
|
self.send_wheel_event_to_iframe(event, f'margin-{which}')
|
||||||
|
|
||||||
|
def send_wheel_event_to_iframe(self, event, location):
|
||||||
|
evt = {'location': location}
|
||||||
for attr in ('deltaX', 'deltaY', 'deltaMode', 'altKey', 'ctrlKey', 'shiftKey', 'metaKey'):
|
for attr in ('deltaX', 'deltaY', 'deltaMode', 'altKey', 'ctrlKey', 'shiftKey', 'metaKey'):
|
||||||
evt[attr] = event[attr]
|
evt[attr] = event[attr]
|
||||||
self.iframe_wrapper.send_message('wheel_from_margin', evt=evt)
|
self.iframe_wrapper.send_message('fake_wheel_event', evt=evt)
|
||||||
|
|
||||||
def forward_gesture(self, gesture):
|
def forward_gesture(self, gesture):
|
||||||
self.iframe_wrapper.send_message('gesture_from_margin', gesture=gesture)
|
self.iframe_wrapper.send_message('gesture_from_margin', gesture=gesture)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user