AprilNEA / AprilNEA/OpenLogi

M720 Triathlon: device image hotspots misaligned + wheel tilt bindings not recognized in config

Open
#995 1 comment 8 reactions 0 assignees View on GitHub
area: gui platform: all type: bug
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.