Changeset View
Changeset View
Standalone View
Standalone View
kcms/desktoptheme/kcm.cpp
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Line(s) | |||||
45 | 45 | | |||
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::ManagedConfigModule(parent, args) | ||
54 | , m_settings(new DesktopThemeSettings(this)) | 54 | , m_settings(new DesktopThemeSettings(this)) | ||
55 | , m_haveThemeExplorerInstalled(false) | 55 | , m_haveThemeExplorerInstalled(false) | ||
56 | { | 56 | { | ||
57 | connect(m_settings, &DesktopThemeSettings::configChanged, | | |||
58 | this, &KCMDesktopTheme::updateNeedsSave); | | |||
59 | connect(m_settings, &DesktopThemeSettings::nameChanged, | | |||
60 | this, &KCMDesktopTheme::updateNeedsSave); | | |||
61 | | ||||
62 | qmlRegisterType<DesktopThemeSettings>(); | 57 | qmlRegisterType<DesktopThemeSettings>(); | ||
63 | qmlRegisterType<QStandardItemModel>(); | 58 | qmlRegisterType<QStandardItemModel>(); | ||
64 | 59 | | |||
65 | KAboutData* about = new KAboutData(QStringLiteral("kcm_desktoptheme"), i18n("Plasma Style"), | 60 | KAboutData* about = new KAboutData(QStringLiteral("kcm_desktoptheme"), i18n("Plasma Style"), | ||
66 | QStringLiteral("0.1"), QString(), KAboutLicense::LGPL); | 61 | QStringLiteral("0.1"), QString(), KAboutLicense::LGPL); | ||
67 | about->addAuthor(i18n("David Rosca"), QString(), QStringLiteral("nowrep@gmail.com")); | 62 | about->addAuthor(i18n("David Rosca"), QString(), QStringLiteral("nowrep@gmail.com")); | ||
68 | setAboutData(about); | 63 | setAboutData(about); | ||
69 | setButtons(Apply | Default | Help); | 64 | setButtons(Apply | Default | Help); | ||
▲ Show 20 Lines • Show All 149 Lines • ▼ Show 20 Line(s) | 203 | { | |||
219 | Q_FOREACH (Plasma::Svg *svg, item->findChildren<Plasma::Svg*>()) { | 214 | Q_FOREACH (Plasma::Svg *svg, item->findChildren<Plasma::Svg*>()) { | ||
220 | svg->setTheme(theme); | 215 | svg->setTheme(theme); | ||
221 | svg->setUsingRenderingCache(false); | 216 | svg->setUsingRenderingCache(false); | ||
222 | } | 217 | } | ||
223 | } | 218 | } | ||
224 | 219 | | |||
225 | void KCMDesktopTheme::load() | 220 | void KCMDesktopTheme::load() | ||
226 | { | 221 | { | ||
222 | ManagedConfigModule::load(); | ||||
223 | | ||||
227 | m_pendingRemoval.clear(); | 224 | m_pendingRemoval.clear(); | ||
228 | 225 | | |||
229 | // Get all desktop themes | 226 | // Get all desktop themes | ||
230 | QStringList themes; | 227 | QStringList themes; | ||
231 | const QStringList &packs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("plasma/desktoptheme"), QStandardPaths::LocateDirectory); | 228 | const QStringList &packs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("plasma/desktoptheme"), QStandardPaths::LocateDirectory); | ||
232 | Q_FOREACH (const QString &ppath, packs) { | 229 | Q_FOREACH (const QString &ppath, packs) { | ||
233 | const QDir cd(ppath); | 230 | const QDir cd(ppath); | ||
234 | const QStringList &entries = cd.entryList(QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot); | 231 | const QStringList &entries = cd.entryList(QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot); | ||
Show All 35 Lines | 260 | if (m_model->findItems(packageName).isEmpty()) { | |||
270 | item->setData(false, PendingDeletionRole); | 267 | item->setData(false, PendingDeletionRole); | ||
271 | m_model->appendRow(item); | 268 | m_model->appendRow(item); | ||
272 | } | 269 | } | ||
273 | } | 270 | } | ||
274 | 271 | | |||
275 | m_model->setSortRole(ThemeNameRole); // FIXME the model should really be just using Qt::DisplayRole | 272 | m_model->setSortRole(ThemeNameRole); // FIXME the model should really be just using Qt::DisplayRole | ||
276 | m_model->sort(0 /*column*/); | 273 | m_model->sort(0 /*column*/); | ||
277 | 274 | | |||
278 | m_settings->load(); | | |||
279 | | ||||
280 | // Model has been cleared so pretend the theme name changed to force view update | 275 | // Model has been cleared so pretend the theme name changed to force view update | ||
281 | emit m_settings->nameChanged(); | 276 | emit m_settings->nameChanged(); | ||
282 | } | 277 | } | ||
283 | 278 | | |||
284 | void KCMDesktopTheme::save() | 279 | void KCMDesktopTheme::save() | ||
285 | { | 280 | { | ||
286 | m_settings->save(); | 281 | ManagedConfigModule::save(); | ||
287 | Plasma::Theme().setThemeName(m_settings->name()); | 282 | Plasma::Theme().setThemeName(m_settings->name()); | ||
288 | processPendingDeletions(); | 283 | processPendingDeletions(); | ||
289 | } | 284 | } | ||
290 | 285 | | |||
291 | void KCMDesktopTheme::defaults() | 286 | void KCMDesktopTheme::defaults() | ||
292 | { | 287 | { | ||
293 | m_settings->setDefaults(); | 288 | ManagedConfigModule::defaults(); | ||
294 | 289 | | |||
295 | // can this be done more elegantly? | 290 | // can this be done more elegantly? | ||
296 | const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true); | 291 | const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true); | ||
297 | for (const QModelIndex &idx : pendingDeletions) { | 292 | for (const QModelIndex &idx : pendingDeletions) { | ||
298 | m_model->setData(idx, false, PendingDeletionRole); | 293 | m_model->setData(idx, false, PendingDeletionRole); | ||
299 | } | 294 | } | ||
300 | } | 295 | } | ||
301 | 296 | | |||
302 | bool KCMDesktopTheme::canEditThemes() const | 297 | bool KCMDesktopTheme::canEditThemes() const | ||
303 | { | 298 | { | ||
304 | return m_haveThemeExplorerInstalled; | 299 | return m_haveThemeExplorerInstalled; | ||
305 | } | 300 | } | ||
306 | 301 | | |||
307 | void KCMDesktopTheme::editTheme(const QString &theme) | 302 | void KCMDesktopTheme::editTheme(const QString &theme) | ||
308 | { | 303 | { | ||
309 | QProcess::startDetached(QStringLiteral("plasmathemeexplorer -t ") % theme); | 304 | QProcess::startDetached(QStringLiteral("plasmathemeexplorer -t ") % theme); | ||
310 | } | 305 | } | ||
311 | 306 | | |||
312 | void KCMDesktopTheme::updateNeedsSave() | 307 | bool KCMDesktopTheme::isSaveNeeded() const | ||
313 | { | 308 | { | ||
314 | setNeedsSave(!m_model->match(m_model->index(0, 0), PendingDeletionRole, true).isEmpty() | 309 | return !m_model->match(m_model->index(0, 0), PendingDeletionRole, true).isEmpty(); | ||
315 | || m_settings->isSaveNeeded()); | | |||
316 | } | 310 | } | ||
317 | 311 | | |||
318 | void KCMDesktopTheme::processPendingDeletions() | 312 | void KCMDesktopTheme::processPendingDeletions() | ||
319 | { | 313 | { | ||
320 | const QString program = QStringLiteral("plasmapkg2"); | 314 | const QString program = QStringLiteral("plasmapkg2"); | ||
321 | 315 | | |||
322 | const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true, -1 /*all*/); | 316 | const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true, -1 /*all*/); | ||
323 | QVector<QPersistentModelIndex> persistentPendingDeletions; | 317 | QVector<QPersistentModelIndex> persistentPendingDeletions; | ||
Show All 34 Lines |