From 0536cf4140917c7caa86284f32c312d02c0ffd5e Mon Sep 17 00:00:00 2001 From: Nicolas Fella Date: Mon, 29 Aug 2022 21:48:12 +0200 Subject: [PATCH] [kcms/style] Fix setting to default and apply button enablement Track the selected GTK theme in the model only. This fixes setting to default when the GTK pages was never opened Override isSaveNeeded instead of calling setNeedsSave, this fixes the apply button enablement --- kcms/style/gtkpage.cpp | 14 ++++++-------- kcms/style/gtkpage.h | 4 +--- kcms/style/gtkthemesmodel.cpp | 1 + kcms/style/kcmstyle.cpp | 6 +++++- kcms/style/kcmstyle.h | 1 + kcms/style/package/contents/ui/GtkStylePage.qml | 9 +-------- 6 files changed, 15 insertions(+), 20 deletions(-) diff --git a/kcms/style/gtkpage.cpp b/kcms/style/gtkpage.cpp index 4f96836f2..155d236ab 100644 --- a/kcms/style/gtkpage.cpp +++ b/kcms/style/gtkpage.cpp @@ -31,12 +31,6 @@ GtkPage::GtkPage(QObject *parent) GtkPage::~GtkPage() = default; -QString GtkPage::gtkThemeFromConfig() -{ - // FIXME make aysnc but that requires some refactoring on the UI side - return m_gtkConfigInterface.gtkTheme().value(); -} - bool GtkPage::gtkPreviewAvailable() { return !QStandardPaths::findExecutable(QStringLiteral("gtk3_preview"), {CMAKE_INSTALL_FULL_LIBEXECDIR}).isEmpty(); @@ -94,17 +88,21 @@ void GtkPage::save() void GtkPage::defaults() { - Q_EMIT selectGtkThemeInCombobox(QStringLiteral("Breeze")); + m_gtkThemesModel->setSelectedTheme(QStringLiteral("Breeze")); } void GtkPage::load() { m_gtkThemesModel->load(); m_gtkThemesModel->setSelectedTheme(m_gtkConfigInterface.gtkTheme()); - Q_EMIT selectGtkThemeInCombobox(gtkThemeFromConfig()); } bool GtkPage::isDefaults() const { return m_gtkThemesModel->selectedTheme() == QLatin1String("Breeze"); } + +bool GtkPage::isSaveNeeded() +{ + return m_gtkThemesModel->selectedTheme() != m_gtkConfigInterface.gtkTheme(); +} diff --git a/kcms/style/gtkpage.h b/kcms/style/gtkpage.h index efcdd7259..1e9c29502 100644 --- a/kcms/style/gtkpage.h +++ b/kcms/style/gtkpage.h @@ -27,10 +27,9 @@ public: void save(); void defaults(); bool isDefaults() const; + bool isSaveNeeded(); public Q_SLOTS: - QString gtkThemeFromConfig(); - bool gtkPreviewAvailable(); void showGtkPreview(); @@ -43,7 +42,6 @@ Q_SIGNALS: void gtkThemesModelChanged(GtkThemesModel *model); void showErrorMessage(const QString &message); - void selectGtkThemeInCombobox(const QString &themeName); void gtkThemeSettingsChanged(); diff --git a/kcms/style/gtkthemesmodel.cpp b/kcms/style/gtkthemesmodel.cpp index cc8ec389e..b8face2d9 100644 --- a/kcms/style/gtkthemesmodel.cpp +++ b/kcms/style/gtkthemesmodel.cpp @@ -103,6 +103,7 @@ QMap GtkThemesModel::themesList() void GtkThemesModel::setSelectedTheme(const QString &themeName) { m_selectedTheme = themeName; + Q_EMIT selectedThemeChanged(themeName); } QString GtkThemesModel::selectedTheme() diff --git a/kcms/style/kcmstyle.cpp b/kcms/style/kcmstyle.cpp index 9af4b64f3..3581886ee 100644 --- a/kcms/style/kcmstyle.cpp +++ b/kcms/style/kcmstyle.cpp @@ -90,7 +90,6 @@ KCMStyle::KCMStyle(QObject *parent, const KPluginMetaData &data, const QVariantL m_gtkPage = new GtkPage(this); connect(m_gtkPage, &GtkPage::gtkThemeSettingsChanged, this, [this]() { settingsChanged(); - setNeedsSave(true); }); } @@ -338,4 +337,9 @@ bool KCMStyle::isDefaults() const return m_gtkPage->isDefaults(); } +bool KCMStyle::isSaveNeeded() const +{ + return m_gtkPage->isSaveNeeded(); +} + #include "kcmstyle.moc" diff --git a/kcms/style/kcmstyle.h b/kcms/style/kcmstyle.h index 05ed04071..8224a4c66 100644 --- a/kcms/style/kcmstyle.h +++ b/kcms/style/kcmstyle.h @@ -76,6 +76,7 @@ public: void defaults() override; bool isDefaults() const override; + bool isSaveNeeded() const override; Q_SIGNALS: void showErrorMessage(const QString &message); diff --git a/kcms/style/package/contents/ui/GtkStylePage.qml b/kcms/style/package/contents/ui/GtkStylePage.qml index 4ea61ad3a..7d100880d 100644 --- a/kcms/style/package/contents/ui/GtkStylePage.qml +++ b/kcms/style/package/contents/ui/GtkStylePage.qml @@ -49,20 +49,13 @@ Kirigami.Page { QtControls.ComboBox { id: gtkThemeCombo model: kcm.gtkPage.gtkThemesModel - currentIndex: model.findThemeIndex(kcm.gtkPage.gtkThemeFromConfig()) + currentIndex: model.findThemeIndex(kcm.gtkPage.gtkThemesModel.selectedTheme) onCurrentTextChanged: function() { model.selectedTheme = currentText gtkRemoveButton.enabled = model.selectedThemeRemovable() } onActivated: model.setSelectedThemeDirty() textRole: "theme-name" - - Connections { - target: kcm.gtkPage - function onSelectGtkThemeInCombobox(themeName) { - gtkThemeCombo.currentIndex = gtkThemeCombo.model.findThemeIndex(themeName) - } - } } QtControls.Button {