[Feature]: Horizontal scroll via hold side button + main wheel for M650L and others without thumbwheel
- Dominant language
- Rust
- Stars
- 21k
- Forks
- 675
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 172
Description
### Pre-flight checklist
- [x] I searched existing issues and the [Roadmap](https://github.com/AprilNEA/OpenLogi#roadmap), and this isn't already tracked.
### Problem / motivation
**Device:** Logitech M650L (Signature M650L)
**Feature Request:**
Please add support for horizontal scrolling by holding a side button (back/forward) and using the main scroll wheel simultaneously. This is the default behavior in Logitech Options+ for the M650L, which lacks a physical thumb wheel.
**Current Behavior:**
- OpenLogi implements horizontal scroll for thumb wheels (Issue #117), but the M650L uses side buttons + main wheel instead.
- The "hold side button + scroll" combination does not produce horizontal scrolling in OpenLogi.
**Expected Behavior:**
- Holding either side button and scrolling the main wheel should scroll horizontally, matching Logitech Options+ behavior.
**Additional Context:**
- This is a mode-shifting feature, not a thumb wheel action.
- The M650L does not have a thumb wheel; horizontal scroll is achieved via button combination.
- This is a regression from Logitech Options+ for M650L users.
### Proposed solution
Implement a mode-shifting mechanism in OpenLogi for the M650L (and similar devices) that:
- Detects when a side button (Back/Forward) is held down.
- While held, reinterprets main scroll wheel events as horizontal scroll (left/right) instead of vertical.
- Releases the mode shift when the side button is released, restoring normal vertical scrolling.
- Exposes this as a configurable option in the GUI (e.g., "Enable horizontal scroll with side button + wheel") and/or via TOML (e.g., side_button_horizontal_scroll = true).
This would mirror Logitech Options+ behavior for the M650L, which lacks a thumb wheel but supports horizontal scrolling via this button combination.
### Alternatives considered
Manual TOML Binding:
Bind ScrollLeft/ScrollRight actions directly to the side buttons.
Limitation: This replaces the side button’s default function (Back/Forward) entirely and does not support the "hold + scroll" gesture.
OS-Level Automation (AutoHotkey/Keyboard Maestro):
Use third-party tools to simulate horizontal scrolling when side buttons are held.
Limitation: Adds complexity, requires external dependencies, and may not integrate cleanly with OpenLogi’s HID++ control.
Logitech Options+:
Fall back to the official software for this feature.
Limitation: Defeats the purpose of OpenLogi (bloatware, telemetry, account requirements).
Solaar (Linux):
Check if Solaar supports this for the M650L.
Limitation: Not cross-platform, and may not implement the exact "hold + scroll" behavior.
Rebinding to Keyboard Shortcuts:
Assign side buttons to OS-level horizontal scroll shortcuts (e.g., Shift+Wheel).
Limitation: Inconsistent across applications and does not replicate native horizontal scroll behavior.
### Related area(s)
- [x] GUI
- [ ] CLI
- [x] Button actions / remapping
- [ ] DPI
- [ ] SmartShift
- [ ] Per-application profiles
- [ ] Configuration (TOML)
- [ ] Auto-update
- [ ] Other
### Additional context
Happy to help and create the feature and open a PR for it
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by tracing the existing thumb-wheel horizontal scrolling described in Issue #117 and the GUI button-action/remapping paths. Check how the M650L reports side-button and main-wheel events, then define the configurable mode-shift behavior. Done means holding either side button maps wheel movement to horizontal scrolling, releasing it restores vertical scrolling, and the option works through the chosen configuration surface.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100