Skip to content

lib/ui: wheel events cannot reach a canvas — no on_wheel seam, registry scroll is scroll_panel-shaped #569

Description

@InauguralPhysicist

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions