feat: add source whitelist mode (#21)

This commit is contained in:
2026-07-12 09:53:52 +00:00
parent e9e693c0a5
commit a3ae405280
4 changed files with 26 additions and 1 deletions
+4
View File
@@ -74,6 +74,10 @@ PLAYING]]></default>
<label>Source priority</label> <label>Source priority</label>
<default></default> <default></default>
</entry> </entry>
<entry name="sourceWhitelist" type="Bool">
<label>Only use listed sources</label>
<default>false</default>
</entry>
<entry name="trackTextVerticalSpacing" type="Int"> <entry name="trackTextVerticalSpacing" type="Int">
<label>Track text vertical spacing</label> <label>Track text vertical spacing</label>
<default>5</default> <default>5</default>
+4
View File
@@ -14,6 +14,7 @@ QtObject {
readonly property int containerRole: Qt.UserRole + 1 readonly property int containerRole: Qt.UserRole + 1
property string sourceName: "any" property string sourceName: "any"
property string sourcePriority: "" property string sourcePriority: ""
property bool sourceWhitelist: false
property var mpris2Model property var mpris2Model
property int modelRevision: 0 property int modelRevision: 0
readonly property var normalizedSourcePriority: parseSourcePriority(sourcePriority) readonly property var normalizedSourcePriority: parseSourcePriority(sourcePriority)
@@ -99,6 +100,9 @@ QtObject {
return matchedPlayer; return matchedPlayer;
} }
if (sourceWhitelist && normalizedSourcePriority.length > 0)
return null;
return mpris2Model.currentPlayer || null; return mpris2Model.currentPlayer || null;
} }
+15 -1
View File
@@ -26,6 +26,7 @@ KCM.SimpleKCM {
property alias cfg_textShadowEnabled: textShadowCheckBox.checked property alias cfg_textShadowEnabled: textShadowCheckBox.checked
property alias cfg_showMediaControls: showMediaControlsCheckBox.checked property alias cfg_showMediaControls: showMediaControlsCheckBox.checked
property alias cfg_sourcePriority: sourcePriorityField.text property alias cfg_sourcePriority: sourcePriorityField.text
property alias cfg_sourceWhitelist: sourceWhitelistCheckBox.checked
property alias cfg_trackTextVerticalSpacing: trackTextVerticalSpacingSpinBox.value property alias cfg_trackTextVerticalSpacing: trackTextVerticalSpacingSpinBox.value
property alias cfg_labelVerticalSpacing: labelVerticalSpacingSpinBox.value property alias cfg_labelVerticalSpacing: labelVerticalSpacingSpinBox.value
property alias cfg_separatorGapLabel: separatorGapLabelSpinBox.value property alias cfg_separatorGapLabel: separatorGapLabelSpinBox.value
@@ -59,6 +60,9 @@ KCM.SimpleKCM {
"text": i18n("Solid background"), "text": i18n("Solid background"),
"value": "default" "value": "default"
}] }]
readonly property bool hasSourcePriorityEntries: sourcePriorityField.text.split(",").some((entry) => {
return normalizeDesktopEntry(entry).length > 0;
})
function syncComboByValue(comboBox, options, configuredValue, fallbackValue) { function syncComboByValue(comboBox, options, configuredValue, fallbackValue) {
const requestedValue = configuredValue || fallbackValue; const requestedValue = configuredValue || fallbackValue;
@@ -97,6 +101,7 @@ KCM.SimpleKCM {
detectedSources = sources; detectedSources = sources;
} }
Component.onCompleted: cfg_sourceWhitelist = hasSourcePriorityEntries && cfg_sourceWhitelist
onCfg_fontFamilyChanged: { onCfg_fontFamilyChanged: {
const index = availableFonts.indexOf(cfg_fontFamily); const index = availableFonts.indexOf(cfg_fontFamily);
if (index >= 0 && fontFamilyComboBox.currentIndex !== index) if (index >= 0 && fontFamilyComboBox.currentIndex !== index)
@@ -222,7 +227,16 @@ KCM.SimpleKCM {
Kirigami.FormData.label: i18n("Source priority:") Kirigami.FormData.label: i18n("Source priority:")
Layout.fillWidth: true 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 { QQC2.Label {
+3
View File
@@ -45,6 +45,8 @@ PlasmoidItem {
// qmllint disable missing-property // qmllint disable missing-property
property string configuredSourcePriority: plasmoid.configuration.sourcePriority property string configuredSourcePriority: plasmoid.configuration.sourcePriority
// qmllint disable missing-property // qmllint disable missing-property
property bool configuredSourceWhitelist: plasmoid.configuration.sourceWhitelist
// qmllint disable missing-property
property int configuredTrackTextVerticalSpacing: plasmoid.configuration.trackTextVerticalSpacing property int configuredTrackTextVerticalSpacing: plasmoid.configuration.trackTextVerticalSpacing
// qmllint disable missing-property // qmllint disable missing-property
property int configuredLabelVerticalSpacing: plasmoid.configuration.labelVerticalSpacing property int configuredLabelVerticalSpacing: plasmoid.configuration.labelVerticalSpacing
@@ -77,6 +79,7 @@ PlasmoidItem {
id: player id: player
sourcePriority: root.configuredSourcePriority sourcePriority: root.configuredSourcePriority
sourceWhitelist: root.configuredSourceWhitelist
} }
fullRepresentation: Representation { fullRepresentation: Representation {