From 19cd67627d8cd0760dc124ae41ce058b2b2161cd Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sat, 13 Jan 2018 20:00:03 +0200 Subject: [PATCH] more improvements for MultipleLayouts case --fix the strut setting between multiple running layouts. When the activity is changing then each dock/panel removes or adds its struts accordingly --- app/dockview.cpp | 2 +- app/layoutmanager.cpp | 15 ++++++++------- app/visibilitymanager.cpp | 31 ++++++++++++++++--------------- app/visibilitymanager_p.h | 2 ++ 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/app/dockview.cpp b/app/dockview.cpp index b53bb697b..7136ddfd4 100644 --- a/app/dockview.cpp +++ b/app/dockview.cpp @@ -1193,7 +1193,7 @@ void DockView::setMaskArea(QRect area) setMask(fixedMask); } - qDebug() << "dock mask set:" << m_maskArea; + // qDebug() << "dock mask set:" << m_maskArea; emit maskAreaChanged(); } diff --git a/app/layoutmanager.cpp b/app/layoutmanager.cpp index b06563d6c..8ff576749 100644 --- a/app/layoutmanager.cpp +++ b/app/layoutmanager.cpp @@ -444,15 +444,16 @@ void LayoutManager::loadLayouts() void LayoutManager::loadLatteLayout(QString layoutPath) { + qDebug() << " -------------------------------------------------------------------- "; + qDebug() << " -------------------------------------------------------------------- "; + if (m_corona->containments().size() > 0) { - qDebug() << "There are still containments present :::: " << m_corona->containments().size(); + qDebug() << "LOAD LATTE LAYOUT ::: There are still containments present !!!! :: " << m_corona->containments().size(); } if (!layoutPath.isEmpty() && m_corona->containments().size() == 0) { - if (!layoutPath.isEmpty()) { - qDebug() << "loading layout:" << layoutPath; - m_corona->loadLayout(layoutPath); - } + qDebug() << "LOADING CORONA LAYOUT:" << layoutPath; + m_corona->loadLayout(layoutPath); //! ~~~ ADDING DOCKVIEWS AND ENFORCE LOADING IF TASKS ARENT PRESENT BASED ON SCREENS ~~~ !// @@ -523,7 +524,7 @@ bool LayoutManager::switchToLayout(QString layoutName) m_activeLayouts.removeFirst(); layout->unloadContainments(); layout->unloadDockViews(); - layout->deleteLater(); + delete layout; } if (initializingMultipleLayouts) { @@ -598,7 +599,7 @@ void LayoutManager::syncMultipleLayoutsToActivities(QString layoutForOrphans) layoutsToUnload.removeFirst(); tempLayout->unloadContainments(); tempLayout->unloadDockViews(); - tempLayout->deleteLater(); + delete tempLayout; } } diff --git a/app/visibilitymanager.cpp b/app/visibilitymanager.cpp index c2603696a..9fa7505b7 100644 --- a/app/visibilitymanager.cpp +++ b/app/visibilitymanager.cpp @@ -113,7 +113,7 @@ inline void VisibilityManagerPrivate::setMode(Dock::Visibility mode) switch (this->mode) { case Dock::AlwaysVisible: { if (view->containment() && !view->containment()->isUserConfiguring() && view->screen()) { - wm->setDockStruts(*view, dockGeometry, view->location()); + updateStrutsBasedOnLayoutsAndActivities(); } connections[0] = connect(view->containment(), &Plasma::Containment::locationChanged @@ -129,20 +129,8 @@ inline void VisibilityManagerPrivate::setMode(Dock::Visibility mode) if (dockCorona && dockCorona->layoutManager()->memoryUsage() == Dock::MultipleLayouts) { - if (dockView->managedLayout() && (dockView->managedLayout()->name() == dockCorona->layoutManager()->currentLayoutName())) { - wm->setDockStruts(*view, dockGeometry, view->location()); - } else { - wm->removeDockStruts(*view); - } - connections[2] = connect(dockCorona->activitiesConsumer(), &KActivities::Consumer::currentActivityChanged, this, [&]() { - Layout *mLayout = dockView->managedLayout(); - - if (mLayout && (mLayout->name() == dockCorona->layoutManager()->currentLayoutName())) { - wm->setDockStruts(*view, dockGeometry, view->location()); - } else { - wm->removeDockStruts(*view); - } + updateStrutsBasedOnLayoutsAndActivities(); }); } @@ -208,6 +196,19 @@ inline void VisibilityManagerPrivate::setMode(Dock::Visibility mode) emit q->modeChanged(); } +void VisibilityManagerPrivate::updateStrutsBasedOnLayoutsAndActivities() +{ + bool multipleLayoutsAndCurrent = (dockCorona->layoutManager()->memoryUsage() == Dock::MultipleLayouts + && dockView->managedLayout() + && dockCorona->layoutManager()->currentLayoutName() == dockView->managedLayout()->name()); + + if (dockCorona->layoutManager()->memoryUsage() == Dock::SingleLayout || multipleLayoutsAndCurrent) { + wm->setDockStruts(*view, dockGeometry, view->location()); + } else { + wm->removeDockStruts(*view); + } +} + void VisibilityManagerPrivate::setRaiseOnDesktop(bool enable) { if (enable == raiseOnDesktopChange) @@ -349,7 +350,7 @@ inline void VisibilityManagerPrivate::setDockGeometry(const QRect &geometry) this->dockGeometry = geometry; if (mode == Dock::AlwaysVisible && !view->containment()->isUserConfiguring() && view->screen()) { - wm->setDockStruts(*view, this->dockGeometry, view->containment()->location()); + updateStrutsBasedOnLayoutsAndActivities(); } } diff --git a/app/visibilitymanager_p.h b/app/visibilitymanager_p.h index b06d43cd3..d0db5327c 100644 --- a/app/visibilitymanager_p.h +++ b/app/visibilitymanager_p.h @@ -67,6 +67,8 @@ public: bool intersects(const WindowInfoWrap &winfo); + void updateStrutsBasedOnLayoutsAndActivities(); + void saveConfig(); void restoreConfig();