diff --git a/quickshell/Services/PrivacyService.qml b/quickshell/Services/PrivacyService.qml index 42364b0e..49088621 100644 --- a/quickshell/Services/PrivacyService.qml +++ b/quickshell/Services/PrivacyService.qml @@ -6,6 +6,7 @@ import QtQuick import Quickshell import Quickshell.Io import Quickshell.Services.Pipewire +import qs.Services Singleton { id: root @@ -58,6 +59,10 @@ Singleton { } readonly property bool screensharingActive: { + if (CompositorService.isNiri && NiriService.hasActiveCast) { + return true + } + if (!Pipewire.ready || !Pipewire.nodes?.values) { return false } @@ -74,6 +79,12 @@ Singleton { } } + if (node.properties && node.properties["media.class"] === "Stream/Output/Video") { + if (looksLikeScreencast(node)) { + return true + } + } + if (node.properties && node.properties["media.class"] === "Stream/Input/Audio") { const mediaName = (node.properties["media.name"] || "").toLowerCase() const appName = (node.properties["application.name"] || "").toLowerCase() @@ -110,8 +121,9 @@ Singleton { } const appName = (node.properties && node.properties["application.name"] || "").toLowerCase() const nodeName = (node.name || "").toLowerCase() - const combined = appName + " " + nodeName - return /xdg-desktop-portal|xdpw|screencast|screen|gnome shell|kwin|obs/.test(combined) + const mediaName = (node.properties && node.properties["media.name"] || "").toLowerCase() + const combined = appName + " " + nodeName + " " + mediaName + return /xdg-desktop-portal|xdpw|screencast|screen-cast|screen|gnome shell|kwin|obs|niri/.test(combined) } function getMicrophoneStatus() {