Skip to main content

Module binding

Module binding 

Source
Expand description

Logical mouse button identifiers and the action vocabulary each one can bind to. Lives in openlogi-core because the config schema serializes these directly — the GUI re-exports them.

When Action gains new variants, keep the existing variant names stable: the TOML config keys/values use the enum variant identifiers verbatim, so renames are migration events.

Structs§

KeyCombo
A modifier + virtual-key keystroke captured by the P1.3 recorder UI or hand-authored in config.toml.
SwipeAccumulator
The mid-swipe state machine shared by both gesture-capture paths: the HID++ thumb pad (openlogi-hid’s 0x1b04 raw-XY divert) and the OS-hook Middle/Back/Forward buttons (openlogi-agent-core’s CGEventTap). A gesture button’s hold accumulates travel; the instant the dominant axis commits a direction — after the button has been held GESTURE_HOLD_FOR_SWIPE, so a quick click whose cursor drifted doesn’t count — Self::accumulate returns that direction exactly once, like Logitech Options+. A hold that never commits is a plain click, reported by Self::end.

Enums§

Action
What pressing a ButtonId should do.
Binding
What a single rebindable ButtonId does: either one Action, or — for a raw-XY-capable button placed in gesture mode — a per-GestureDirection map (hold + swipe up/down/left/right, or a plain click).
ButtonId
One of the user-rebindable hotspots on a Logi mouse. The order matches the physical layout from front to side; ButtonId::ALL is consumed by the default-binding generator and the popover trigger list.
Category
Grouping for popover section headers.
GestureDirection
One of the five sub-bindings on the gesture button: hold + swipe up/down/ left/right or a plain click without movement. Logi ships these as independent assignments (SLOT_NAME_GESTURE_*_BUTTON in the device_gesture_buttons_image metadata block) — OpenLogi mirrors the same shape.

Constants§

GESTURE_HOLD_FOR_SWIPE
Minimum time a gesture button must be held before its travel can commit to a swipe. Distinguishes a deliberate hold-and-swipe from a quick click whose cursor happened to be moving. Shared by both gesture paths (the HID++ thumb pad and the OS-hook Middle/Back/Forward).
GESTURE_SWIPE_DEADZONE
Maximum cross-axis travel allowed at the threshold, so only a reasonably straight swipe commits. Grows with the dominant axis (max(deadzone, 35%)).
GESTURE_SWIPE_THRESHOLD
Minimum dominant-axis travel (raw-XY units) before a held gesture commits to a direction. Tuned to match Logitech Options+’s responsiveness.

Functions§

default_binding
Sensible defaults for a fresh device so the panel isn’t empty on first run.
default_binding_for
The canonical default Binding for a fresh button in the merged model.
default_gesture_binding
Per-direction defaults for the gesture button. These are captured live over HID++ 0x1b04 (raw-XY diversion) and dispatched like any other binding; the defaults give the picker something sensible to show on first run.
detect_swipe
Classify the running raw-XY travel of a held gesture button into a directional swipe, the instant it commits — or None while it’s still too short or too diagonal.