diff --git a/app/dockview.cpp b/app/dockview.cpp index d5c95f462..e4edeae2c 100644 --- a/app/dockview.cpp +++ b/app/dockview.cpp @@ -1298,6 +1298,7 @@ void DockView::setManagedLayout(Layout *layout) if (m_managedLayout) { qDebug() << "DOCK VIEW FROM LAYOUT ::: " << layout->name() << " - activities: " << layout->appliedActivities(); m_visibility->setDockOnActivities(layout->appliedActivities()); + emit activitiesChanged(); } DockCorona *dockCorona = qobject_cast(this->corona()); @@ -1306,14 +1307,16 @@ void DockView::setManagedLayout(Layout *layout) connect(dockCorona->activitiesConsumer(), &KActivities::Consumer::runningActivitiesChanged, this, [&]() { if (m_managedLayout) { m_visibility->setDockOnActivities(m_managedLayout->appliedActivities()); + emit activitiesChanged(); } }); - /* connect(m_managedLayout, &Layout::activitiesChanged, this, [&]() { - if (m_managedLayout) { - m_visibility->setDockOnActivities(m_managedLayout->appliedActivities()); - } - });*/ + connect(m_managedLayout, &Layout::activitiesChanged, this, [&]() { + if (m_managedLayout) { + m_visibility->setDockOnActivities(m_managedLayout->appliedActivities()); + emit activitiesChanged(); + } + }); //!IMPORTANT!!! ::: This fixes a bug when closing an Activity all docks from all Activities are //! disappearing! With this they reappear!!! @@ -1325,6 +1328,7 @@ void DockView::setManagedLayout(Layout *layout) if (m_managedLayout) { m_visibility->setDockOnActivities(m_managedLayout->appliedActivities()); + emit activitiesChanged(); } } }); diff --git a/app/dockview.h b/app/dockview.h index 17f0bc409..3570e8703 100644 --- a/app/dockview.h +++ b/app/dockview.h @@ -235,6 +235,7 @@ signals: void showDockAfterLocationChangeFinished(); void showDockAfterScreenChangeFinished(); + void activitiesChanged(); void alternativesIsShownChanged(); void alignmentChanged(); void behaveAsPlasmaPanelChanged(); diff --git a/app/layout.cpp b/app/layout.cpp index 0b858fe56..f7bc25834 100644 --- a/app/layout.cpp +++ b/app/layout.cpp @@ -369,6 +369,8 @@ void Layout::loadConfig() m_showInMenu = m_layoutGroup.readEntry("showInMenu", false); m_activities = m_layoutGroup.readEntry("activities", QStringList()); m_launchers = m_layoutGroup.readEntry("launchers", QStringList()); + + emit activitiesChanged(); } void Layout::saveConfig() diff --git a/app/layoutmanager.cpp b/app/layoutmanager.cpp index 40a27c73b..6a14d7896 100644 --- a/app/layoutmanager.cpp +++ b/app/layoutmanager.cpp @@ -55,8 +55,6 @@ LayoutManager::LayoutManager(QObject *parent) m_dynamicSwitchTimer.setSingleShot(true); showInfoWindowChanged(); connect(&m_dynamicSwitchTimer, &QTimer::timeout, this, &LayoutManager::confirmDynamicSwitch); - - m_currentActivityId = m_corona->m_activityConsumer->currentActivity(); } } @@ -178,7 +176,7 @@ QString LayoutManager::currentLayoutName() const return m_corona->universalSettings()->currentLayoutName(); } else if (memoryUsage() == Dock::MultipleLayouts) { foreach (auto layout, m_activeLayouts) { - if (layout->activities().contains(m_currentActivityId)) { + if (layout->isOriginalLayout() && layout->activities().contains(m_corona->activitiesConsumer()->currentActivity())) { return layout->name(); } } @@ -190,6 +188,7 @@ QString LayoutManager::currentLayoutName() const } } + qDebug() << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CURRENT LAYOUT NAME :::: "; return QString(); } @@ -326,7 +325,7 @@ QHash *LayoutManager::currentDockViews( return m_activeLayouts.at(0)->dockViews(); } else { foreach (auto layout, m_activeLayouts) { - if (layout->activities().contains(m_currentActivityId)) { + if (layout->activities().contains(m_corona->m_activityConsumer->currentActivity())) { return layout->dockViews(); } } @@ -380,8 +379,6 @@ int LayoutManager::activeLayoutPos(QString id) const void LayoutManager::currentActivityChanged(const QString &id) { - m_currentActivityId = id; - if (memoryUsage() == Dock::SingleLayout) { qDebug() << "activity changed :: " << id; diff --git a/app/layoutmanager.h b/app/layoutmanager.h index db36b7a49..b53495556 100644 --- a/app/layoutmanager.h +++ b/app/layoutmanager.h @@ -157,7 +157,6 @@ private: bool layoutIsAssigned(QString layoutName); QStringList validActivities(QStringList currentList); - QString m_currentActivityId; QStringList m_layouts; QStringList m_menuLayouts; QStringList m_presetsPaths; diff --git a/app/visibilitymanager.cpp b/app/visibilitymanager.cpp index 9fa7505b7..bcc803b6d 100644 --- a/app/visibilitymanager.cpp +++ b/app/visibilitymanager.cpp @@ -133,6 +133,9 @@ inline void VisibilityManagerPrivate::setMode(Dock::Visibility mode) updateStrutsBasedOnLayoutsAndActivities(); }); + connections[3] = connect(dockView, &DockView::activitiesChanged, this, [&]() { + updateStrutsBasedOnLayoutsAndActivities(); + }); } raiseDock(true); @@ -200,7 +203,7 @@ void VisibilityManagerPrivate::updateStrutsBasedOnLayoutsAndActivities() { bool multipleLayoutsAndCurrent = (dockCorona->layoutManager()->memoryUsage() == Dock::MultipleLayouts && dockView->managedLayout() - && dockCorona->layoutManager()->currentLayoutName() == dockView->managedLayout()->name()); + && dockView->managedLayout()->name() == dockCorona->layoutManager()->currentLayoutName()); if (dockCorona->layoutManager()->memoryUsage() == Dock::SingleLayout || multipleLayoutsAndCurrent) { wm->setDockStruts(*view, dockGeometry, view->location());