diff --git a/app/layouts/synchronizer.cpp b/app/layouts/synchronizer.cpp index 915b8cf5a..12e7e90f4 100644 --- a/app/layouts/synchronizer.cpp +++ b/app/layouts/synchronizer.cpp @@ -72,6 +72,11 @@ Synchronizer::~Synchronizer() m_activitiesController->deleteLater(); } +KActivities::Controller *Synchronizer::activitiesController() const +{ + return m_activitiesController; +} + bool Synchronizer::latteViewExists(Latte::View *view) const { for (const auto layout : m_centralLayouts) { diff --git a/app/layouts/synchronizer.h b/app/layouts/synchronizer.h index 7c4f936b4..5aad42d1a 100644 --- a/app/layouts/synchronizer.h +++ b/app/layouts/synchronizer.h @@ -111,6 +111,8 @@ public: SharedLayout *sharedLayout(QString id) const; Layout::GenericLayout *layout(QString id) const; + KActivities::Controller *activitiesController() const; + signals: void centralLayoutsChanged(); void currentLayoutNameChanged(); diff --git a/app/settings/settingsdialog.cpp b/app/settings/settingsdialog.cpp index 7f41d7656..615fbae5a 100644 --- a/app/settings/settingsdialog.cpp +++ b/app/settings/settingsdialog.cpp @@ -654,12 +654,30 @@ void SettingsDialog::on_switchButton_clicked() if (!m_layoutsController->selectedLayoutIsCurrentActive()) { bool appliedShared = m_layoutsController->inMultipleMode() && selectedLayout.isShared(); + bool freeActivitiesLayoutUpdated{false}; if (!appliedShared && selectedLayout.activities.isEmpty()) { m_layoutsController->setLayoutNameForFreeActivities(selectedLayout.currentName(), true); + freeActivitiesLayoutUpdated = true; } - m_corona->layoutsManager()->switchToLayout(selectedLayout.originalName()); + if (m_layoutsController->inMultipleMode()) { + m_corona->layoutsManager()->switchToLayout(selectedLayout.originalName()); + } else { + if (freeActivitiesLayoutUpdated) { + m_corona->layoutsManager()->switchToLayout(selectedLayout.originalName()); + } else { + CentralLayout singleLayout(this, selectedLayout.id); + + QString switchToActivity = selectedLayout.isForFreeActivities() ? singleLayout.lastUsedActivity() : selectedLayout.activities[0]; + + if (!m_corona->activitiesConsumer()->runningActivities().contains(switchToActivity)) { + m_corona->layoutsManager()->synchronizer()->activitiesController()->startActivity(switchToActivity); + } + + m_corona->layoutsManager()->synchronizer()->activitiesController()->setCurrentActivity(switchToActivity); + } + } } updatePerLayoutButtonsState();