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. - Swipe
Accumulator - The mid-swipe state machine shared by both gesture-capture paths: the HID++
thumb pad (
openlogi-hid’s0x1b04raw-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 heldGESTURE_HOLD_FOR_SWIPE, so a quick click whose cursor drifted doesn’t count —Self::accumulatereturns that direction exactly once, like Logitech Options+. A hold that never commits is a plain click, reported bySelf::end.
Enums§
- Action
- What pressing a
ButtonIdshould do. - Binding
- What a single rebindable
ButtonIddoes: either oneAction, or — for a raw-XY-capable button placed in gesture mode — a per-GestureDirectionmap (hold + swipe up/down/left/right, or a plain click). - Button
Id - One of the user-rebindable hotspots on a Logi mouse. The order matches the
physical layout from front to side;
ButtonId::ALLis consumed by the default-binding generator and the popover trigger list. - Category
- Grouping for popover section headers.
- Gesture
Direction - 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_*_BUTTONin thedevice_gesture_buttons_imagemetadata 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
Bindingfor 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
Nonewhile it’s still too short or too diagonal.