From a3ae4052806aa8fa95d284f287a0f80600b95185 Mon Sep 17 00:00:00 2001 From: ruinivist Date: Sun, 12 Jul 2026 09:53:52 +0000 Subject: [PATCH] feat: add source whitelist mode (#21) --- package/contents/config/main.xml | 4 ++++ package/contents/ui/Player.qml | 4 ++++ package/contents/ui/configGeneral.qml | 16 +++++++++++++++- package/contents/ui/main.qml | 3 +++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/package/contents/config/main.xml b/package/contents/config/main.xml index ac567bd..46b6508 100644 --- a/package/contents/config/main.xml +++ b/package/contents/config/main.xml @@ -74,6 +74,10 @@ PLAYING]]> + + + false + 5 diff --git a/package/contents/ui/Player.qml b/package/contents/ui/Player.qml index 2064321..ca46d4f 100644 --- a/package/contents/ui/Player.qml +++ b/package/contents/ui/Player.qml @@ -14,6 +14,7 @@ QtObject { readonly property int containerRole: Qt.UserRole + 1 property string sourceName: "any" property string sourcePriority: "" + property bool sourceWhitelist: false property var mpris2Model property int modelRevision: 0 readonly property var normalizedSourcePriority: parseSourcePriority(sourcePriority) @@ -99,6 +100,9 @@ QtObject { return matchedPlayer; } + if (sourceWhitelist && normalizedSourcePriority.length > 0) + return null; + return mpris2Model.currentPlayer || null; } diff --git a/package/contents/ui/configGeneral.qml b/package/contents/ui/configGeneral.qml index a26bedb..3340512 100644 --- a/package/contents/ui/configGeneral.qml +++ b/package/contents/ui/configGeneral.qml @@ -26,6 +26,7 @@ KCM.SimpleKCM { property alias cfg_textShadowEnabled: textShadowCheckBox.checked property alias cfg_showMediaControls: showMediaControlsCheckBox.checked property alias cfg_sourcePriority: sourcePriorityField.text + property alias cfg_sourceWhitelist: sourceWhitelistCheckBox.checked property alias cfg_trackTextVerticalSpacing: trackTextVerticalSpacingSpinBox.value property alias cfg_labelVerticalSpacing: labelVerticalSpacingSpinBox.value property alias cfg_separatorGapLabel: separatorGapLabelSpinBox.value @@ -59,6 +60,9 @@ KCM.SimpleKCM { "text": i18n("Solid background"), "value": "default" }] + readonly property bool hasSourcePriorityEntries: sourcePriorityField.text.split(",").some((entry) => { + return normalizeDesktopEntry(entry).length > 0; + }) function syncComboByValue(comboBox, options, configuredValue, fallbackValue) { const requestedValue = configuredValue || fallbackValue; @@ -97,6 +101,7 @@ KCM.SimpleKCM { detectedSources = sources; } + Component.onCompleted: cfg_sourceWhitelist = hasSourcePriorityEntries && cfg_sourceWhitelist onCfg_fontFamilyChanged: { const index = availableFonts.indexOf(cfg_fontFamily); if (index >= 0 && fontFamilyComboBox.currentIndex !== index) @@ -222,7 +227,16 @@ KCM.SimpleKCM { Kirigami.FormData.label: i18n("Source priority:") Layout.fillWidth: true - placeholderText: i18n("spotify, firefox") + placeholderText: i18n("example: spotify, firefox") + onTextChanged: configRoot.cfg_sourceWhitelist = configRoot.hasSourcePriorityEntries && configRoot.cfg_sourceWhitelist + } + + QQC2.CheckBox { + id: sourceWhitelistCheckBox + + Kirigami.FormData.label: "" + text: i18n("Only use listed sources") + enabled: configRoot.hasSourcePriorityEntries } QQC2.Label { diff --git a/package/contents/ui/main.qml b/package/contents/ui/main.qml index 5c8a7c4..2c296ac 100644 --- a/package/contents/ui/main.qml +++ b/package/contents/ui/main.qml @@ -45,6 +45,8 @@ PlasmoidItem { // qmllint disable missing-property property string configuredSourcePriority: plasmoid.configuration.sourcePriority // qmllint disable missing-property + property bool configuredSourceWhitelist: plasmoid.configuration.sourceWhitelist + // qmllint disable missing-property property int configuredTrackTextVerticalSpacing: plasmoid.configuration.trackTextVerticalSpacing // qmllint disable missing-property property int configuredLabelVerticalSpacing: plasmoid.configuration.labelVerticalSpacing @@ -77,6 +79,7 @@ PlasmoidItem { id: player sourcePriority: root.configuredSourcePriority + sourceWhitelist: root.configuredSourceWhitelist } fullRepresentation: Representation {