Rework headset RGB lighting so it mirrors the keyboard/mouse model instead of its own ad-hoc shape. LED Control (0x0620 HostMode) becomes a boolean toggle: whether Solaar holds the headset's live-coloring claim. Off releases the LEDs so another app (e.g. OpenRGB) can drive them; on lets Solaar drive. 0x0620 per-zone painting and the 0x0621 onboard effect are both live LED control, so both are gated on the claim — UI rows grey out and wire writes are skipped (value still persisted) when the claim isn't held, mirroring the keyboard's RGBEffectSetting under rgb_control. 0x0621 HeadsetOnboardEffect is now the primary lighting setting, the headset analog of keyboard 0x8071 zone effects. Its build reads the cluster's supported-effect set so the picker offers only those; effect id 0 is labelled "Static" to match every other Solaar device. The redundant HeadsetLEDsPrimary (0x0620 single-colour host push) is removed — that job is exactly the 0x0621 Static effect. HeadsetPerZoneLighting is the per-key-style overlay: gated on the claim AND the onboard effect being Static, since per-zone painting overlays a Static cluster effect (the analog of keyboard per-key needing rgb_control + zone Static). The 0x0622 signature effects (startup/shutdown/passive colours) are the only stored settings here and stay ungated — editable whether or not Solaar holds the claim. On re-claim HeadsetLEDControl.write reasserts the dominant layer: per-zone painting when the onboard effect is Static, else the 0x0621 effect itself. |
||
|---|---|---|
| .. | ||
| cli | ||
| ui | ||
| __init__.py | ||
| configuration.py | ||
| custom_logger.py | ||
| dbus.py | ||
| gtk.py | ||
| i18n.py | ||
| listener.py | ||
| tasks.py | ||
| version | ||