[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
wilder-5.26
Nicolas Fella 4 years ago
parent 0c1157a0c2
commit 0536cf4140
  1. 14
      kcms/style/gtkpage.cpp
  2. 4
      kcms/style/gtkpage.h
  3. 1
      kcms/style/gtkthemesmodel.cpp
  4. 6
      kcms/style/kcmstyle.cpp
  5. 1
      kcms/style/kcmstyle.h
  6. 9
      kcms/style/package/contents/ui/GtkStylePage.qml

@ -31,12 +31,6 @@ GtkPage::GtkPage(QObject *parent)
GtkPage::~GtkPage() = default; 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() bool GtkPage::gtkPreviewAvailable()
{ {
return !QStandardPaths::findExecutable(QStringLiteral("gtk3_preview"), {CMAKE_INSTALL_FULL_LIBEXECDIR}).isEmpty(); return !QStandardPaths::findExecutable(QStringLiteral("gtk3_preview"), {CMAKE_INSTALL_FULL_LIBEXECDIR}).isEmpty();
@ -94,17 +88,21 @@ void GtkPage::save()
void GtkPage::defaults() void GtkPage::defaults()
{ {
Q_EMIT selectGtkThemeInCombobox(QStringLiteral("Breeze")); m_gtkThemesModel->setSelectedTheme(QStringLiteral("Breeze"));
} }
void GtkPage::load() void GtkPage::load()
{ {
m_gtkThemesModel->load(); m_gtkThemesModel->load();
m_gtkThemesModel->setSelectedTheme(m_gtkConfigInterface.gtkTheme()); m_gtkThemesModel->setSelectedTheme(m_gtkConfigInterface.gtkTheme());
Q_EMIT selectGtkThemeInCombobox(gtkThemeFromConfig());
} }
bool GtkPage::isDefaults() const bool GtkPage::isDefaults() const
{ {
return m_gtkThemesModel->selectedTheme() == QLatin1String("Breeze"); return m_gtkThemesModel->selectedTheme() == QLatin1String("Breeze");
} }
bool GtkPage::isSaveNeeded()
{
return m_gtkThemesModel->selectedTheme() != m_gtkConfigInterface.gtkTheme();
}

@ -27,10 +27,9 @@ public:
void save(); void save();
void defaults(); void defaults();
bool isDefaults() const; bool isDefaults() const;
bool isSaveNeeded();
public Q_SLOTS: public Q_SLOTS:
QString gtkThemeFromConfig();
bool gtkPreviewAvailable(); bool gtkPreviewAvailable();
void showGtkPreview(); void showGtkPreview();
@ -43,7 +42,6 @@ Q_SIGNALS:
void gtkThemesModelChanged(GtkThemesModel *model); void gtkThemesModelChanged(GtkThemesModel *model);
void showErrorMessage(const QString &message); void showErrorMessage(const QString &message);
void selectGtkThemeInCombobox(const QString &themeName);
void gtkThemeSettingsChanged(); void gtkThemeSettingsChanged();

@ -103,6 +103,7 @@ QMap<QString, QString> GtkThemesModel::themesList()
void GtkThemesModel::setSelectedTheme(const QString &themeName) void GtkThemesModel::setSelectedTheme(const QString &themeName)
{ {
m_selectedTheme = themeName; m_selectedTheme = themeName;
Q_EMIT selectedThemeChanged(themeName);
} }
QString GtkThemesModel::selectedTheme() QString GtkThemesModel::selectedTheme()

@ -90,7 +90,6 @@ KCMStyle::KCMStyle(QObject *parent, const KPluginMetaData &data, const QVariantL
m_gtkPage = new GtkPage(this); m_gtkPage = new GtkPage(this);
connect(m_gtkPage, &GtkPage::gtkThemeSettingsChanged, this, [this]() { connect(m_gtkPage, &GtkPage::gtkThemeSettingsChanged, this, [this]() {
settingsChanged(); settingsChanged();
setNeedsSave(true);
}); });
} }
@ -338,4 +337,9 @@ bool KCMStyle::isDefaults() const
return m_gtkPage->isDefaults(); return m_gtkPage->isDefaults();
} }
bool KCMStyle::isSaveNeeded() const
{
return m_gtkPage->isSaveNeeded();
}
#include "kcmstyle.moc" #include "kcmstyle.moc"

@ -76,6 +76,7 @@ public:
void defaults() override; void defaults() override;
bool isDefaults() const override; bool isDefaults() const override;
bool isSaveNeeded() const override;
Q_SIGNALS: Q_SIGNALS:
void showErrorMessage(const QString &message); void showErrorMessage(const QString &message);

@ -49,20 +49,13 @@ Kirigami.Page {
QtControls.ComboBox { QtControls.ComboBox {
id: gtkThemeCombo id: gtkThemeCombo
model: kcm.gtkPage.gtkThemesModel model: kcm.gtkPage.gtkThemesModel
currentIndex: model.findThemeIndex(kcm.gtkPage.gtkThemeFromConfig()) currentIndex: model.findThemeIndex(kcm.gtkPage.gtkThemesModel.selectedTheme)
onCurrentTextChanged: function() { onCurrentTextChanged: function() {
model.selectedTheme = currentText model.selectedTheme = currentText
gtkRemoveButton.enabled = model.selectedThemeRemovable() gtkRemoveButton.enabled = model.selectedThemeRemovable()
} }
onActivated: model.setSelectedThemeDirty() onActivated: model.setSelectedThemeDirty()
textRole: "theme-name" textRole: "theme-name"
Connections {
target: kcm.gtkPage
function onSelectGtkThemeInCombobox(themeName) {
gtkThemeCombo.currentIndex = gtkThemeCombo.model.findThemeIndex(themeName)
}
}
} }
QtControls.Button { QtControls.Button {

Loading…
Cancel
Save