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,
|
||||
'set_reference_mode': self.set_reference_mode,
|
||||
'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,
|
||||
'overlay_visibility_changed': self.on_overlay_visibility_changed,
|
||||
'show_search_result': self.show_search_result,
|
||||
@ -305,7 +305,8 @@ class IframeBoss:
|
||||
def gesture_from_margin(self, data):
|
||||
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)
|
||||
|
||||
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('touchcancel', self.touchend_on_container, {'passive': False})
|
||||
container.addEventListener('keydown', self.on_keydown, {'passive': False})
|
||||
container.addEventListener('wheel', self.on_wheel, {'passive': False})
|
||||
container.setAttribute('tabindex', '0')
|
||||
|
||||
self.dragging_handle = None
|
||||
@ -289,6 +290,8 @@ class SelectionBar:
|
||||
clear(bar_container)
|
||||
bar_container.style.maxWidth = 'min(50rem, 90vw)' if self.supports_css_min_max else '50rem'
|
||||
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 [
|
||||
E.div(style='height: 4ex; display: flex; align-items: center; padding: 5px; justify-content: center'),
|
||||
|
||||
@ -296,7 +299,7 @@ class SelectionBar:
|
||||
|
||||
E.div(
|
||||
style='display: none; padding: 5px;',
|
||||
E.div(),
|
||||
notes_container,
|
||||
)
|
||||
]:
|
||||
bar_container.appendChild(x)
|
||||
@ -545,6 +548,10 @@ class SelectionBar:
|
||||
self.end_handle_drag()
|
||||
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):
|
||||
ev.stopPropagation(), ev.preventDefault()
|
||||
if ev.key is 'Escape':
|
||||
|
@ -389,10 +389,13 @@ class View:
|
||||
|
||||
def on_margin_wheel(self, which, event):
|
||||
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'):
|
||||
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):
|
||||
self.iframe_wrapper.send_message('gesture_from_margin', gesture=gesture)
|
||||
|
Loading…
x
Reference in New Issue
Block a user