diff --git a/app/layoutmanager.cpp b/app/layoutmanager.cpp index 56a8b1422..0c8628e87 100644 --- a/app/layoutmanager.cpp +++ b/app/layoutmanager.cpp @@ -126,45 +126,9 @@ void LayoutManager::unload() //! Unload all CentralLayouts while (!m_centralLayouts.isEmpty()) { CentralLayout *layout = m_centralLayouts.at(0); - m_centralLayouts.removeFirst(); - - if (m_multipleModeInitialized) { - layout->syncToLayoutFile(true); - } - - layout->unloadContainments(); - layout->unloadLatteViews(); - - if (m_multipleModeInitialized) { - clearUnloadedContainmentsFromLinkedFile(layout->unloadedContainmentsIds(), true); - } - - delete layout; + unloadCentralLayout(layout); } - //! Unload all SharedLayouts - //! DEPRECATED as now SharedLayouts are unloading themselves when - //! they have no central layouts assigned to them - /*while (!m_sharedLayouts.isEmpty()) { - SharedLayout *layout = m_sharedLayouts.at(0); - m_sharedLayouts.removeFirst(); - - unloadSharedLayout(layout); - - if (multipleMode) { - layout->syncToLayoutFile(true); - } - - layout->unloadContainments(); - layout->unloadLatteViews(); - - if (multipleMode) { - clearUnloadedContainmentsFromLinkedFile(layout->unloadedContainmentsIds(), true); - } - - delete layout; - }*/ - m_multipleModeInitialized = false; //! Remove no-needed temp files @@ -181,6 +145,28 @@ void LayoutManager::unload() file2.remove(); } +void LayoutManager::unloadCentralLayout(CentralLayout *layout) +{ + int pos = m_centralLayouts.indexOf(layout); + + if (pos>=0) { + CentralLayout *central = m_centralLayouts.takeAt(0); + + if (m_multipleModeInitialized) { + central->syncToLayoutFile(true); + } + + central->unloadContainments(); + central->unloadLatteViews(); + + if (m_multipleModeInitialized) { + clearUnloadedContainmentsFromLinkedFile(central->unloadedContainmentsIds(), true); + } + + delete central; + } +} + void LayoutManager::unloadSharedLayout(SharedLayout *layout) { if (m_sharedLayouts.contains(layout)) { diff --git a/app/layoutmanager.h b/app/layoutmanager.h index 8404058e0..13ad2843f 100644 --- a/app/layoutmanager.h +++ b/app/layoutmanager.h @@ -79,6 +79,8 @@ public: void load(); void loadLayoutOnStartup(QString layoutName); void unload(); + void unloadCentralLayout(CentralLayout *layout); + void hideAllViews(); void pauseLayout(QString layoutName); void syncLatteViewsToScreens(); diff --git a/app/settings/settingsdialog.cpp b/app/settings/settingsdialog.cpp index 94241332a..617fc13ad 100644 --- a/app/settings/settingsdialog.cpp +++ b/app/settings/settingsdialog.cpp @@ -1679,6 +1679,14 @@ void SettingsDialog::updateActiveShares() QHash unassign; + //! CENTRAL (active) layouts that will become SHARED must be unloaded first + for (QHash::iterator i=currentSharesMap.begin(); i!=currentSharesMap.end(); ++i) { + CentralLayout *central = m_corona->layoutManager()->centralLayout(nameForId(i.key())); + if (central) { + m_corona->layoutManager()->unloadCentralLayout(central); + } + } + //! CENTRAL (active) layouts that update their (active) SHARED layouts //! AND load SHARED layouts that are NOT ACTIVE for (QHash::iterator i=currentSharesMap.begin(); i!=currentSharesMap.end(); ++i) {