First-consumer finding from DeslanStudio milestone 4c (arrangement timeline), #561–#567 series.
dispatch's wheel path routes exclusively through _find_scrollable_at + _scroll_panels, which consult the registry scroll entry. canvas registers "scroll": null, and there is no on_wheel callback on the widget, so a custom-painted widget can never observe wheel input — confirmed with the headless repro from #567 (a {"type": "wheel", ...} dispatch over the canvas delivers nothing).
What this blocks in a custom timeline/editor: wheel scroll, ctrl+wheel zoom-at-cursor, shift+wheel horizontal scroll (the upstream Qt arrangement view uses all three), and any vertical scrolling of a canvas that draws stacked content (track lanes) — scroll_panel doesn't help because a canvas child's cached _ax/_ay don't account for the panel's scroll offset, so the canvas's own mouse math goes stale under scroll.
DeslanStudio's 4c workaround, ledgered: toolbar buttons for zoom in/out/fit and horizontal scroll; no vertical timeline scroll (the default tab height fits ~10 tracks at 60px).
Suggested shape: an optional on_wheel(widget, ev) widget callback checked before the scrollable walk (mirrors how on_mouse works for mousedown), so custom widgets can consume wheel input; modifier fields on the wheel event would pair with #568.
First-consumer finding from DeslanStudio milestone 4c (arrangement timeline), #561–#567 series.
dispatch's wheel path routes exclusively through_find_scrollable_at+_scroll_panels, which consult the registryscrollentry.canvasregisters"scroll": null, and there is noon_wheelcallback on the widget, so a custom-painted widget can never observe wheel input — confirmed with the headless repro from #567 (a{"type": "wheel", ...}dispatch over the canvas delivers nothing).What this blocks in a custom timeline/editor: wheel scroll, ctrl+wheel zoom-at-cursor, shift+wheel horizontal scroll (the upstream Qt arrangement view uses all three), and any vertical scrolling of a canvas that draws stacked content (track lanes) —
scroll_paneldoesn't help because a canvas child's cached_ax/_aydon't account for the panel's scroll offset, so the canvas's own mouse math goes stale under scroll.DeslanStudio's 4c workaround, ledgered: toolbar buttons for zoom in/out/fit and horizontal scroll; no vertical timeline scroll (the default tab height fits ~10 tracks at 60px).
Suggested shape: an optional
on_wheel(widget, ev)widget callback checked before the scrollable walk (mirrors howon_mouseworks for mousedown), so custom widgets can consume wheel input; modifier fields on the wheel event would pair with #568.