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.

Modules are split by domain so concurrent feature work (new buttons, new actions, defaults, gesture maps) rarely edits the same file.

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++ dedicated gesture button (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.
WorkflowStep
One step in a Action::Workflow. A workflow is a Vec<WorkflowStep> executed in order by the inject layer; Delay introduces a pause between the surrounding steps.

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.