From 9092e54fc091657cbabf17694380316408f1f29d Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Mon, 3 Aug 2020 18:13:37 +0300 Subject: [PATCH] enable Multiple Layouts mode in wayland --enable multiple layouts mode partially and try to provide at least one central layout combined with a shared layout --- app/lattecorona.cpp | 6 +----- app/layouts/synchronizer.cpp | 14 +++++++++++++- app/settings/handlers/tablayoutshandler.cpp | 4 ---- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/lattecorona.cpp b/app/lattecorona.cpp index 56614aded..6b1a44027 100644 --- a/app/lattecorona.cpp +++ b/app/lattecorona.cpp @@ -254,16 +254,12 @@ void Corona::load() loadLayoutName = m_layoutNameOnStartUp; } - if (m_userSetMemoryUsage != -1 && !KWindowSystem::isPlatformWayland()) { + if (m_userSetMemoryUsage != -1) { MemoryUsage::LayoutsMemory usage = static_cast(m_userSetMemoryUsage); m_universalSettings->setLayoutsMemoryUsage(usage); } - if (KWindowSystem::isPlatformWayland()) { - m_universalSettings->setLayoutsMemoryUsage(MemoryUsage::SingleLayout); - } - m_layoutsManager->loadLayoutOnStartup(loadLayoutName); diff --git a/app/layouts/synchronizer.cpp b/app/layouts/synchronizer.cpp index ebef45faa..3fcca75e7 100644 --- a/app/layouts/synchronizer.cpp +++ b/app/layouts/synchronizer.cpp @@ -40,6 +40,7 @@ // KDE #include #include +#include namespace Latte { namespace Layouts { @@ -829,7 +830,17 @@ void Synchronizer::syncMultipleLayoutsToActivities(QString layoutForFreeActiviti layoutForFreeActivities = m_manager->corona()->universalSettings()->lastNonAssignedLayoutName(); } + //! discover layouts that are needed based on running activities for (const auto &activity : runningActivities()) { + if (KWindowSystem::isPlatformWayland() && (m_activitiesController->currentActivity() != activity)){ + //! Wayland Protection: Plasma wayland does not support yet Activities but on the other hand that + //! does not mean that Central layouts can not be accompanied by their relevant shared layout. + //! The optimal behavior is that only ONE central layout and ONE shared layout can be loaded each time. + //! If the user changes in an activity that needs a different central layout then in that case + //! the new central layout is loaded and the old one is unloaded. + continue; + } + if (m_assignedLayouts.contains(activity)) { if (!layoutsToLoad.contains(m_assignedLayouts[activity])) { layoutsToLoad.append(m_assignedLayouts[activity]); @@ -839,6 +850,7 @@ void Synchronizer::syncMultipleLayoutsToActivities(QString layoutForFreeActiviti } } + //! discover layouts that must be unloaded because of running activities changes for (const auto layout : m_centralLayouts) { QString tempLayoutName; @@ -872,7 +884,7 @@ void Synchronizer::syncMultipleLayoutsToActivities(QString layoutForFreeActiviti } //! Add Layout for free activities - if (layoutForFreeActivitiesIsNeeded { + if (layoutForFreeActivitiesIsNeeded) { if (!centralLayout(layoutForFreeActivities) && !sharedLayout(layoutForFreeActivities)) { //! CENTRAL Layout for FreeActivities is not loaded and at the same time //! that layout is not already configured as SHARED for other CENTRAL layouts diff --git a/app/settings/handlers/tablayoutshandler.cpp b/app/settings/handlers/tablayoutshandler.cpp index daf138fc9..2d71b25d0 100644 --- a/app/settings/handlers/tablayoutshandler.cpp +++ b/app/settings/handlers/tablayoutshandler.cpp @@ -79,10 +79,6 @@ void TabLayouts::initUi() m_inMemoryButtons->addButton(m_ui->multipleToolBtn, MemoryUsage::MultipleLayouts); m_inMemoryButtons->setExclusive(true); - if (KWindowSystem::isPlatformWayland()) { - m_inMemoryButtons->button(MemoryUsage::MultipleLayouts)->setEnabled(false); - } - bool inMultiple{m_corona->layoutsManager()->memoryUsage() == MemoryUsage::MultipleLayouts}; if (inMultiple) {