From 04fdf9ca7980b594ea674d8755b730569a550d26 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Wed, 7 Oct 2026 19:06:02 +0200 Subject: fix(island): neutral idle sliver, flag scroll via MouseArea The sliver was the accent at rest, and udt had snapped the accent to the same colour as the mic indicator (#36d190), so an idle sliver read as a live microphone. It is Theme.overlay at rest now; captures keep their colours whatever the wallpaper does. The flag's WheelHandler never fired. MouseArea.onWheel, which SoundPage already uses, does; scroll now switches layout, one step per notch. Co-Authored-By: Claude Opus 5.5 --- desktop/island/Island.qml | 8 +++++--- desktop/island/StatusPill.qml | 17 +++++++++++------ docs/superpowers/specs/2026-10-07-island-core-design.md | 3 ++- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/desktop/island/Island.qml b/desktop/island/Island.qml index b471e3c..0cb3c10 100644 --- a/desktop/island/Island.qml +++ b/desktop/island/Island.qml @@ -146,8 +146,10 @@ PanelWindow { Region { item: status; intersection: Intersection.Combine } } - // The visible sliver: accent at rest, the capture colours while - // something captures, one equal segment per active kind. + // The visible sliver: neutral at rest, the capture colours while + // something captures, one equal segment per active kind. Not the accent + // at rest: udt snaps the accent to a palette colour, and when it lands on + // green an idle sliver read exactly like a live microphone. Row { id: sliver x: win.cx - width / 2 @@ -156,7 +158,7 @@ PanelWindow { height: 4 Repeater { - model: Privacy.roles.length ? Privacy.roles : ["accent"] + model: Privacy.roles.length ? Privacy.roles : ["overlay"] delegate: Rectangle { required property string modelData width: sliver.width / Math.max(1, Privacy.roles.length) diff --git a/desktop/island/StatusPill.qml b/desktop/island/StatusPill.qml index 344117c..5ab8f95 100644 --- a/desktop/island/StatusPill.qml +++ b/desktop/island/StatusPill.qml @@ -93,13 +93,18 @@ Capsule { // One switch per wheel notch (120). A touchpad sends many small // deltas, and switching on each made the count erratic. - WheelHandler { + // A MouseArea, not a WheelHandler: the handler never fired here, + // while MouseArea.onWheel is what SoundPage already relies on. + MouseArea { + anchors.fill: parent property real acc: 0 - onWheel: event => { - acc += event.angleDelta.y; - if (Math.abs(acc) < 120) return; - Keyboard.cycle(acc > 0 ? "prev" : "next"); - acc = 0; + onWheel: wheel => { + acc += wheel.angleDelta.y; + if (Math.abs(acc) >= 120) { + Keyboard.cycle(acc > 0 ? "prev" : "next"); + acc = 0; + } + wheel.accepted = true; } } } diff --git a/docs/superpowers/specs/2026-10-07-island-core-design.md b/docs/superpowers/specs/2026-10-07-island-core-design.md index 0110432..858e75c 100644 --- a/docs/superpowers/specs/2026-10-07-island-core-design.md +++ b/docs/superpowers/specs/2026-10-07-island-core-design.md @@ -73,7 +73,8 @@ translucent and still works. ## States **Hidden.** Only the sliver shows: a short, thin bar at top centre in -`Theme.accent`. While anything captures, the sliver takes the capture colours +`Theme.overlay`, neutral, because udt can snap the accent to the same colour +as a capture kind (green, measured: accent and green both `#36d190`). While anything captures, the sliver takes the capture colours instead, split into equal segments, one per active kind: | Kind | Colour | Source | -- cgit v1.2.3