diff --git a/containments/taskpanel/package/contents/ui/Task.qml b/containments/taskpanel/package/contents/ui/Task.qml index 207b35b4607949cca2256b275bb84fc3c8d7369e..fc492c3f6b1257469ce5c220518405855b2ed932 100644 --- a/containments/taskpanel/package/contents/ui/Task.qml +++ b/containments/taskpanel/package/contents/ui/Task.qml @@ -46,7 +46,7 @@ Item { ScriptAction { script: { if (background.x != 0) { - window.executeJob("close", model.Id); + plasmoid.nativeInterface.windowModel.requestClose(model.index); } } } @@ -83,7 +83,7 @@ Item { onPressed: delegate.z = 10; onClicked: { window.hide(); - window.executeJob("activate", model.Id); + plasmoid.nativeInterface.windowModel.requestActivate(model.index); } onReleased: { delegate.z = 0; diff --git a/containments/taskpanel/package/contents/ui/TaskSwitcher.qml b/containments/taskpanel/package/contents/ui/TaskSwitcher.qml index abec9e741516d3997ce66c7aadd050e91d5188a0..104b7dce4de8688cddb35ffaca4300c166dd82cb 100644 --- a/containments/taskpanel/package/contents/ui/TaskSwitcher.qml +++ b/containments/taskpanel/package/contents/ui/TaskSwitcher.qml @@ -20,7 +20,7 @@ import QtQuick 2.0 import QtQuick.Layouts 1.1 import QtQuick.Window 2.2 -import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.core 2.1 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.mobilecomponents 0.2 @@ -56,19 +56,6 @@ FullScreenPanel { scrollAnim.running = true; } - PlasmaCore.DataSource { - id: tasksSource - engine: "tasks" - - connectedSources: "tasks" - } - function executeJob(operationName, id) { - var service = tasksSource.serviceForSource("tasks"); - var operation = service.operationDescription(operationName); - operation.Id = id; - service.startOperationCall(operation); - } - SequentialAnimation { id: scrollAnim property alias to: internalAnim.to @@ -140,7 +127,14 @@ FullScreenPanel { } } - model: tasksSource.models.tasks + PlasmaCore.SortFilterModel { + id: filteredWindowModel + filterRole: "DisplayRole" + filterRegExp: ".+" + sourceModel: plasmoid.nativeInterface.windowModel + } + + model: filteredWindowModel header: Item { width: window.width height: window.height diff --git a/containments/taskpanel/taskpanel.cpp b/containments/taskpanel/taskpanel.cpp index a49ef71860d9216a866be22ed789bcf867835de2..f43f0610c231fbac5de3a31c9060b8d6b86c4351 100644 --- a/containments/taskpanel/taskpanel.cpp +++ b/containments/taskpanel/taskpanel.cpp @@ -26,6 +26,7 @@ #include #include +#include #include static const QString s_kwinService = QStringLiteral("org.kde.KWin"); @@ -66,6 +67,9 @@ void TaskPanel::initWayland() connect(registry, &Registry::plasmaWindowManagementAnnounced, this, [this, registry] (quint32 name, quint32 version) { m_windowManagement = registry->createPlasmaWindowManagement(name, version, this); + qRegisterMetaType >("QVector"); + m_windowModel = m_windowManagement->createWindowModel(); + emit windowModelChanged(); connect(m_windowManagement, &PlasmaWindowManagement::showingDesktopChanged, this, [this] (bool showing) { if (showing == m_showingDesktop) { @@ -82,6 +86,11 @@ void TaskPanel::initWayland() registry->setup(); } +QAbstractItemModel *TaskPanel::windowModel() const +{ + return m_windowModel; +} + void TaskPanel::updateActiveWindow() { if (!m_windowManagement) { diff --git a/containments/taskpanel/taskpanel.h b/containments/taskpanel/taskpanel.h index 4e0ac3c750012ac1af9948adfd5a6a856010675a..8a701a0581816d38b73cfb46d533668c196b2316 100644 --- a/containments/taskpanel/taskpanel.h +++ b/containments/taskpanel/taskpanel.h @@ -21,21 +21,24 @@ #ifndef TASKPANEL_H #define TASKPANEL_H - #include +class QAbstractItemModel; + namespace KWayland { namespace Client { class PlasmaWindowManagement; class PlasmaWindow; +class PlasmaWindowModel; } } class TaskPanel : public Plasma::Containment { Q_OBJECT + Q_PROPERTY(QAbstractItemModel* windowModel READ windowModel NOTIFY windowModelChanged) Q_PROPERTY(bool showDesktop READ isShowingDesktop WRITE requestShowingDesktop NOTIFY showingDesktopChanged) Q_PROPERTY(bool hasCloseableActiveWindow READ hasCloseableActiveWindow NOTIFY hasCloseableActiveWindowChanged) @@ -43,6 +46,8 @@ public: TaskPanel( QObject *parent, const QVariantList &args ); ~TaskPanel(); + QAbstractItemModel *windowModel() const; + Q_INVOKABLE void closeActiveWindow(); bool isShowingDesktop() const { @@ -53,6 +58,7 @@ public: bool hasCloseableActiveWindow() const; Q_SIGNALS: + void windowModelChanged(); void showingDesktopChanged(bool); void hasCloseableActiveWindowChanged(); @@ -61,8 +67,8 @@ private: void updateActiveWindow(); bool m_showingDesktop; KWayland::Client::PlasmaWindowManagement *m_windowManagement; + KWayland::Client::PlasmaWindowModel *m_windowModel = nullptr; KWayland::Client::PlasmaWindow *m_activeWindow = nullptr; - }; #endif