AprilNEA / AprilNEA/OpenLogi

[Bug]: Gesture actions fire once per hold — Options+ repeats volume continuously while swiping

Closed
#1,340 0 comments 0 reactions 0 assignees View on GitHub
needs: triage type: bug
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.3

### Operating system

Windows

### OS version & architecture

Windows 11 x86 64

### Device model

Mx master s3 + logi bolt

### How is the device connected?

Logi Bolt receiver

### Affected area(s)

- [ ] Device discovery / detection
- [ ] Button remapping
- [ ] DPI control
- [ ] SmartShift
- [ ] Per-application profiles
- [ ] Battery status
- [ ] Settings / configuration (TOML)
- [ ] Auto-update
- [ ] Menu bar / tray
- [x] Other

### What happened?

`SwipeAccumulator` commits a direction exactly once per hold. Continuing the swipe past the threshold does not fire the bound action again, and travel distance has no effect on how many times it fires.

For discrete actions (MissionControl, NextTab, ShowDesktop) that is correct and matches Options+. For volume it is not. In Options+, a volume gesture keeps stepping the volume up or down for as long as you keep swiping, so you land on the level you want in one continuous motion.

### Steps to reproduce

1. Put the dedicated gesture button in gesture mode.
2. Bind `Up = "VolumeUp"` and `Down = "VolumeDown"`.
3. Hold the gesture button and swipe up, continuing well past the commit threshold.

### Diagnostics report

```markdown

```

### `openlogi list` output

```text
PS C:\WINDOWS\system32> openlogi list
(inventory read from the running agent)
Logi Bolt Receiver (4860197AB3471CBB, vid=046d pid=c548)
└─ slot 2 ● MX Master 3S (mouse, wpid=b034, battery=45% good (discharging))
model_ids=[b034,0000,0000] ext=00 serial=obfuscated unit_id=0c0e7649 transports=btle

Cameras (1 Logitech UVC)
└─ ● HD Pro Webcam C920 (camera, vid=046d pid=082d, id=\\?\usb#vid_046d&pid_082d&mi_00#7&3b8594e2&2&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global)
```

### Logs

```shell

```

### macOS permissions (if applicable)

- [ ] OpenLogi has **Accessibility** permission (needed to remap buttons via the event tap).
- [ ] 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 locating the Rust implementation of SwipeAccumulator and the gesture-action handling path. Reproduce the MX Master 3S volume gesture with Up = "VolumeUp" or Down = "VolumeDown", then verify that continued movement produces repeated volume steps while discrete actions such as MissionControl still commit only once.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
desktop
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 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.