M720 Triathlon: device image hotspots misaligned + wheel tilt bindings not recognized in config
- Dominant language
- Rust
- Stars
- 21k
- Forks
- 675
- Avg merge
- 1d 6h
- Merged PRs (30d)
- 180
Description
## Device: M720 Triathlon (Multi-Device Mouse)
The M720 Triathlon is one of Logitech's most popular and affordable mice, but it's essentially unusable in OpenLogi 0.7.10. There are two major issues:
---
### 1. Device image hotspots completely misaligned
The `metadata.json` for the M720 depot ships with `origin` dimensions of **396×396** for all images, but the actual PNG files (`side.png`, `front.png`) are **1228×1920** / **1258×1920**.
Because OpenLogi calculates hotspot positions from the `origin` field, every button marker gets compressed into a tiny area in the center of the image — **none of the button dots line up with the actual buttons on the mouse diagram**.
**Root cause:** The Logi Options+ metadata for this device has incorrect `origin` values that don't match the shipped PNG dimensions.
**Fix needed on the server side:** Correct the `origin` values in the M720 depot's `metadata.json` to match the actual PNG dimensions (1228×1920 for side.png, 1258×1920 for front.png).
I manually fixed this locally by editing `~/.local/share/openlogi/assets/m720_triathlon/metadata.json`:
| Image key | Original origin | Corrected origin |
|---|---|---|
| `device_image` | 396×396 | 1258×1920 |
| `device_buttons_image` | 396×396 | 1228×1920 |
| `device_point_scroll_image` | 396×396 | 1228×1920 |
After the fix, the hotspots align correctly with the mouse buttons.
---
### 2. `WheelTiltLeft` / `WheelTiltRight` not recognized as config keys
The M720's scroll wheel supports left/right tilt (horizontal scroll by default). Attempting to bind these in `config.toml`:
```toml
[devices."direct:046d:b015:unit:xxxx".bindings]
WheelTiltLeft = "Copy"
WheelTiltRight = "Paste"
```
Results in a TOML parse error:
```
unknown variant `WheelTiltLeft`, expected one of `LeftClick`, `RightClick`,
`MiddleClick`, `Back`, `Forward`, `DpiToggle`, `Thumbwheel`,
`ThumbwheelScrollUp`, `ThumbwheelScrollDown`, `GestureButton`, ...
```
The `ButtonId::WheelTiltLeft` and `ButtonId::WheelTiltRight` variants exist in the source code (`crates/openlogi-core/src/binding/button.rs`), and the M720's metadata includes `SLOT_NAME_LEFT_SCROLL_BUTTON` / `SLOT_NAME_RIGHT_SCROLL_BUTTON` assignments — so the device does expose these controls. But the config deserializer doesn't accept them as binding keys.
This means **wheel tilt cannot be remapped via config** on the M720. The only way to get left/right actions on the wheel is through gesture mode (hold + swipe), which is a different interaction entirely.
---
### Summary
The M720 Triathlon is a budget Logitech mouse — it's not an MX Master. But it's one of Logi's best-selling mice, and a lot of people use it. Right now in OpenLogi:
- The button diagram doesn't match the physical mouse (wrong metadata)
- Wheel tilt bindings can't be configured (missing config keys)
You can't only support the expensive Logitech mice — the affordable ones are Logitech too. Please fix M720 support!
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with crates/openlogi-core/src/binding/button.rs and the config deserializer, then inspect the M720 depot metadata and the local metadata.json path described in the report. Confirm that the image origins match side.png and front.png dimensions and that WheelTiltLeft and WheelTiltRight are accepted as binding keys; verify both hotspot alignment and configuration parsing.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100