[Bug]: Gesture button quick swipes are ignored or treated as Click — make hold-time threshold configurable
- Dominant language
- Rust
- Stars
- 21k
- Forks
- 675
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 172
Description
### Pre-flight checklist
- [x] I searched [existing issues](https://github.com/AprilNEA/OpenLogi/issues?q=is%3Aissue) and this is not a duplicate.
- [x] I am on the [latest release](https://github.com/AprilNEA/OpenLogi/releases/latest) or a recent `master` build.
- [x] I quit **Logi Options+** before running OpenLogi (the two apps fight over HID++ access and only one can own a receiver at a time).
### Which part of OpenLogi?
GUI (desktop app)
### OpenLogi version
0.8.0
### Operating system
macOS
### OS version & architecture
26.6.2
### Device model
MX Master 3
### How is the device connected?
Logi Bolt receiver
### Affected area(s)
- [ ] Device discovery / detection
- [x] Button remapping
- [ ] DPI control
- [ ] SmartShift
- [ ] Per-application profiles
- [ ] Battery status
- [x] Settings / configuration (TOML)
- [ ] Auto-update
- [ ] Menu bar / tray
- [ ] Other
### What happened?
On macOS with an MX Master 3, quick thumb-button gestures are often not recognized correctly.
I mapped GestureButton Left/Right to Previous/Next Desktop. If I press the thumb button, immediately flick left/right, and release quickly, OpenLogi often either does nothing or triggers the Click action instead.
If I perform exactly the same gesture but keep the button held slightly longer, it works reliably.
This is noticeably different from Logitech Options+, where quick press + flick + release gestures are recognized consistently and desktop switching feels instantaneous.
Expected behavior:
A swipe that clearly exceeds the movement threshold should be recognized even when the button was held only briefly.
It would also be very useful if the minimum gesture hold duration / swipe threshold could be configured in TOML, so users can tune the balance between quick gesture recognition and accidental activation.
### Steps to reproduce
1. Connect an MX Master 3 to macOS and configure the thumb GestureButton:
- Click → any easily noticeable action
- Left → Previous Desktop
- Right → Next Desktop
2. Press the GestureButton and immediately flick the mouse left or right, then release the button quickly.
3. Repeat the quick `press + flick + release` gesture several times.
4. Observe that some quick swipes are either ignored or interpreted as the configured Click action.
5. Repeat the same gesture while deliberately holding the GestureButton slightly longer before releasing it.
6. Observe that the Left/Right gesture is then recognized reliably and the desktop switches correctly.
### Diagnostics report
```markdown
### OpenLogi Diagnostics
**App**
- OpenLogi (GUI): v0.8.0 (release)
- Agent: v0.8.0 (connected)
- IPC protocol: GUI 28 / agent 28
- Inventory: ready
- OS: macOS 26.6.2 (arm64)
- Locale: zh-Hans-US (UI: follow system)
- Accessibility: granted · Input hook: installed
- Launch at login: yes · Menu bar: no · Update check: on
- Running from: source build (dev)
- Config: schema 6 · 2 configured device(s) · thumbwheel 14
**Assets**
- Source: user cache · Index: loaded (210 models) · User cache: present
- Cache path: ~/.local/share/openlogi/assets · Bundle assets: absent
**Devices (2)**
- K780 — keyboard (codename: K780 Multi-Device Wireless Keyboard)
- Connection: Logi Unifying receiver · Online: yes · Battery: 90% (discharging, full)
- Capabilities: buttons=yes, pointer=no, lighting=no
- DPI: unsupported
- Model: 0b33b (wpid: 405b, model-ids: b33b/405b/0000, ext-model: 00)
- Transports: eQuad, BTLE
- Render: k780 · Slot 1
- MX Master 3 — mouse (codename: Wireless Mouse MX Master 3)
- Connection: Logi Unifying receiver · Online: yes · Battery: 20% (discharging, low)
- Capabilities: buttons=yes, pointer=yes, lighting=no
- Model: 0b023 (wpid: 4082, model-ids: b023/4082/0000, ext-model: 00)
- Transports: eQuad, BTLE
- Render: mx_master_3 · Slot 3
**Receivers (1)**
- Unifying Receiver (VID 046d / PID c52b)
```
### `openlogi list` output
```text
2026-08-26T04:09:22.076238Z DEBUG RPC{rpc.deadline=2026-08-26T04:09:32.075342250Z otel.kind="client" otel.name=Agent.protocol_version rpc.trace_id=00}: tarpc::client: SendRequest
2026-08-26T04:09:22.077052Z DEBUG RPC{rpc.deadline=2026-08-26T04:09:32.075342250Z otel.kind="client" otel.name=Agent.protocol_version rpc.trace_id=00}: tarpc::client: ReceiveResponse
2026-08-26T04:09:22.077145Z DEBUG RPC{rpc.deadline=2026-08-26T04:09:32.077134417Z otel.kind="client" otel.name=Agent.snapshot rpc.trace_id=00}: tarpc::client: SendRequest
2026-08-26T04:09:22.077255Z DEBUG RPC{rpc.deadline=2026-08-26T04:09:32.077134417Z otel.kind="client" otel.name=Agent.snapshot rpc.trace_id=00}: tarpc::client: ReceiveResponse
(inventory read from the running agent)
Unifying Receiver (7D5A99D5, vid=046d pid=c52b)
├─ slot 1 ● K780 Multi-Device Wireless Keyboard (keyboard, wpid=405b, battery=90% full (discharging))
│ model_ids=[b33b,405b,0000] ext=00 serial=— unit_id=30f1f2de transports=equad+btle
└─ slot 3 ● Wireless Mouse MX Master 3 (mouse, wpid=4082, battery=20% low (discharging))
model_ids=[b023,4082,0000] ext=00 serial=— unit_id=7fe79b91 transports=equad+btle
```
### Logs
```shell
```
### macOS permissions (if applicable)
- [x] OpenLogi has **Accessibility** permission (needed to remap buttons via the event tap).
- [x] OpenLogi has **Input Monitoring** permission (needed for Bluetooth-direct devices and capture).
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by tracing GestureButton handling in the GUI and the TOML settings path, then reproduce the quick press + flick + release behavior with an MX Master 3 on macOS. Done means swipes exceeding the movement threshold are recognized despite a brief hold, with the minimum hold or swipe threshold configurable in TOML.
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
- 55/100