refactor(agent): carry a native wheel-mode write as WheelModeChange
The configured wheel mode travelled from the orchestrator to the hardware writers as `(Option<ScrollResolution>, Option<bool>)`, and the four cases of that pair were matched onto the three HiResWheel writes twice: in `apply_wheel_mode` for the volatile reapply, and in `write_scroll_wheel_mode_in_background` beside a private `ScrollWheelModeChange` that only that function used. `hardware::WheelModeChange` is that enum made public, with the one match in `WheelModeChange::new` (which returns `None` when neither setting is configured) and the one write in `apply_on`. `configured_wheel_mode` returns `Option<WheelModeChange>`, so "nothing to write" is decided where the capabilities and the config are read; the writer no longer has a no-op case, and its skip log moved to the orchestrator with it. The wheel log lines carry `change=` instead of separate `resolution=` and `inverted=` fields. A truth-table test covers the four cases, including the one the orchestrator's tests do not reach (both set) and `Some(false)`, which is a configured inversion rather than an absent one. Guard: agent-wheel-mode-change-owner flags a `set_scroll_*_on` call in the agent crates outside `impl WheelModeChange` (6 hits on the parent tree, 0 here).
A
AprilNEA committed
04faf44b7a66f0021b4e47f91b54665b29478f65
Parent: 4aa0eec