Changeset View
Changeset View
Standalone View
Standalone View
kcms/desktoptheme/kcm.cpp
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Line(s) | |||||
46 | #include "desktopthemesettings.h" | 46 | #include "desktopthemesettings.h" | ||
47 | 47 | | |||
48 | Q_LOGGING_CATEGORY(KCM_DESKTOP_THEME, "kcm_desktoptheme") | 48 | Q_LOGGING_CATEGORY(KCM_DESKTOP_THEME, "kcm_desktoptheme") | ||
49 | 49 | | |||
50 | K_PLUGIN_FACTORY_WITH_JSON(KCMDesktopThemeFactory, "kcm_desktoptheme.json", registerPlugin<KCMDesktopTheme>();) | 50 | K_PLUGIN_FACTORY_WITH_JSON(KCMDesktopThemeFactory, "kcm_desktoptheme.json", registerPlugin<KCMDesktopTheme>();) | ||
51 | 51 | | |||
52 | KCMDesktopTheme::KCMDesktopTheme(QObject *parent, const QVariantList &args) | 52 | KCMDesktopTheme::KCMDesktopTheme(QObject *parent, const QVariantList &args) | ||
53 | : KQuickAddons::ConfigModule(parent, args) | 53 | : KQuickAddons::ConfigModule(parent, args) | ||
54 | , m_settings(new DesktopThemeSettings) | 54 | , m_settings(new DesktopThemeSettings(this)) | ||
55 | , m_haveThemeExplorerInstalled(false) | 55 | , m_haveThemeExplorerInstalled(false) | ||
56 | { | 56 | { | ||
57 | // Unfortunately doesn't generate a ctor taking the parent as parameter | | |||
58 | m_settings->setParent(this); | | |||
59 | m_currentTheme = m_settings->name(); | | |||
60 | connect(m_settings, &DesktopThemeSettings::configChanged, | 57 | connect(m_settings, &DesktopThemeSettings::configChanged, | ||
61 | this, &KCMDesktopTheme::updateNeedsSave); | 58 | this, &KCMDesktopTheme::updateNeedsSave); | ||
62 | connect(m_settings, &DesktopThemeSettings::nameChanged, | 59 | connect(m_settings, &DesktopThemeSettings::nameChanged, | ||
63 | this, &KCMDesktopTheme::updateNeedsSave); | 60 | this, &KCMDesktopTheme::updateNeedsSave); | ||
64 | 61 | | |||
65 | qmlRegisterType<DesktopThemeSettings>(); | 62 | qmlRegisterType<DesktopThemeSettings>(); | ||
66 | qmlRegisterType<QStandardItemModel>(); | 63 | qmlRegisterType<QStandardItemModel>(); | ||
67 | 64 | | |||
▲ Show 20 Lines • Show All 206 Lines • ▼ Show 20 Line(s) | 263 | if (m_model->findItems(packageName).isEmpty()) { | |||
274 | m_model->appendRow(item); | 271 | m_model->appendRow(item); | ||
275 | } | 272 | } | ||
276 | } | 273 | } | ||
277 | 274 | | |||
278 | m_model->setSortRole(ThemeNameRole); // FIXME the model should really be just using Qt::DisplayRole | 275 | m_model->setSortRole(ThemeNameRole); // FIXME the model should really be just using Qt::DisplayRole | ||
279 | m_model->sort(0 /*column*/); | 276 | m_model->sort(0 /*column*/); | ||
280 | 277 | | |||
281 | m_settings->load(); | 278 | m_settings->load(); | ||
282 | m_currentTheme = m_settings->name(); | | |||
283 | 279 | | |||
284 | // Model has been cleared so pretend the theme name changed to force view update | 280 | // Model has been cleared so pretend the theme name changed to force view update | ||
285 | emit m_settings->nameChanged(); | 281 | emit m_settings->nameChanged(); | ||
286 | } | 282 | } | ||
287 | 283 | | |||
288 | void KCMDesktopTheme::save() | 284 | void KCMDesktopTheme::save() | ||
289 | { | 285 | { | ||
290 | m_settings->save(); | 286 | m_settings->save(); | ||
291 | m_currentTheme = m_settings->name(); | | |||
292 | Plasma::Theme().setThemeName(m_settings->name()); | 287 | Plasma::Theme().setThemeName(m_settings->name()); | ||
293 | processPendingDeletions(); | 288 | processPendingDeletions(); | ||
294 | updateNeedsSave(); | | |||
295 | } | 289 | } | ||
296 | 290 | | |||
297 | void KCMDesktopTheme::defaults() | 291 | void KCMDesktopTheme::defaults() | ||
298 | { | 292 | { | ||
299 | m_settings->setDefaults(); | 293 | m_settings->setDefaults(); | ||
300 | m_currentTheme = m_settings->name(); | | |||
301 | 294 | | |||
302 | // can this be done more elegantly? | 295 | // can this be done more elegantly? | ||
303 | const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true); | 296 | const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true); | ||
304 | for (const QModelIndex &idx : pendingDeletions) { | 297 | for (const QModelIndex &idx : pendingDeletions) { | ||
305 | m_model->setData(idx, false, PendingDeletionRole); | 298 | m_model->setData(idx, false, PendingDeletionRole); | ||
306 | } | 299 | } | ||
307 | } | 300 | } | ||
308 | 301 | | |||
309 | bool KCMDesktopTheme::canEditThemes() const | 302 | bool KCMDesktopTheme::canEditThemes() const | ||
310 | { | 303 | { | ||
311 | return m_haveThemeExplorerInstalled; | 304 | return m_haveThemeExplorerInstalled; | ||
312 | } | 305 | } | ||
313 | 306 | | |||
314 | void KCMDesktopTheme::editTheme(const QString &theme) | 307 | void KCMDesktopTheme::editTheme(const QString &theme) | ||
315 | { | 308 | { | ||
316 | QProcess::startDetached(QStringLiteral("plasmathemeexplorer -t ") % theme); | 309 | QProcess::startDetached(QStringLiteral("plasmathemeexplorer -t ") % theme); | ||
317 | } | 310 | } | ||
318 | 311 | | |||
319 | void KCMDesktopTheme::updateNeedsSave() | 312 | void KCMDesktopTheme::updateNeedsSave() | ||
320 | { | 313 | { | ||
321 | setNeedsSave(!m_model->match(m_model->index(0, 0), PendingDeletionRole, true).isEmpty() | 314 | setNeedsSave(!m_model->match(m_model->index(0, 0), PendingDeletionRole, true).isEmpty() | ||
322 | || m_currentTheme != m_settings->name()); | 315 | || m_settings->isSaveNeeded()); | ||
323 | } | 316 | } | ||
324 | 317 | | |||
325 | void KCMDesktopTheme::processPendingDeletions() | 318 | void KCMDesktopTheme::processPendingDeletions() | ||
326 | { | 319 | { | ||
327 | const QString program = QStringLiteral("plasmapkg2"); | 320 | const QString program = QStringLiteral("plasmapkg2"); | ||
328 | 321 | | |||
329 | const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true, -1 /*all*/); | 322 | const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true, -1 /*all*/); | ||
330 | QVector<QPersistentModelIndex> persistentPendingDeletions; | 323 | QVector<QPersistentModelIndex> persistentPendingDeletions; | ||
Show All 34 Lines |