diff --git a/kcms/desktoptheme/package/contents/ui/main.qml b/kcms/desktoptheme/package/contents/ui/main.qml --- a/kcms/desktoptheme/package/contents/ui/main.qml +++ b/kcms/desktoptheme/package/contents/ui/main.qml @@ -25,7 +25,7 @@ import QtQuick.Controls 2.3 as QtControls import org.kde.kirigami 2.4 as Kirigami import org.kde.newstuff 1.62 as NewStuff -import org.kde.kcm 1.1 as KCM +import org.kde.kcm 1.3 as KCM import org.kde.private.kcms.desktoptheme 1.0 as Private @@ -35,7 +35,7 @@ view.model: kcm.filteredModel view.currentIndex: kcm.filteredModel.selectedThemeIndex - Binding { + Binding { target: kcm.filteredModel property: "query" value: searchField.text @@ -47,7 +47,13 @@ value: filterCombo.model[filterCombo.currentIndex].filter } - enabled: !kcm.downloadingFile && !kcm.desktopThemeSettings.isImmutable("name") + KCM.SettingStateBinding { + target: parent + configObject: kcm.desktopThemeSettings + itemName: "name" + extraEnabledPredicate: !kcm.downloadingFile + indicatorAsOverlay: true + } DropArea { anchors.fill: parent diff --git a/kcms/icons/package/contents/ui/IconSizePopup.qml b/kcms/icons/package/contents/ui/IconSizePopup.qml --- a/kcms/icons/package/contents/ui/IconSizePopup.qml +++ b/kcms/icons/package/contents/ui/IconSizePopup.qml @@ -22,6 +22,7 @@ import QtQuick.Layouts 1.1 import QtQuick.Controls 2.3 as QtControls import org.kde.kirigami 2.4 as Kirigami +import org.kde.kcm 1.3 as KCM QtControls.Popup { id: iconSizePopup @@ -110,7 +111,13 @@ to: sizes.length - 1 stepSize: 1.0 snapMode: QtControls.Slider.SnapAlways - enabled: sizes.length > 0 && !kcm.iconsSettings.isImmutable(iconTypeList.currentItem.configKey) + + KCM.SettingStateBinding { + target: parent + configObject: kcm.iconsSettings + itemName: iconTypeList.currentItem.configKey + extraEnabledPredicate: parent.sizes.length > 0 + } onMoved: { kcm.iconsSettings[iconTypeList.currentItem.configKey] = iconSizeSlider.sizes[iconSizeSlider.value] || 0 diff --git a/kcms/icons/package/contents/ui/main.qml b/kcms/icons/package/contents/ui/main.qml --- a/kcms/icons/package/contents/ui/main.qml +++ b/kcms/icons/package/contents/ui/main.qml @@ -26,20 +26,27 @@ import org.kde.kirigami 2.4 as Kirigami import org.kde.kquickcontrolsaddons 2.0 as KQCAddons import org.kde.newstuff 1.62 as NewStuff -import org.kde.kcm 1.1 as KCM +import org.kde.kcm 1.3 as KCM import org.kde.private.kcms.icons 1.0 as Private KCM.GridViewKCM { + id: root KCM.ConfigModule.quickHelp: i18n("This module allows you to choose the icons for your desktop.") view.model: kcm.iconsModel view.currentIndex: kcm.pluginIndex(kcm.iconsSettings.theme) enabled: !kcm.downloadingFile - view.enabled: !kcm.iconsSettings.isImmutable("Theme") + + KCM.SettingStateBinding { + target: view + configObject: kcm.iconsSettings + itemName: "Theme" + indicatorAsOverlay: true + } DropArea { - enabled: !kcm.iconsSettings.isImmutable("Theme") + enabled: view.enabled anchors.fill: parent onEntered: { if (!drag.hasUrls) { @@ -244,15 +251,16 @@ } QtControls.Button { - enabled: !kcm.iconsSettings.isImmutable("Theme") id: installFromFileButton + enabled: root.view.enabled text: i18n("Install from File...") icon.name: "document-import" onClicked: fileDialogLoader.active = true } NewStuff.Button { id: newStuffButton + enabled: root.view.enabled text: i18n("Get New Icons...") configFile: "icons.knsrc" viewMode: NewStuff.Page.ViewMode.Preview diff --git a/kcms/workspaceoptions/package/contents/ui/main.qml b/kcms/workspaceoptions/package/contents/ui/main.qml --- a/kcms/workspaceoptions/package/contents/ui/main.qml +++ b/kcms/workspaceoptions/package/contents/ui/main.qml @@ -20,7 +20,7 @@ import QtQuick.Controls 2.5 as QQC2 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.5 as Kirigami -import org.kde.kcm 1.2 as KCM +import org.kde.kcm 1.3 as KCM import org.kde.plasma.core 2.0 as PlasmaCore @@ -37,23 +37,33 @@ id: showToolTips Kirigami.FormData.label: i18n("Visual behavior:") text: i18n("Display informational tooltips on mouse hover") - enabled: !kcm.plasmaSettings.isImmutable("delay") checked: kcm.plasmaSettings.delay > 0 onCheckedChanged: { if (checked) { kcm.plasmaSettings.delay = 0.7 } else { kcm.plasmaSettings.delay = -1 } } + + KCM.SettingStateBinding { + target: parent + configObject: kcm.plasmaSettings + itemName: "delay" + } } QQC2.CheckBox { id: showVisualFeedback text: i18n("Display visual feedback for status changes") - enabled: !kcm.plasmaSettings.isImmutable("osdEnabled") checked: kcm.plasmaSettings.osdEnabled onCheckedChanged: kcm.plasmaSettings.osdEnabled = checked + + KCM.SettingStateBinding { + target: parent + configObject: kcm.plasmaSettings + itemName: "osdEnabled" + } } Item { @@ -64,7 +74,6 @@ // move from 4x, 3x, 2x, 1x, 0.5x, 0.25x, 0.125x // 0 is a special case ColumnLayout { - enabled: !kcm.globalsSettings.isImmutable("animationDurationFactor") Kirigami.FormData.label: i18n("Animation speed:") Kirigami.FormData.buddyFor: slider @@ -87,6 +96,12 @@ } else { return -(Math.log(kcm.globalsSettings.animationDurationFactor) / Math.log(2)); } + + KCM.SettingStateBinding { + target: parent + configObject: kcm.globalsSettings + itemName: "animationDurationFactor" + } } RowLayout { QQC2.Label { @@ -113,16 +128,21 @@ id: singleClick Kirigami.FormData.label: i18n("Click behavior:") text: i18n("Single-click to open files and folders") - enabled: !kcm.globalsSettings.isImmutable("singleClick") checked: kcm.globalsSettings.singleClick onToggled: kcm.globalsSettings.singleClick = true QQC2.ButtonGroup.group: singleClickGroup + + KCM.SettingStateBinding { + target: parent + configObject: kcm.globalsSettings + itemName: "singleClick" + } } QQC2.RadioButton { id: doubleClick text: i18n("Double-click to open files and folders") - enabled: !kcm.globalsSettings.isImmutable("singleClick") + enabled: singleClick.enabled checked: !kcm.globalsSettings.singleClick onToggled: kcm.globalsSettings.singleClick = false QQC2.ButtonGroup.group: singleClickGroup @@ -147,16 +167,21 @@ id: scrollbarLeftClickNavigatesByPage Kirigami.FormData.label: i18n("Clicking in scrollbar track:") text: i18nc("@radio part of a complete sentence: 'Clicking in scrollbar track scrolls one page up or down'", "Scrolls one page up or down") - enabled: !kcm.globalsSettings.isImmutable("scrollbarLeftClickNavigatesByPage") checked: kcm.globalsSettings.scrollbarLeftClickNavigatesByPage onToggled: kcm.globalsSettings.scrollbarLeftClickNavigatesByPage = true QQC2.ButtonGroup.group: scrollHandleBehaviorGroup + + KCM.SettingStateBinding { + target: parent + configObject: kcm.globalsSettings + itemName: "scrollbarLeftClickNavigatesByPage" + } } QQC2.RadioButton { id: scrollBarLeftClickWarpsScrollHandle text: i18nc("@radio part of a complete sentence: 'Clicking in scrollbar track scrolls to the clicked location'", "Scrolls to the clicked location") - enabled: !kcm.globalsSettings.isImmutable("scrollbarLeftClickNavigatesByPage") + enabled: scrollbarLeftClickNavigatesByPage.enabled checked: !kcm.globalsSettings.scrollbarLeftClickNavigatesByPage onToggled: kcm.globalsSettings.scrollbarLeftClickNavigatesByPage = false QQC2.ButtonGroup.group: scrollHandleBehaviorGroup