From b862d83d3bd9e4d82aeea2b7670fd27b7bd00426 Mon Sep 17 00:00:00 2001 From: Nick Welter Date: Tue, 11 Aug 2026 09:44:17 -0400 Subject: [PATCH 1/7] feat(logitech): MX Master 4 haptics, wheel, name and Easy-Switch cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Surfaces the four features the protocol package gained for the MX Master 4. Each card hides itself when its driver reports the setting as absent, so no other mouse grows a control that can only fail. Haptic strength, the two haptic flags, wheel mode and the SmartShift threshold each ride in a single device write with their neighbours, so they stage into shared groups and one apply writes the group. Staging them separately would cost two writes to one byte, and the second would be built from a device read the first had already invalidated. Picking a haptic strength, or turning haptics back on, plays a sample effect afterwards. The device does not buzz by itself; Logi Options+ plays one at that moment and someone who has used it notices the absence. A mouse that refuses the sample must not make a strength change that worked look failed, so it is best effort. Easy-Switch is deliberately outside the staged model. A switch disconnects this computer, so it cannot sit in a batch alongside writes that would never land, and there is nothing to preview — the mouse is either here or it is not. It reads as status with a two-step confirmation, and says "requested" rather than "switched" because that is all it can know. An empty slot is rendered as a plain span rather than a disabled button: switching there leaves the mouse unreachable until someone presses the button on its underside, and that is not something a misclick should be able to do. --- src/control-events.ts | 72 +++++++ src/control-template.ts | 4 + src/control.css | 20 ++ src/control.ts | 404 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 500 insertions(+) diff --git a/src/control-events.ts b/src/control-events.ts index 401d4c57..c47245a5 100644 --- a/src/control-events.ts +++ b/src/control-events.ts @@ -57,6 +57,17 @@ export interface ControlEventHandlers { capLandingToLiftOff(): void; applyGamingSurfaceMode(mode: NonNullable): void; applyLightforceSwitchMode(mode: NonNullable): void; + applyHapticIntensity(preset: string): void; + applyHapticEnabled(enabled: boolean): void; + applyHapticBatterySaving(enabled: boolean): void; + applyWheelMode(mode: NonNullable): void; + applySmartShiftThreshold(threshold: number | null): void; + applyHiResScroll(enabled: boolean): void; + applyInvertScroll(inverted: boolean): void; + applyThumbWheelInverted(inverted: boolean): void; + applyFriendlyName(name: string): void; + requestHostSwitch(): Promise; + cancelHostSwitch(): void; applyLighting(patch: Partial>): void; applyNinjutsoSetting(setting: "system" | "hyper" | "optical" | "slam", value: string | boolean): void; // Mode and profile selection apply immediately: both are volatile navigation @@ -396,6 +407,67 @@ export function bindControlEvents(handlers: ControlEventHandlers): void { document.querySelector("#onboard-refresh")?.addEventListener("click", () => { void handlers.reloadOnboardProfiles(); }); + document.querySelectorAll("[data-haptic]").forEach((button) => { + button.addEventListener("click", () => { + const preset = button.dataset.haptic; + if (preset) handlers.applyHapticIntensity(preset); + }); + }); + + const switchToggle = (id: string, apply: (on: boolean) => void): void => { + document.querySelector(id)?.addEventListener("click", (event) => { + apply((event.currentTarget as HTMLButtonElement).getAttribute("aria-checked") !== "true"); + }); + }; + switchToggle("#haptic-enabled-toggle", (on) => handlers.applyHapticEnabled(on)); + switchToggle("#haptic-battery-toggle", (on) => handlers.applyHapticBatterySaving(on)); + switchToggle("#hi-res-toggle", (on) => handlers.applyHiResScroll(on)); + switchToggle("#invert-scroll-toggle", (on) => handlers.applyInvertScroll(on)); + switchToggle("#thumb-wheel-toggle", (on) => handlers.applyThumbWheelInverted(on)); + + document.querySelectorAll("[data-wheel-mode]").forEach((button) => { + button.addEventListener("click", () => { + const mode = button.dataset.wheelMode as MouseStatus["wheelMode"]; + if (mode) handlers.applyWheelMode(mode); + }); + }); + + document.querySelector("#smart-shift-toggle")?.addEventListener("click", (event) => { + const enabling = (event.currentTarget as HTMLButtonElement).getAttribute("aria-checked") !== "true"; + const slider = document.querySelector("#smart-shift-threshold"); + // Re-enabling restores what the slider shows, which is the last value the + // mouse reported rather than an invented default. + handlers.applySmartShiftThreshold(enabling ? Number(slider?.value ?? 0) || null : null); + }); + + document.querySelector("#smart-shift-threshold")?.addEventListener("change", (event) => { + handlers.applySmartShiftThreshold(Number((event.currentTarget as HTMLInputElement).value)); + }); + + document.querySelector("#device-name-input")?.addEventListener("input", (event) => { + // Keeps the counter and the button honest while typing, from the field + // itself rather than from a status snapshot. + const input = event.currentTarget as HTMLInputElement; + const typed = input.value.trim(); + const apply = document.querySelector("#device-name-apply"); + if (apply) apply.disabled = typed.length === 0 || typed === input.dataset.current; + const remaining = document.querySelector("#device-name-remaining"); + if (remaining) remaining.textContent = `${typed.length}/${input.maxLength}`; + }); + + document.querySelector("#device-name-apply")?.addEventListener("click", () => { + const input = document.querySelector("#device-name-input"); + const name = input?.value.trim() ?? ""; + if (name) handlers.applyFriendlyName(name); + }); + + document.querySelector("#easy-switch-go")?.addEventListener("click", () => { + void handlers.requestHostSwitch(); + }); + document.querySelector("#easy-switch-cancel")?.addEventListener("click", () => { + handlers.cancelHostSwitch(); + }); + document.querySelectorAll("[data-lightforce]").forEach((button) => { button.addEventListener("click", () => { const mode = button.dataset.lightforce as MouseStatus["lightforceSwitchMode"]; diff --git a/src/control-template.ts b/src/control-template.ts index 315a3e58..7efd79d6 100644 --- a/src/control-template.ts +++ b/src/control-template.ts @@ -104,6 +104,10 @@ export function controlTemplate(buildLabel: string): string {

DPI

Sensitivity

Choose a DPI value

POLLING RATE

Report frequency

Higher rates update cursor movement more often, but use more battery.

SENSOR

Lift-off distance

Controls how far you can lift the mouse before tracking stops. Higher values keep tracking a little longer.
+ + + +
diff --git a/src/control.css b/src/control.css index aae2692c..45634741 100644 --- a/src/control.css +++ b/src/control.css @@ -1051,3 +1051,23 @@ body { height: 100vh; overflow: hidden; } .dpi-header-actions { width: 100%; } .dpi-header-actions input { width: 0; flex: 1 1 auto; font-size: 1.7rem; text-align: left; } } + +/* MX Master 4: wheel threshold, rename and Easy-Switch cards. */ +.wheel-threshold { display: block; margin-top: .35rem; color: var(--faint); font-size: .62rem; } +.wheel-threshold input { width: 100%; margin-top: .25rem; } + +.name-row { display: flex; gap: .4rem; } +.name-row input { flex: 1; min-width: 0; } + +.easy-switch-slots { display: flex; flex-wrap: wrap; gap: .35rem; } +.easy-switch-slots > * { min-width: 2.1rem; padding: .28rem .5rem; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--card); color: var(--dim); font-size: .68rem; text-align: center; } +/* An empty slot is rendered as a span, never a button, so it must not look like one. */ +.easy-switch-slots span { opacity: .5; cursor: default; } +.easy-switch-slots button { cursor: pointer; } +.easy-switch-slots .is-current { border-color: rgb(105 210 141 / 55%); background: rgb(105 210 141 / 12%); color: #8be3a9; } + +.easy-switch-confirm { margin-top: .55rem; padding: .55rem .65rem; border: 1px solid #5c4a2a; border-radius: 7px; background: #241f16; } +.easy-switch-confirm p { margin: 0 0 .5rem; color: #e2c489; font-size: .66rem; line-height: 1.45; } +.easy-switch-confirm-actions { display: flex; gap: .4rem; } +.easy-switch-confirm-actions button { padding: .32rem .6rem; border: 1px solid #7a6234; border-radius: 6px; background: #2e2718; color: #f0d9a4; font-size: .64rem; } +.easy-switch-confirm-actions button:last-child { border-color: var(--line-strong); background: var(--card); color: var(--dim); } diff --git a/src/control.ts b/src/control.ts index 7cad747b..3a1cda1c 100644 --- a/src/control.ts +++ b/src/control.ts @@ -2,6 +2,12 @@ import "./control.css"; import { estimateBatteryTime, saveBatterySample, type BatteryMode } from "./battery-history"; import { unsupportedNotice, unsupportedTemplate } from "./browser-support"; import { controlTemplate } from "./control-template"; +import { + LOGITECH_HAPTIC_EFFECTS as HAPTIC_EFFECTS, + LOGITECH_HAPTIC_PRESETS as HAPTIC_PRESET_VALUES, + LOGITECH_SMART_SHIFT_OFF as SMART_SHIFT_OFF, + type LogitechHapticPreset as HapticPreset, +} from "@openmouse/protocol/logitech"; import { bindControlEvents } from "./control-events"; import { initColorPickers, syncColorPickers } from "./ui/color-picker"; import { @@ -545,6 +551,17 @@ function renderControl(): void { capLandingToLiftOff, applyGamingSurfaceMode, applyLightforceSwitchMode, + applyHapticIntensity: (preset: string) => applyHapticIntensity(preset as HapticPreset), + applyHapticEnabled, + applyHapticBatterySaving, + applyWheelMode, + applySmartShiftThreshold, + applyHiResScroll, + applyInvertScroll, + applyThumbWheelInverted, + applyFriendlyName, + requestHostSwitch, + cancelHostSwitch, applyLighting, applyNinjutsoSetting, flashPendingChanges, @@ -581,6 +598,7 @@ function renderControl(): void { } if (!isPendingChange("gaming-surface")) stagedGamingSurface = null; if (!isPendingChange("lightforce-switch-mode")) stagedLightforce = null; + clearLogitechStaging(); renderBunnyHop(); }); onPendingChanges(renderStagedMarkers); @@ -1558,6 +1576,7 @@ function showStatus(deviceStatus: MouseStatus): void { ? "Turn the gaming surface on or set it to auto to adjust lift-off distance." : "Controls how far you can lift the mouse before tracking stops. Higher values keep tracking a little longer."; } + renderMxMaster4Cards(status, settingsPending); const gamingSurfaceRow = document.querySelector("#gaming-surface-row"); if (gamingSurfaceRow) gamingSurfaceRow.hidden = !status.gamingSurfaceMode; document.querySelectorAll("[data-gaming-surface]").forEach((button) => { @@ -3623,6 +3642,391 @@ const MODE_STATUS_GROUP = "logitech-mode-status"; let stagedGamingSurface: MouseStatus["gamingSurfaceMode"] = null; let stagedLightforce: MouseStatus["lightforceSwitchMode"] = null; +/** + * The MX Master 4 haptic pair, the wheel trio and the hi-res mode byte each + * ride in a single device write, so everything staged into one of these groups + * is written together. Staging them separately would cost two writes to one + * byte, and the second would be built from a device read the first already + * invalidated. + */ +/** + * Easy-Switch is deliberately absent from the staged-changes model. A switch + * disconnects this computer, so it cannot sit in a batch alongside writes that + * would never land, and there is nothing to preview: the mouse is either here + * or it is not. + */ +let pendingHostSlot: number | null = null; + +function renderMxMaster4Cards(status: MouseStatus, settingsPending: boolean): void { + renderHapticsCard(status, settingsPending); + renderWheelCard(status, settingsPending); + renderDeviceNameCard(status, settingsPending); + renderEasySwitchCard(status); +} + +function renderHapticsCard(status: MouseStatus, settingsPending: boolean): void { + const card = document.querySelector("#haptics-card"); + if (!card) return; + const intensity = status.hapticIntensity; + card.hidden = intensity === null || intensity === undefined; + if (card.hidden) return; + + const preset = (Object.keys(HAPTIC_PRESET_VALUES) as HapticPreset[]) + .find((name) => HAPTIC_PRESET_VALUES[name] === intensity); + // Strength is meaningless while the motor is off, so the presets follow the + // master switch rather than sitting there looking clickable. + const enabled = status.hapticEnabled === true; + + document.querySelectorAll("[data-haptic]").forEach((button) => { + setSelected(button, button.dataset.haptic === preset); + button.disabled = settingsPending || !enabled; + }); + setToggleValue("#haptic-enabled-toggle", status.hapticEnabled); + setToggleValue("#haptic-battery-toggle", status.hapticBatterySaving); + setText("#haptic-output", enabled ? preset ?? String(intensity) : "Off"); +} + +function renderWheelCard(status: MouseStatus, settingsPending: boolean): void { + const card = document.querySelector("#wheel-card"); + if (!card) return; + const hasWheel = status.wheelMode != null || status.hiResScroll != null; + card.hidden = !hasWheel; + if (!hasWheel) return; + + document.querySelectorAll("[data-wheel-mode]").forEach((button) => { + setSelected(button, button.dataset.wheelMode === status.wheelMode); + button.disabled = settingsPending || status.wheelMode == null; + }); + + // 255 disables SmartShift; any other value is both "on" and the setting. + const threshold = status.smartShiftThreshold; + const smartShiftOn = threshold != null && threshold !== SMART_SHIFT_OFF; + const smartShiftRow = document.querySelector("#smart-shift-row"); + if (smartShiftRow) smartShiftRow.hidden = threshold == null; + setToggleValue("#smart-shift-toggle", smartShiftOn); + + const slider = document.querySelector("#smart-shift-threshold"); + const thresholdRow = document.querySelector("#smart-shift-threshold-row"); + if (thresholdRow) thresholdRow.hidden = !smartShiftOn; + if (slider) { + // The refresh must not yank the handle out from under a drag. + if (smartShiftOn && document.activeElement !== slider) slider.value = String(threshold); + slider.disabled = settingsPending || !smartShiftOn; + } + setText("#smart-shift-value", smartShiftOn ? String(threshold) : "—"); + + setToggleValue("#hi-res-toggle", status.hiResScroll); + const invertRow = document.querySelector("#invert-scroll-row"); + if (invertRow) invertRow.hidden = status.supportsInvertScroll !== true; + setToggleValue("#invert-scroll-toggle", status.invertScroll); + const thumbRow = document.querySelector("#thumb-wheel-row"); + if (thumbRow) thumbRow.hidden = status.supportsThumbWheelInvert !== true; + setToggleValue("#thumb-wheel-toggle", status.thumbWheelInverted); + + setText("#wheel-ratchet-state", status.wheelRatchetEngaged == null + ? "—" + : status.wheelRatchetEngaged ? "Ratcheted now" : "Free-spinning now"); +} + +function renderDeviceNameCard(status: MouseStatus, settingsPending: boolean): void { + const card = document.querySelector("#device-name-card"); + if (!card) return; + const current = status.friendlyName; + const maxLength = status.friendlyNameMaxLength; + card.hidden = current == null || maxLength == null; + if (card.hidden || current == null || maxLength == null) return; + + const input = document.querySelector("#device-name-input"); + if (input) { + input.maxLength = maxLength; + input.dataset.current = current; + // Left alone while focused so the refresh cannot overwrite a half-typed name. + if (document.activeElement !== input) input.value = current; + input.disabled = settingsPending; + } + const typed = input?.value.trim() ?? ""; + const apply = document.querySelector("#device-name-apply"); + if (apply) apply.disabled = settingsPending || typed.length === 0 || typed === current; + setText("#device-name-remaining", `${typed.length}/${maxLength}`); +} + +function renderEasySwitchCard(status: MouseStatus): void { + const card = document.querySelector("#easy-switch-card"); + if (!card) return; + const { hostCount, currentHost, hostSlotsPaired } = status; + const known = hostCount != null && currentHost != null; + card.hidden = !known; + if (!known || hostCount == null || currentHost == null) { + cancelHostSwitch(); + return; + } + + const slots = document.querySelector("#easy-switch-slots"); + if (slots) { + slots.replaceChildren(...Array.from({ length: hostCount }, (_unused, index) => { + const active = index === currentHost; + const paired = hostSlotsPaired?.[index] === true; + /* + * Only a paired slot that is not the current one is a button. An empty + * slot is a plain span and cannot be clicked at all: switching there + * leaves the mouse unreachable until someone presses the button on its + * underside, which is not a thing a misclick should be able to do. + */ + const switchable = paired && !active; + const pill = document.createElement(switchable ? "button" : "span"); + pill.textContent = String(index + 1); + pill.title = active + ? "This computer" + : paired ? `Request a switch to computer ${index + 1}` : "Empty slot — nothing paired here"; + if (active) pill.classList.add("is-current"); + if (switchable) { + (pill as HTMLButtonElement).type = "button"; + pill.addEventListener("click", () => askForHostSwitch(index)); + } + return pill; + })); + } + + const pairedCount = hostSlotsPaired?.filter(Boolean).length ?? 0; + setText("#easy-switch-output", `On ${currentHost + 1} of ${hostCount} · ${pairedCount} paired`); +} + +/** Two-step confirmation that says what happens and how to undo it. */ +function askForHostSwitch(slot: number): void { + const row = document.querySelector("#easy-switch-confirm"); + const message = document.querySelector("#easy-switch-confirm-text"); + if (!row || !message) return; + pendingHostSlot = slot; + message.textContent = + `Request a switch to computer ${slot + 1}? The mouse will disconnect from this computer ` + + "straight away. To bring it back, press the button underneath the mouse."; + row.hidden = false; + document.querySelector("#easy-switch-go")?.focus(); +} + +function cancelHostSwitch(): void { + pendingHostSlot = null; + const row = document.querySelector("#easy-switch-confirm"); + if (row) row.hidden = true; +} + +/** + * Sends the mouse away. Says "requested" rather than "switched" because it + * cannot know: the device is gone the moment this succeeds, so nothing can be + * read back to confirm it arrived. + */ +async function requestHostSwitch(): Promise { + const slot = pendingHostSlot; + const client = activeClient; + cancelHostSwitch(); + if (!client || slot === null) return; + + try { + await client.requestHostSwitch(slot); + } catch (error) { + setText("#read-status", error instanceof Error ? error.message : "Unable to request the switch."); + return; + } + setText("#read-status", + `Switch to computer ${slot + 1} requested. If it worked the mouse has left this computer — ` + + "press the button underneath it to bring it back.", + ); +} + +const HAPTIC_GROUP = "logitech-haptic"; +const RATCHET_GROUP = "logitech-ratchet"; +const WHEEL_MODE_GROUP = "logitech-wheel-mode"; + +let stagedHapticIntensity: number | null = null; +let stagedHapticEnabled: boolean | null = null; +let stagedHapticBatterySaving: boolean | null = null; +let stagedWheelMode: MouseStatus["wheelMode"] = null; +let stagedSmartShift: number | null = null; +let stagedHiRes: boolean | null = null; +let stagedInvertScroll: boolean | null = null; + +/** + * Drops a staged value once its change is no longer pending — flashed or + * reverted. Keeping it would let a later write in the same group resend a + * value the user had already discarded. + */ +function clearLogitechStaging(): void { + if (!isPendingChange("haptic-strength")) stagedHapticIntensity = null; + if (!isPendingChange("haptic-enabled")) stagedHapticEnabled = null; + if (!isPendingChange("haptic-battery-saving")) stagedHapticBatterySaving = null; + if (!isPendingChange("wheel-mode")) stagedWheelMode = null; + if (!isPendingChange("smart-shift")) stagedSmartShift = null; + if (!isPendingChange("hi-res-scroll")) stagedHiRes = null; + if (!isPendingChange("invert-scroll")) stagedInvertScroll = null; +} + +async function writeStagedHaptics(): Promise { + if (!activeClient) throw new Error("The mouse is no longer connected."); + // Order matters only in that strength is pointless while the motor is off, + // so the enable lands first and the sample buzz below is felt at the new + // strength rather than the old one. + if (stagedHapticEnabled !== null) await activeClient.setHapticEnabled(stagedHapticEnabled); + if (stagedHapticBatterySaving !== null) await activeClient.setHapticBatterySaving(stagedHapticBatterySaving); + if (stagedHapticIntensity !== null) await activeClient.setHapticIntensity(stagedHapticIntensity); + + /* + * The device does not buzz by itself. Logi Options+ plays an effect straight + * after these writes, and someone who has used the vendor software notices + * its absence — but a mouse that refuses the sample must not make a strength + * change that worked look failed. + */ + const shouldBuzz = stagedHapticIntensity !== null || stagedHapticEnabled === true; + if (shouldBuzz) { + const effect = stagedHapticEnabled === true && stagedHapticIntensity === null + ? HAPTIC_EFFECTS.enableConfirmation + : HAPTIC_EFFECTS.strengthSample; + await activeClient.playHapticEffect(effect).catch(() => undefined); + } +} + +async function writeStagedRatchet(): Promise { + if (!activeClient) throw new Error("The mouse is no longer connected."); + if (stagedWheelMode) await activeClient.setWheelMode(stagedWheelMode); + if (stagedSmartShift !== null) await activeClient.setSmartShiftThreshold(stagedSmartShift); +} + +async function writeStagedWheelMode(): Promise { + if (!activeClient) throw new Error("The mouse is no longer connected."); + if (stagedHiRes !== null) await activeClient.setHiResScroll(stagedHiRes); + if (stagedInvertScroll !== null) await activeClient.setInvertScroll(stagedInvertScroll); +} + +function applyHapticIntensity(preset: HapticPreset): void { + if (!activeClient) return; + stagedHapticIntensity = HAPTIC_PRESET_VALUES[preset]; + stageChange({ + key: "haptic-strength", + group: HAPTIC_GROUP, + label: `Haptics ${preset.toLowerCase()}`, + command: `Set haptic strength to ${preset} (${stagedHapticIntensity})`, + progress: `Setting haptic strength to ${preset.toLowerCase()}…`, + preview: (status) => { status.hapticIntensity = HAPTIC_PRESET_VALUES[preset]; }, + apply: writeStagedHaptics, + }); +} + +function applyHapticEnabled(enabled: boolean): void { + if (!activeClient) return; + stagedHapticEnabled = enabled; + stageChange({ + key: "haptic-enabled", + group: HAPTIC_GROUP, + label: `Haptics ${enabled ? "on" : "off"}`, + command: `Turn haptic feedback ${enabled ? "on" : "off"}`, + progress: `Turning haptic feedback ${enabled ? "on" : "off"}…`, + preview: (status) => { status.hapticEnabled = enabled; }, + apply: writeStagedHaptics, + }); +} + +function applyHapticBatterySaving(enabled: boolean): void { + if (!activeClient) return; + stagedHapticBatterySaving = enabled; + stageChange({ + key: "haptic-battery-saving", + group: HAPTIC_GROUP, + label: `Haptic battery saving ${enabled ? "on" : "off"}`, + command: `Turn haptic battery saving ${enabled ? "on" : "off"}`, + progress: `Turning haptic battery saving ${enabled ? "on" : "off"}…`, + preview: (status) => { status.hapticBatterySaving = enabled; }, + apply: writeStagedHaptics, + }); +} + +function applyWheelMode(mode: NonNullable): void { + if (!activeClient) return; + stagedWheelMode = mode; + const wording = mode === "Freespin" ? "free-spin" : "ratchet"; + stageChange({ + key: "wheel-mode", + group: RATCHET_GROUP, + label: `Wheel ${wording}`, + command: `Set the wheel to ${wording}`, + progress: `Setting the wheel to ${wording}…`, + preview: (status) => { status.wheelMode = mode; }, + apply: writeStagedRatchet, + }); +} + +function applySmartShiftThreshold(threshold: number | null): void { + if (!activeClient) return; + stagedSmartShift = threshold; + const off = threshold === null || threshold === SMART_SHIFT_OFF; + stageChange({ + key: "smart-shift", + group: RATCHET_GROUP, + label: off ? "SmartShift off" : `SmartShift ${threshold}`, + command: off ? "Turn SmartShift off" : `Set the SmartShift threshold to ${threshold}`, + progress: off ? "Turning SmartShift off…" : `Setting the SmartShift threshold to ${threshold}…`, + preview: (status) => { status.smartShiftThreshold = threshold ?? SMART_SHIFT_OFF; }, + apply: writeStagedRatchet, + }); +} + +function applyHiResScroll(enabled: boolean): void { + if (!activeClient) return; + stagedHiRes = enabled; + stageChange({ + key: "hi-res-scroll", + group: WHEEL_MODE_GROUP, + label: `High-resolution scrolling ${enabled ? "on" : "off"}`, + command: `Turn high-resolution scrolling ${enabled ? "on" : "off"}`, + progress: `Turning high-resolution scrolling ${enabled ? "on" : "off"}…`, + preview: (status) => { status.hiResScroll = enabled; }, + apply: writeStagedWheelMode, + }); +} + +function applyInvertScroll(inverted: boolean): void { + if (!activeClient) return; + stagedInvertScroll = inverted; + stageChange({ + key: "invert-scroll", + group: WHEEL_MODE_GROUP, + label: inverted ? "Scroll inverted" : "Scroll normal", + command: `${inverted ? "Invert" : "Restore"} the scroll direction`, + progress: `${inverted ? "Inverting" : "Restoring"} the scroll direction…`, + preview: (status) => { status.invertScroll = inverted; }, + apply: writeStagedWheelMode, + }); +} + +function applyThumbWheelInverted(inverted: boolean): void { + if (!activeClient) return; + // Its own write, so it needs no group. + stageChange({ + key: "thumb-wheel-invert", + label: inverted ? "Thumb wheel inverted" : "Thumb wheel normal", + command: `${inverted ? "Invert" : "Restore"} the thumb-wheel direction`, + progress: `${inverted ? "Inverting" : "Restoring"} the thumb wheel…`, + preview: (status) => { status.thumbWheelInverted = inverted; }, + apply: async () => { + if (!activeClient) throw new Error("The mouse is no longer connected."); + await activeClient.setThumbWheelInverted(inverted); + }, + }); +} + +function applyFriendlyName(name: string): void { + if (!activeClient || !name) return; + stageChange({ + key: "friendly-name", + label: `Name "${name}"`, + command: `Rename the mouse to "${name}"`, + progress: `Renaming the mouse to "${name}"…`, + preview: (status) => { status.friendlyName = name; }, + apply: async () => { + if (!activeClient) throw new Error("The mouse is no longer connected."); + await activeClient.setFriendlyName(name); + }, + }); +} + async function writeStagedModeStatus(): Promise { if (!activeClient) throw new Error("The mouse is no longer connected."); await activeClient.setModeStatus({ From 9f301712777c0cc6a32ef8514862624870e05106 Mon Sep 17 00:00:00 2001 From: Nick Welter Date: Tue, 11 Aug 2026 10:04:35 -0400 Subject: [PATCH 2/7] fix(logitech): SmartShift off now writes, and the rename button stays legible Turning SmartShift off staged null, and the apply skipped null because it used the same value for "nothing staged". The change flashed successfully and wrote nothing, so the next refresh read the old value back and the switch appeared to bounce. Dragging the slider staged a number and worked, which is why it looked intermittent. Nothing staged is now undefined and off is null. The rename button sat outside .setting-action and .dpi-header-actions, so it never picked up an explicit colour and went unreadable once its card took on the staged accent border. It now follows the same pattern. Also maps MX Master 4 artwork by display name rather than product id: a Logi Bolt receiver reports 046d:c548 whichever mouse is paired to it, so keying the id would show this art on an MX Master 3S too. --- src/control.css | 5 +++++ src/control.ts | 12 +++++++++--- src/ui/device-images.ts | 4 ++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/control.css b/src/control.css index 45634741..eb3a1a6d 100644 --- a/src/control.css +++ b/src/control.css @@ -1058,6 +1058,11 @@ body { height: 100vh; overflow: hidden; } .name-row { display: flex; gap: .4rem; } .name-row input { flex: 1; min-width: 0; } +/* Matches .dpi-header-actions: without an explicit colour the button inherits + nothing legible once the card picks up its staged accent border. */ +.name-row button { padding: .4rem .65rem; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--card); color: var(--dim); font-size: .65rem; font-weight: 700; } +.name-row button:disabled { cursor: default; opacity: .45; } +.control-shell .name-row button:not(:disabled) { border-color: var(--ui-accent); background: var(--ui-accent); color: var(--ui-accent-ink); } .easy-switch-slots { display: flex; flex-wrap: wrap; gap: .35rem; } .easy-switch-slots > * { min-width: 2.1rem; padding: .28rem .5rem; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--card); color: var(--dim); font-size: .68rem; text-align: center; } diff --git a/src/control.ts b/src/control.ts index 3a1cda1c..99866fea 100644 --- a/src/control.ts +++ b/src/control.ts @@ -3841,7 +3841,13 @@ let stagedHapticIntensity: number | null = null; let stagedHapticEnabled: boolean | null = null; let stagedHapticBatterySaving: boolean | null = null; let stagedWheelMode: MouseStatus["wheelMode"] = null; -let stagedSmartShift: number | null = null; +/** + * undefined means nothing is staged; null means staged as off. Using null for + * both made "SmartShift off" stage a change that the apply then skipped, so it + * flashed successfully and wrote nothing, and the next poll read the old value + * back as if the switch had bounced. + */ +let stagedSmartShift: number | null | undefined; let stagedHiRes: boolean | null = null; let stagedInvertScroll: boolean | null = null; @@ -3855,7 +3861,7 @@ function clearLogitechStaging(): void { if (!isPendingChange("haptic-enabled")) stagedHapticEnabled = null; if (!isPendingChange("haptic-battery-saving")) stagedHapticBatterySaving = null; if (!isPendingChange("wheel-mode")) stagedWheelMode = null; - if (!isPendingChange("smart-shift")) stagedSmartShift = null; + if (!isPendingChange("smart-shift")) stagedSmartShift = undefined; if (!isPendingChange("hi-res-scroll")) stagedHiRes = null; if (!isPendingChange("invert-scroll")) stagedInvertScroll = null; } @@ -3887,7 +3893,7 @@ async function writeStagedHaptics(): Promise { async function writeStagedRatchet(): Promise { if (!activeClient) throw new Error("The mouse is no longer connected."); if (stagedWheelMode) await activeClient.setWheelMode(stagedWheelMode); - if (stagedSmartShift !== null) await activeClient.setSmartShiftThreshold(stagedSmartShift); + if (stagedSmartShift !== undefined) await activeClient.setSmartShiftThreshold(stagedSmartShift); } async function writeStagedWheelMode(): Promise { diff --git a/src/ui/device-images.ts b/src/ui/device-images.ts index a48ff0ca..0dffe0b7 100644 --- a/src/ui/device-images.ts +++ b/src/ui/device-images.ts @@ -61,6 +61,10 @@ function deviceKey(device: HIDDevice): string { export function deviceImage(device: HIDDevice | null | undefined, displayName = ""): string { const mapped = device ? DEVICE_IMAGES.get(deviceKey(device)) ?? null : null; if (mapped) return mapped; + // Matched on the name rather than the product id: a Logi Bolt receiver is + // 046d:c548 whichever mouse is paired to it, so keying the id would put this + // artwork on an MX Master 3S as well. + if (/mx\s*master\s*4/i.test(displayName)) return "/devices/logitech-mx-master-4.png"; if (/superlight/i.test(displayName)) return "/devices/logitech-pro-x-superlight-2c.png"; if (/\bop1\s*8k\b/i.test(displayName)) return "/devices/endgame-gear-op1-8k.png"; if (/\bviper\s*v2\s*pro\b/i.test(displayName)) return "/devices/razer-viper-v2-pro.png"; From 0cf83876f241cfb4bcb0569e2cf0417cbebb28d2 Mon Sep 17 00:00:00 2001 From: Nick Welter Date: Tue, 11 Aug 2026 10:56:35 -0400 Subject: [PATCH 3/7] feat(logitech): MX Master 4 device artwork A line-art trace made for this repository rather than a vendor render, as public/devices/README.md asks for. Only geometry derives from the source: the silhouette and the shell seams were authored as paths. No colour, shading, texture or lettering carried over, and the Logitech wordmark was excluded deliberately rather than faded, since it is a trademark and this repository is public. Mapped by display name rather than product id: a Logi Bolt receiver reports 046d:c548 whichever mouse is paired to it, so keying the id would put this artwork on an MX Master 3S as well. --- public/devices/README.md | 8 ++++++++ public/devices/logitech-mx-master-4.png | Bin 0 -> 19196 bytes 2 files changed, 8 insertions(+) create mode 100644 public/devices/logitech-mx-master-4.png diff --git a/public/devices/README.md b/public/devices/README.md index be2eea1f..c82d27af 100644 --- a/public/devices/README.md +++ b/public/devices/README.md @@ -28,6 +28,14 @@ product page. official PRO X SUPERLIGHT 2c product gallery. Confirm redistribution terms before including it in a public release package. +`logitech-mx-master-4.png` is a line-art trace made for this repository, not a +vendor render. Only geometry derives from the source: the outer silhouette and +the shell seams — button split, scroll-wheel housing, thumb rest, thumb wheel, +side-panel crease and the wheel-mode button — were authored as paths against a +product image. No colour, shading, texture or lettering was carried over, and +the Logitech wordmark on the shell was deliberately excluded rather than faded, +since it is a trademark and this repository is public. + `endgame-gear-op1-8k.png` was supplied from an Overclockers UK product-image URL for the OP1 8K. Confirm redistribution terms before including it in a public release package. diff --git a/public/devices/logitech-mx-master-4.png b/public/devices/logitech-mx-master-4.png new file mode 100644 index 0000000000000000000000000000000000000000..03f6fc430d1bab7209a33c9b5740cf05816da168 GIT binary patch literal 19196 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 Date: Tue, 11 Aug 2026 11:01:20 -0400 Subject: [PATCH 4/7] fix(logitech): stop clipping the MX Master 4 outline at the canvas edge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The artwork was rendered edge to edge, so the shape met the canvas border on all four sides. The rim stroke straddles the silhouette boundary and had nowhere to sit there, and it was sliced off at exactly the four extremes — top, bottom, left and right — leaving four gaps in what should be a closed perimeter. The art is now inset and centred, so the whole stroke survives. Verified by checking that every edge row and column of the PNG is fully transparent, which it was not before. --- public/devices/logitech-mx-master-4.png | Bin 19196 -> 28431 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/devices/logitech-mx-master-4.png b/public/devices/logitech-mx-master-4.png index 03f6fc430d1bab7209a33c9b5740cf05816da168..e15dfbc430a46f7c104b8f06e005264534a6a24d 100644 GIT binary patch literal 28431 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 z z+uGaH0$VLrbKJw-z5eU++X`YRU#9D;rskl?c*#TQ!al;{A@=5ZgmC7A-ysWCmzVF^ z`H;G2lB>e?>NknrX|9MI%}2HRmimdo>V zqcIo=>9>Q=YGTchw|RMS7~w#v9J&qvGByDIOl-oXg_G)+jEY+)L zb+lsOxx*gkRoxXDD6kCGeEjE=UKd%XXz@GrUD3^!)(*GJ#9BWhAvPjRv&Va1i%xAG zJ{*f@etO=bsG?E@PuFz2&u>1-a_DNs=F&(7H5^e?#>HV=9fdQcjH}`eC0JgRUlT^b zr08fV;2K6gr+=yLW#^scH8qVC-Fa}nvIHEWGgi#keJD7TP!LofOL;R?zAZD8sWD+> zL_ZF)vfzh{;4H~#x}UslD*U|NGVRtM<2I_^$n(Ky2#46hbjvg8h@`eiTd|K7p z9M(108W(PD-TAt==P>ojXSUE;hU2@VljHTTN%T+#t)F?K<=2pV6YNynwz|s+rE1`k z4DGmI-Q6M#8UZF%GQdbHUu?gq)Oq*`x2-K&f0f_7=~`L3j&qv4mfF0=n^~gw!-UZ7$TwRL zZ(f|5`L&#ILZFf4T~&^WnK3aWW^{-A_hUK_?tA%wK29|;@*^Q%B}()C*4xbJWObgH z$XTB|$y=mfQ=A>C1oyHm&t2CuFtBrVr7JOfD=XhDIO;s~sxSSKo10T?sbHtPvhrWH zo2uviogOQcJ2n>9bQ&dF1=8Kwb z(x6f=sjE}W>6ht%gX@BblXr$wHK&e8QzC#jL zDJW?EdFryA?ZxTg{f8yqT-kYfYjdxS7V`&^ydr$#yJhq~VXqr!Dlynk$eNkzc)$Rd zfP}a^Iw~pM&kGpaxZPM+H|^=^**r6&6ecowoWgnWTVT;fB&*}xDe9loRToPvA%t~g z;z5V!W~kdjwVUUq0;O8%=-*y%g%|d9-&JrA^`y=0M~AT=FxMEH)!6PSsFIabyr5b^%(jLh>C3==bA@;p^1L$O)M{nF+TQ0=Hy+ zx2D_%{{A($81o;UZn?xS9u&Uh2;2K|vm?URwrh(>q|q+5d5k~8N4^dL%_!qun`jfI z?*7ch&i8ZlRu*TBqEP#LsdwLx_4iZhz-1T4$4{Hq*C($=XU{r<{v92$wYR5`^BTPu zSKww?^Sxc};=OS=fZ_l_;j+eJ*`)6~FR9t?s61pb$u}42u=^T+7Iow6#`8A z^Kf&`J+=mHNGU)p4Y|p8T8SP(Bp-7mUEjZGE&dkJgiVtCqR9L>`SU>hOM_}qzOBUE z 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 literal 19196 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 Date: Tue, 11 Aug 2026 11:09:05 -0400 Subject: [PATCH 5/7] fix(logitech): close the MX Master 4 outline at all four extremes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The rim is built by dilating the alpha mask and subtracting it, and the source render fills its own frame on every side, so the dilation had nowhere to expand at the borders. The ring came out broken at exactly the top, bottom, left and right of the shape. The previous attempt inset the finished composite, which only moved already-broken art inward: the gaps were baked into the mask long before that point. The canvas is now padded before any mask is built, and the hand-authored interior paths shift by the same amount to stay registered. Checked by walking the silhouette boundary and requiring a rim pixel on it, rather than by asking whether the artwork touched the canvas edge — which was the earlier test and says nothing about whether the ring is closed. The rejected version fails that walk at 113 boundary points. --- public/devices/logitech-mx-master-4.png | Bin 28431 -> 19845 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/devices/logitech-mx-master-4.png b/public/devices/logitech-mx-master-4.png index e15dfbc430a46f7c104b8f06e005264534a6a24d..8b80d24c854cedd272c7a3452440567de7875236 100644 GIT binary patch literal 19845 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 z z+uGaH0$VLrbKJw-z5eU++X`YRU#9D;rskl?c*#TQ!al;{A@=5ZgmC7A-ysWCmzVF^ z`H;G2lB>e?>NknrX|9MI%}2HRmimdo>V zqcIo=>9>Q=YGTchw|RMS7~w#v9J&qvGByDIOl-oXg_G)+jEY+)L zb+lsOxx*gkRoxXDD6kCGeEjE=UKd%XXz@GrUD3^!)(*GJ#9BWhAvPjRv&Va1i%xAG zJ{*f@etO=bsG?E@PuFz2&u>1-a_DNs=F&(7H5^e?#>HV=9fdQcjH}`eC0JgRUlT^b zr08fV;2K6gr+=yLW#^scH8qVC-Fa}nvIHEWGgi#keJD7TP!LofOL;R?zAZD8sWD+> zL_ZF)vfzh{;4H~#x}UslD*U|NGVRtM<2I_^$n(Ky2#46hbjvg8h@`eiTd|K7p z9M(108W(PD-TAt==P>ojXSUE;hU2@VljHTTN%T+#t)F?K<=2pV6YNynwz|s+rE1`k z4DGmI-Q6M#8UZF%GQdbHUu?gq)Oq*`x2-K&f0f_7=~`L3j&qv4mfF0=n^~gw!-UZ7$TwRL zZ(f|5`L&#ILZFf4T~&^WnK3aWW^{-A_hUK_?tA%wK29|;@*^Q%B}()C*4xbJWObgH z$XTB|$y=mfQ=A>C1oyHm&t2CuFtBrVr7JOfD=XhDIO;s~sxSSKo10T?sbHtPvhrWH zo2uviogOQcJ2n>9bQ&dF1=8Kwb z(x6f=sjE}W>6ht%gX@BblXr$wHK&e8QzC#jL zDJW?EdFryA?ZxTg{f8yqT-kYfYjdxS7V`&^ydr$#yJhq~VXqr!Dlynk$eNkzc)$Rd zfP}a^Iw~pM&kGpaxZPM+H|^=^**r6&6ecowoWgnWTVT;fB&*}xDe9loRToPvA%t~g z;z5V!W~kdjwVUUq0;O8%=-*y%g%|d9-&JrA^`y=0M~AT=FxMEH)!6PSsFIabyr5b^%(jLh>C3==bA@;p^1L$O)M{nF+TQ0=Hy+ zx2D_%{{A($81o;UZn?xS9u&Uh2;2K|vm?URwrh(>q|q+5d5k~8N4^dL%_!qun`jfI z?*7ch&i8ZlRu*TBqEP#LsdwLx_4iZhz-1T4$4{Hq*C($=XU{r<{v92$wYR5`^BTPu zSKww?^Sxc};=OS=fZ_l_;j+eJ*`)6~FR9t?s61pb$u}42u=^T+7Iow6#`8A z^Kf&`J+=mHNGU)p4Y|p8T8SP(Bp-7mUEjZGE&dkJgiVtCqR9L>`SU>hOM_}qzOBUE z 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 From a4bd370dbeae0e57a2a0e95f891145b0a4778dda Mon Sep 17 00:00:00 2001 From: Nick Welter Date: Tue, 11 Aug 2026 11:16:21 -0400 Subject: [PATCH 6/7] fix(logitech): align the button split across the wheel housing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The segment below the scroll wheel drifted left while the segment above it leans right, so the two halves of what is one line — the divider between the left and right click buttons, interrupted by the housing — finished about nine pixels apart in source space. The lower segment is now extrapolated from the upper one so the eye reads a single line passing behind the wheel. Measured on the rendered artwork rather than by eye: both settle within a pixel or two of each other and lean the same way. --- public/devices/logitech-mx-master-4.png | Bin 19845 -> 19810 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/devices/logitech-mx-master-4.png b/public/devices/logitech-mx-master-4.png index 8b80d24c854cedd272c7a3452440567de7875236..e0d8403399c5c51d8ca2be6f34f3642fb7a0db11 100644 GIT binary patch literal 19810 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 literal 19845 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 Date: Tue, 11 Aug 2026 14:08:32 -0600 Subject: [PATCH 7/7] chore: refresh mouse-protocol lockfile --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index e5edf043..165feaca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -459,7 +459,7 @@ }, "node_modules/@openmouse/protocol": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/OpenMouse-Project/mouse-protocol.git#673ede4c9b42c8e7bb200beb2c0400b3bd16c5cb", + "resolved": "git+ssh://git@github.com/OpenMouse-Project/mouse-protocol.git#23dd6a0759badcd461083f28d2f8b0a2f09e327f", "engines": { "node": ">=20" }