diff --git a/shell/desktopview.h b/shell/desktopview.h --- a/shell/desktopview.h +++ b/shell/desktopview.h @@ -40,6 +40,9 @@ //What kind of plasma session we're in: are we in a full workspace, an application?... Q_PROPERTY(SessionType sessionType READ sessionType CONSTANT) + + Q_PROPERTY(QVariantMap candidateContainments READ candidateContainmentsGraphicItems NOTIFY candidateContainmentsChanged) + public: enum WindowType { Window, /** The window is a normal resizable window with titlebar and appears in the taskbar */ @@ -72,6 +75,8 @@ SessionType sessionType() const; + QVariantMap candidateContainmentsGraphicItems() const; + protected: bool event(QEvent *e) override; void keyPressEvent(QKeyEvent *e) override; @@ -88,6 +93,7 @@ Q_SIGNALS: void stayBehindChanged(); void windowTypeChanged(); + void candidateContainmentsChanged(); private: void coronaPackageChanged(const KPackage::Package &package); diff --git a/shell/desktopview.cpp b/shell/desktopview.cpp --- a/shell/desktopview.cpp +++ b/shell/desktopview.cpp @@ -24,11 +24,13 @@ #include #include #include +#include #include #include #include #include +#include #include @@ -57,6 +59,13 @@ QObject::connect(corona, &Plasma::Corona::kPackageChanged, this, &DesktopView::coronaPackageChanged); + KActivities::Controller *m_activityController = new KActivities::Controller(this); + + QObject::connect(m_activityController, &KActivities::Controller::activityAdded, + this, &DesktopView::candidateContainmentsChanged); + QObject::connect(m_activityController, &KActivities::Controller::activityRemoved, + this, &DesktopView::candidateContainmentsChanged); + if (QQuickWindow::sceneGraphBackend() != QLatin1String("software")) { connect(this, &DesktopView::sceneGraphInitialized, this, [this, corona]() { @@ -197,6 +206,19 @@ } } +QVariantMap DesktopView::candidateContainmentsGraphicItems() const +{ + QVariantMap map; + if (!containment()) { + return map; + } + + for (auto cont : corona()->containmentsForScreen(containment()->screen())) { + map[cont->activity()] = cont->property("_plasma_graphicObject"); + } + return map; +} + bool DesktopView::event(QEvent *e) { if (e->type() == QEvent::PlatformSurface) {