diff --git a/app/dockcorona.cpp b/app/dockcorona.cpp index faeb7b634..60f1e9d39 100644 --- a/app/dockcorona.cpp +++ b/app/dockcorona.cpp @@ -372,10 +372,20 @@ void DockCorona::dockContainmentDestroyed(QObject *cont) void DockCorona::showAlternativesForApplet(Plasma::Applet *applet) { const QString alternativesQML = kPackage().filePath("appletalternativesui"); + if (alternativesQML.isEmpty()) { return; } + if (applet->containment()) { + DockView *view = m_dockViews[applet->containment()]; + + if (view) { + view->visibility()->setBlockHiding(true); + m_alternativesContaiment = applet->containment(); + } + } + KDeclarative::QmlObject *qmlObj = new KDeclarative::QmlObject(this); qmlObj->setInitializationDelayed(true); qmlObj->setSource(QUrl::fromLocalFile(alternativesQML)); @@ -388,13 +398,16 @@ void DockCorona::showAlternativesForApplet(Plasma::Applet *applet) connect(qmlObj->rootObject(), SIGNAL(visibleChanged(bool)), this, SLOT(alternativesVisibilityChanged(bool))); - connect(applet, &Plasma::Applet::destroyedChanged, this, [this, qmlObj] (bool destroyed) { + connect(applet, &Plasma::Applet::destroyedChanged, this, [this, qmlObj](bool destroyed) { if (!destroyed) { return; } + QMutableListIterator it(m_alternativesObjects); + while (it.hasNext()) { KDeclarative::QmlObject *obj = it.next(); + if (obj == qmlObj) { it.remove(); obj->deleteLater(); @@ -409,11 +422,23 @@ void DockCorona::alternativesVisibilityChanged(bool visible) return; } + if (m_alternativesContaiment) { + DockView *view = m_dockViews[m_alternativesContaiment]; + + if (view) { + view->visibility()->setBlockHiding(false); + } + + m_alternativesContaiment = nullptr; + } + QObject *root = sender(); QMutableListIterator it(m_alternativesObjects); + while (it.hasNext()) { KDeclarative::QmlObject *obj = it.next(); + if (obj->rootObject() == root) { it.remove(); obj->deleteLater(); diff --git a/app/dockcorona.h b/app/dockcorona.h index 9f0e800ec..3de3b8b35 100644 --- a/app/dockcorona.h +++ b/app/dockcorona.h @@ -96,6 +96,8 @@ private: KActivities::Consumer *m_activityConsumer; QPointer aboutDialog; + + QPointer m_alternativesContaiment; }; }