diff --git a/kcmkwin/kwindesktop/animationsmodel.h b/kcmkwin/kwindesktop/animationsmodel.h --- a/kcmkwin/kwindesktop/animationsmodel.h +++ b/kcmkwin/kwindesktop/animationsmodel.h @@ -31,6 +31,7 @@ Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) Q_PROPERTY(bool currentConfigurable READ currentConfigurable NOTIFY currentConfigurableChanged) + Q_PROPERTY(bool isImmutable READ isImmutable WRITE setIsImmutable NOTIFY isImmutableChanged) public: explicit AnimationsModel(QObject *parent = nullptr); @@ -43,6 +44,9 @@ bool currentConfigurable() const; + bool isImmutable() const; + void setIsImmutable(bool isImmutable); + void load(); void save(); void defaults(); @@ -53,18 +57,21 @@ void enabledChanged(); void currentIndexChanged(); void currentConfigurableChanged(); + void isImmutableChanged(bool isImmutable); protected: bool shouldStore(const EffectData &data) const override; private: Status status(int row) const; bool modelCurrentEnabled() const; int modelCurrentIndex() const; + void loadImmutability(); bool m_enabled = false; int m_currentIndex = -1; bool m_currentConfigurable = false; + bool m_isImmutable = false; Q_DISABLE_COPY(AnimationsModel) }; diff --git a/kcmkwin/kwindesktop/animationsmodel.cpp b/kcmkwin/kwindesktop/animationsmodel.cpp --- a/kcmkwin/kwindesktop/animationsmodel.cpp +++ b/kcmkwin/kwindesktop/animationsmodel.cpp @@ -30,6 +30,7 @@ [this] { setEnabled(modelCurrentEnabled()); setCurrentIndex(modelCurrentIndex()); + loadImmutability(); } ); connect(this, &AnimationsModel::currentIndexChanged, this, @@ -78,6 +79,21 @@ return m_currentConfigurable; } +bool AnimationsModel::isImmutable() const +{ + return m_isImmutable; +} + +void AnimationsModel::setIsImmutable(bool isImmutable) +{ + if (m_isImmutable == isImmutable) { + return; + } + + m_isImmutable = isImmutable; + emit isImmutableChanged(m_isImmutable); +} + bool AnimationsModel::shouldStore(const EffectData &data) const { return data.untranslatedCategory.contains( @@ -111,6 +127,21 @@ return 0; } +void AnimationsModel::loadImmutability() +{ + // Since there are many entries, consider one is enough to set immutability of + // switching animation option + KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), "Plugins"); + for (int i = 0; i < rowCount(); ++i) { + const QModelIndex index_ = index(i, 0); + const QString entryName = index_.data(ServiceNameRole).toString() + QLatin1String("Enabled"); + if (kwinConfig.isEntryImmutable(entryName)) { + setIsImmutable(true); + break; + } + } +} + void AnimationsModel::load() { EffectsModel::load(); diff --git a/kcmkwin/kwindesktop/package/contents/ui/main.qml b/kcmkwin/kwindesktop/package/contents/ui/main.qml --- a/kcmkwin/kwindesktop/package/contents/ui/main.qml +++ b/kcmkwin/kwindesktop/package/contents/ui/main.qml @@ -63,7 +63,7 @@ Layout.alignment: Qt.AlignVCenter - text: model.display + text: !!model && model.display readOnly: true @@ -76,7 +76,7 @@ actions: [ Kirigami.Action { - enabled: !model.IsMissing + enabled: !!model && !model.IsMissing iconName: "edit-rename" tooltip: i18nc("@info:tooltip", "Rename") onTriggered: { @@ -86,7 +86,7 @@ } }, Kirigami.Action { - enabled: !model.IsMissing + enabled: !!model && !model.IsMissing && !kcm.isNumberImmutable iconName: "edit-delete-remove" tooltip: i18nc("@info:tooltip", "Remove") onTriggered: kcm.desktopsModel.removeDesktop(model.Id) @@ -106,7 +106,7 @@ text: kcm.desktopsModel.error - visible: kcm.desktopsModel.error != "" + visible: kcm.desktopsModel.error !== "" } Kirigami.InlineMessage { @@ -141,6 +141,7 @@ footer: ColumnLayout { RowLayout { QQC2.Button { + enabled: !kcm.isNumberImmutable text: i18nc("@action:button", "Add") icon.name: "list-add" @@ -157,6 +158,7 @@ from: 1 to: 20 editable: true + enabled: !kcm.isRowsImmutable textFromValue: function(value, locale) { return i18np("1 Row", "%1 Rows", value)} valueFromText: function(text, locale) { return parseInt(text, 10); } @@ -180,6 +182,7 @@ RowLayout { Layout.fillWidth: true + enabled: !kcm.animationsModel.isImmutable QQC2.CheckBox { id: animationEnabled diff --git a/kcmkwin/kwindesktop/virtualdesktops.h b/kcmkwin/kwindesktop/virtualdesktops.h --- a/kcmkwin/kwindesktop/virtualdesktops.h +++ b/kcmkwin/kwindesktop/virtualdesktops.h @@ -37,6 +37,8 @@ Q_PROPERTY(QAbstractItemModel* desktopsModel READ desktopsModel CONSTANT) Q_PROPERTY(QAbstractItemModel *animationsModel READ animationsModel CONSTANT) Q_PROPERTY(VirtualDesktopsSettings *virtualDesktopsSettings READ virtualDesktopsSettings CONSTANT) + Q_PROPERTY(bool isNumberImmutable READ isNumberImmutable CONSTANT) + Q_PROPERTY(bool isRowsImmutable READ isRowsImmutable CONSTANT) public: explicit VirtualDesktops(QObject *parent = nullptr, const QVariantList &list = QVariantList()); @@ -48,6 +50,9 @@ VirtualDesktopsSettings *virtualDesktopsSettings() const; + bool isNumberImmutable() const; + bool isRowsImmutable() const; + bool isDefaults() const override; bool isSaveNeeded() const override; @@ -63,6 +68,8 @@ VirtualDesktopsSettings *m_settings; DesktopsModel *m_desktopsModel; AnimationsModel *m_animationsModel; + bool m_isNumberImmutable = false; + bool m_isRowsImmutable = false; }; } diff --git a/kcmkwin/kwindesktop/virtualdesktops.cpp b/kcmkwin/kwindesktop/virtualdesktops.cpp --- a/kcmkwin/kwindesktop/virtualdesktops.cpp +++ b/kcmkwin/kwindesktop/virtualdesktops.cpp @@ -52,6 +52,10 @@ this, &VirtualDesktops::settingsChanged); connect(m_animationsModel, &AnimationsModel::currentIndexChanged, this, &VirtualDesktops::settingsChanged); + + KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), "Desktops"); + m_isNumberImmutable = kwinConfig.isEntryImmutable("Number"); + m_isRowsImmutable = kwinConfig.isEntryImmutable("Rows"); } VirtualDesktops::~VirtualDesktops() @@ -73,6 +77,16 @@ return m_settings; } +bool VirtualDesktops::isNumberImmutable() const +{ + return m_isNumberImmutable; +} + +bool VirtualDesktops::isRowsImmutable() const +{ + return m_isRowsImmutable; +} + void VirtualDesktops::load() { ManagedConfigModule::load();