diff --git a/shell/containmentconfigview.cpp b/shell/containmentconfigview.cpp --- a/shell/containmentconfigview.cpp +++ b/shell/containmentconfigview.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include @@ -44,6 +45,16 @@ #include #include +class WallpaperConfigModel: public PlasmaQuick::ConfigModel +{ + Q_OBJECT +public: + WallpaperConfigModel(QObject *parent); +public Q_SLOTS: + void repopulate(); +}; + + //////////////////////////////ContainmentConfigView ContainmentConfigView::ContainmentConfigView(Plasma::Containment *cont, QWindow *parent) : ConfigView(cont, parent), @@ -114,15 +125,12 @@ PlasmaQuick::ConfigModel *ContainmentConfigView::wallpaperConfigModel() { if (!m_wallpaperConfigModel) { - m_wallpaperConfigModel = new PlasmaQuick::ConfigModel(this); - - for (const KPluginMetaData &m : KPackage::PackageLoader::self()->listPackages(QStringLiteral("Plasma/Wallpaper"))) { - KPackage::Package pkg = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("Plasma/Wallpaper"), m.pluginId()); - if (!pkg.isValid()) { - continue; - } - m_wallpaperConfigModel->appendCategory(pkg.metadata().iconName(), pkg.metadata().name(), pkg.fileUrl("ui", QStringLiteral("config.qml")).toString(), m.pluginId()); - } + m_wallpaperConfigModel = new WallpaperConfigModel(this); + QDBusConnection::sessionBus().connect(QString(), QStringLiteral("/KPackage/Plasma/Wallpaper"), QStringLiteral("org.kde.plasma.kpackage"), QStringLiteral("packageInstalled"), + m_wallpaperConfigModel, SLOT(repopulate())) ; + QDBusConnection::sessionBus().connect(QString(), QStringLiteral("/KPackage/Plasma/Wallpaper"), QStringLiteral("org.kde.plasma.kpackage"), QStringLiteral("packageUninstalled"), + m_wallpaperConfigModel, SLOT(repopulate())); + } return m_wallpaperConfigModel; } @@ -214,4 +222,22 @@ m_currentWallpaperConfig = static_cast(wallpaperGraphicsObject->property("configuration").value()); } -#include "moc_containmentconfigview.cpp" +WallpaperConfigModel::WallpaperConfigModel(QObject *parent) + :PlasmaQuick::ConfigModel(parent) +{ + repopulate(); +} + +void WallpaperConfigModel::repopulate() +{ + clear(); + for (const KPluginMetaData &m : KPackage::PackageLoader::self()->listPackages(QStringLiteral("Plasma/Wallpaper"))) { + KPackage::Package pkg = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("Plasma/Wallpaper"), m.pluginId()); + if (!pkg.isValid()) { + continue; + } + appendCategory(pkg.metadata().iconName(), pkg.metadata().name(), pkg.fileUrl("ui", QStringLiteral("config.qml")).toString(), m.pluginId()); + } +} + +#include "containmentconfigview.moc"