diff --git a/app/dockcorona.h b/app/dockcorona.h index 9f86928b9..f5081ea48 100644 --- a/app/dockcorona.h +++ b/app/dockcorona.h @@ -102,6 +102,7 @@ public slots: void loadDefaultLayout() override; void dockContainmentDestroyed(QObject *cont); void updateDockItemBadge(QString identifier, QString value); + void unload(); signals: void configurationShown(PlasmaQuick::ConfigView *configView); @@ -126,7 +127,6 @@ private: void cleanConfig(); void qmlRegisterTypes() const; void setupWaylandIntegration(); - void unload(); bool appletExists(uint containmentId, uint appletId) const; bool containmentContainsTasks(Plasma::Containment *cont); diff --git a/app/layoutconfigdialog.cpp b/app/layoutconfigdialog.cpp index a3ee64df6..372a542ba 100644 --- a/app/layoutconfigdialog.cpp +++ b/app/layoutconfigdialog.cpp @@ -344,6 +344,8 @@ bool LayoutConfigDialog::saveAllChanges() QStringList toRenamePaths; QStringList toRenameNames; + QString switchToLayout; + for (int i = 0; i < m_model->rowCount(); ++i) { QString id = m_model->data(m_model->index(i, 0), Qt::DisplayRole).toString(); QString color = m_model->data(m_model->index(i, 1), Qt::BackgroundRole).toString(); @@ -376,9 +378,15 @@ bool LayoutConfigDialog::saveAllChanges() layout->setActivities(cleanedActivities); } - if (layout->name() != name && layout->name() != m_manager->currentLayoutName()) { + if (layout->name() != name) { QString tempFile = layoutTempDir.filePath(QString(layout->name() + ".layout.latte")); qDebug() << "new temp file ::: " << tempFile; + + if (layout->name() == m_manager->currentLayoutName()) { + switchToLayout = name; + m_manager->corona()->unload(); + } + layout = m_layouts.take(id); delete layout; @@ -411,6 +419,10 @@ bool LayoutConfigDialog::saveAllChanges() m_manager->loadLayouts(); + if (!switchToLayout.isNull()) { + m_manager->switchToLayout(switchToLayout); + } + return true; }