fix: divert thumbwheel for rotation rebinds even without single-tap capability - #415
Open
tagawa0525 wants to merge 2 commits into
Open
fix: divert thumbwheel for rotation rebinds even without single-tap capability#415tagawa0525 wants to merge 2 commits into
tagawa0525 wants to merge 2 commits into
Conversation
Author
|
Both stale doc comments flagged by the review are updated in 6304f4b — the module-level doc and the |
…apability arm_controls refused to divert the thumb wheel unless getThumbwheelInfo reported the single-tap capability. Rotation rebinds and the sensitivity multiplier need the diverted event stream too, and devices like the MX Master 4 report no single-tap bit — leaving ThumbwheelScrollUp/Down bindings silently inert. Divert whenever capture is requested; a missing single tap now only means a bound click can never fire. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N76prZoUHMrHZajXq4jET1
Review follow-up: the module-level doc and the CapturedInput::Scroll doc still described diversion as click-bound-only. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N76prZoUHMrHZajXq4jET1
tagawa0525
force-pushed
the
fix-thumbwheel-divert-without-single-tap
branch
from
July 18, 2026 14:33
6304f4b to
45a22e5
Compare
tagawa0525
added a commit
to tagawa0525/OpenLogi
that referenced
this pull request
Jul 19, 2026
…ilNEA#415) ## Why On wheels that report no single-tap capability (e.g. MX Master 4), the thumbwheel was never diverted, so rotation rebinds and the sensitivity multiplier silently did nothing. ## What Divert the thumb wheel whenever capture is requested, not only when the wheel advertises single-tap; lacking the tap only means a bound click can never fire. ## Impact openlogi-hid capture path; MX Master 4 thumbwheel rotation rebinds and sensitivity start working. Upstream PR AprilNEA#415.
tagawa0525
added a commit
to tagawa0525/OpenLogi
that referenced
this pull request
Jul 19, 2026
## Why Capture previously followed only the GUI's selected device: bindings on any other online device did nothing, and a selection switch tore down and re-armed the single session. ## What Every online device gets its own capture session, driven by per-device capture plans (config + inventory) that carry the device's own binding maps; inputs dispatch against the plan of the session they arrived on. Includes the per-device manage toggle, per-device thumbwheel sensitivity / DPI cycle state, the plain divert of a single-bound gesture button, session-teardown draining, plan republish on app switch, the capture-channel slot ownership fix, and the Linux evdev/devenv fixes made along the way. The AprilNEA#415 thumbwheel divert fix is stacked underneath this branch and arrives with it. ## Impact openlogi-agent-core watchers, openlogi-hid capture, GUI gallery ring. Upstream PRs AprilNEA#415 + AprilNEA#419 (in review; merged at the current tip).
tagawa0525
added a commit
to tagawa0525/OpenLogi
that referenced
this pull request
Jul 25, 2026
## Why Capture previously followed only the GUI's selected device: bindings on any other online device did nothing, and a selection switch tore down and re-armed the single session. ## What Every online device gets its own capture session, driven by per-device capture plans (config + inventory) that carry the device's own binding maps; inputs dispatch against the plan of the session they arrived on. Includes the per-device manage toggle, per-device thumbwheel sensitivity / DPI cycle state, the plain divert of a single-bound gesture button, session-teardown draining, plan republish on app switch, the capture-channel slot ownership fix, and the Linux evdev fix made along the way. The AprilNEA#415 thumbwheel divert fix is stacked underneath this branch and arrives with it; the devenv fixes ride in their own branch merged just before this one. ## Impact openlogi-agent-core watchers, openlogi-hid capture, GUI gallery ring. Upstream PRs AprilNEA#415 + AprilNEA#419 are still open; this merges a copy of the branch rebased onto the current origin/master — the PR branches themselves are left untouched (and therefore unmerged here).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
On an MX Master 4, rebinding the thumbwheel rotation (
ThumbwheelScrollUp/ThumbwheelScrollDown) or changing the thumbwheel sensitivity has no effect — silently. The GUI accepts and persists the config,reload_configgoes through, the capture session restarts, but the wheel keeps scrolling natively in both directions.Root cause
arm_controlsinopenlogi-hid/src/gesture.rsonly diverts the thumb wheel over0x2150whengetThumbwheelInforeports the single-tap capability:The MX Master 4 does not set that capability bit (verified on hardware — Bolt receiver, feature
0x2150v0 present at index 19; getInfo byte 5 has0x08clear). Its thumb area was reworked into a haptic pad, which already behaves differently over HID++ elsewhere (see #313), so the missing bit is plausibly genuine rather than a firmware reporting bug.But single-tap support only matters for capturing the wheel's click. Rotation rebinds and the sensitivity multiplier need the diverted event stream too —
thumbwheel_armed()inopenlogi-agent-corecorrectly requests capture for them — and the arming side then silently refuses. The user gets no error anywhere: just a debug-level line, and settings that appear to do nothing. This affects every platform equally; it just hasn't been visible because MX Master 3/3S report the bit and arm fine.Fix
Divert whenever capture was requested, regardless of the single-tap capability. A missing single tap now only means a bound click can never fire (the
single_tapevent bit simply never arrives), which is the accurate scope of the limitation. Doc comments updated to match.Behavior is unchanged for wheels that do report single tap.
If the original gate was intentional (avoid suppressing native scroll on wheels where re-synthesis was considered untested), I'd argue the inconsistency should then be fixed on the
thumbwheel_armed()side instead — requesting capture and silently not arming is the worst of both. Happy to rework in that direction if preferred.Verification
On real hardware (MX Master 4, slot 2 on a Bolt receiver, Linux/Wayland):
Before — with
ThumbwheelScrollUp = "HorizontalScrollLeft"saved and reloaded:After:
and the wheel behaves as configured (both rotation rebinds and the sensitivity multiplier now apply).
cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings, andcargo test --workspaceall pass.🤖 Generated with Claude Code
https://claude.ai/code/session_01N76prZoUHMrHZajXq4jET1