diff --git a/modules/Privacy.qml b/modules/Privacy.qml index 549743b..01e6652 100644 --- a/modules/Privacy.qml +++ b/modules/Privacy.qml @@ -7,12 +7,13 @@ Row { id: root spacing: M.Theme.moduleSpacing - readonly property bool _screenShare: { + // Only detect active client streams, not hardware sources/devices + readonly property bool _videoCapture: { if (!Pipewire.nodes) return false; for (const node of Pipewire.nodes.values) { if (!node.isStream) continue; const mc = node.properties?.["media.class"] ?? ""; - if (mc.includes("Video")) return true; + if (mc === "Stream/Input/Video" || mc === "Stream/Output/Video") return true; } return false; } @@ -27,11 +28,11 @@ Row { return false; } - visible: root._screenShare || root._audioIn + visible: root._videoCapture || root._audioIn // Screenshare indicator Text { - visible: root._screenShare + visible: root._videoCapture text: "\uF03D" color: M.Theme.base08 font.pixelSize: M.Theme.fontSize + 2 @@ -48,7 +49,7 @@ Row { } SequentialAnimation on opacity { - running: root._screenShare + running: root._videoCapture loops: Animation.Infinite NumberAnimation { to: 0.4; duration: 600; easing.type: Easing.InOutQuad } NumberAnimation { to: 1; duration: 600; easing.type: Easing.InOutQuad } diff --git a/modules/Theme.qml b/modules/Theme.qml index 6c9e834..e89dbfa 100644 --- a/modules/Theme.qml +++ b/modules/Theme.qml @@ -34,7 +34,7 @@ QtObject { property int barSpacing: 12 property int moduleSpacing: 4 property int radius: 4 - property int screenRadius: 15 + property int screenRadius: 20 property FileView _themeFile: FileView { path: (Quickshell.env("XDG_CONFIG_HOME") || (Quickshell.env("HOME") + "/.config")) + "/nova-shell/theme.json"