diff --git a/kcms/desktoptheme/desktopthemesettings.kcfgc b/kcms/desktoptheme/desktopthemesettings.kcfgc --- a/kcms/desktoptheme/desktopthemesettings.kcfgc +++ b/kcms/desktoptheme/desktopthemesettings.kcfgc @@ -3,3 +3,4 @@ Mutators=true DefaultValueGetters=true GenerateProperties=true +ParentInConstructor=true diff --git a/kcms/desktoptheme/kcm.h b/kcms/desktoptheme/kcm.h --- a/kcms/desktoptheme/kcm.h +++ b/kcms/desktoptheme/kcm.h @@ -102,7 +102,6 @@ DesktopThemeSettings *m_settings; QStandardItemModel *m_model; - QString m_currentTheme; QStringList m_pendingRemoval; QHash m_themes; bool m_haveThemeExplorerInstalled; diff --git a/kcms/desktoptheme/kcm.cpp b/kcms/desktoptheme/kcm.cpp --- a/kcms/desktoptheme/kcm.cpp +++ b/kcms/desktoptheme/kcm.cpp @@ -51,12 +51,9 @@ KCMDesktopTheme::KCMDesktopTheme(QObject *parent, const QVariantList &args) : KQuickAddons::ConfigModule(parent, args) - , m_settings(new DesktopThemeSettings) + , m_settings(new DesktopThemeSettings(this)) , m_haveThemeExplorerInstalled(false) { - // Unfortunately doesn't generate a ctor taking the parent as parameter - m_settings->setParent(this); - m_currentTheme = m_settings->name(); connect(m_settings, &DesktopThemeSettings::configChanged, this, &KCMDesktopTheme::updateNeedsSave); connect(m_settings, &DesktopThemeSettings::nameChanged, @@ -279,25 +276,21 @@ m_model->sort(0 /*column*/); m_settings->load(); - m_currentTheme = m_settings->name(); // Model has been cleared so pretend the theme name changed to force view update emit m_settings->nameChanged(); } void KCMDesktopTheme::save() { m_settings->save(); - m_currentTheme = m_settings->name(); Plasma::Theme().setThemeName(m_settings->name()); processPendingDeletions(); - updateNeedsSave(); } void KCMDesktopTheme::defaults() { m_settings->setDefaults(); - m_currentTheme = m_settings->name(); // can this be done more elegantly? const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true); @@ -319,7 +312,7 @@ void KCMDesktopTheme::updateNeedsSave() { setNeedsSave(!m_model->match(m_model->index(0, 0), PendingDeletionRole, true).isEmpty() - || m_currentTheme != m_settings->name()); + || m_settings->isSaveNeeded()); } void KCMDesktopTheme::processPendingDeletions()