support plasma tasks model for tracking

pull/15/head
Michail Vourlakos 5 years ago
parent 76781094af
commit 99db4d54f2

@ -47,6 +47,7 @@ ContainmentInterface::ContainmentInterface(Latte::View *parent)
m_corona = qobject_cast<Latte::Corona *>(m_view->corona()); m_corona = qobject_cast<Latte::Corona *>(m_view->corona());
m_latteTasksModel = new TasksModel(this); m_latteTasksModel = new TasksModel(this);
m_plasmaTasksModel = new TasksModel(this);
m_appletsExpandedConnectionsTimer.setInterval(2000); m_appletsExpandedConnectionsTimer.setInterval(2000);
m_appletsExpandedConnectionsTimer.setSingleShot(true); m_appletsExpandedConnectionsTimer.setSingleShot(true);
@ -56,7 +57,7 @@ ContainmentInterface::ContainmentInterface(Latte::View *parent)
connect(m_view, &View::containmentChanged connect(m_view, &View::containmentChanged
, this, [&]() { , this, [&]() {
if (m_view->containment()) { if (m_view->containment()) {
connect(m_view->containment(), &Plasma::Containment::appletAdded, this, &ContainmentInterface::updateAppletsTracking); connect(m_view->containment(), &Plasma::Containment::appletAdded, this, &ContainmentInterface::on_appletAdded);
m_appletsExpandedConnectionsTimer.start(); m_appletsExpandedConnectionsTimer.start();
} }
@ -479,6 +480,11 @@ QAbstractListModel *ContainmentInterface::latteTasksModel() const
return m_latteTasksModel; return m_latteTasksModel;
} }
QAbstractListModel *ContainmentInterface::plasmaTasksModel() const
{
return m_plasmaTasksModel;
}
void ContainmentInterface::on_appletExpandedChanged() void ContainmentInterface::on_appletExpandedChanged()
{ {
PlasmaQuick::AppletQuickItem *appletItem = static_cast<PlasmaQuick::AppletQuickItem *>(QObject::sender()); PlasmaQuick::AppletQuickItem *appletItem = static_cast<PlasmaQuick::AppletQuickItem *>(QObject::sender());
@ -525,44 +531,34 @@ void ContainmentInterface::updateAppletsTracking()
} }
for (const auto applet : m_view->containment()->applets()) { for (const auto applet : m_view->containment()->applets()) {
if (m_view->layout() && m_view->layout()->isInternalContainment(applet)) { on_appletAdded(applet);
//! internal containment case }
Plasma::Containment *internalC = m_view->layout()->internalContainmentOf(applet); }
PlasmaQuick::AppletQuickItem *contAi = applet->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>();
if (contAi && !m_appletsExpandedConnections.contains(contAi)) {
m_appletsExpandedConnections[contAi] = connect(contAi, &PlasmaQuick::AppletQuickItem::expandedChanged, this, &ContainmentInterface::on_appletExpandedChanged);
connect(contAi, &QObject::destroyed, this, [&, contAi](){ void ContainmentInterface::on_appletAdded(Plasma::Applet *applet)
m_appletsExpandedConnections.remove(contAi); {
removeExpandedApplet(contAi->applet()->id()); if (!m_view->containment() || !applet) {
}); return;
} }
for (const auto internalApplet : internalC->applets()) { if (m_view->layout() && m_view->layout()->isInternalContainment(applet)) {
PlasmaQuick::AppletQuickItem *ai = internalApplet->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>(); //! internal containment case
Plasma::Containment *internalC = m_view->layout()->internalContainmentOf(applet);
PlasmaQuick::AppletQuickItem *contAi = applet->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>();
if (ai && !m_appletsExpandedConnections.contains(ai) ){ if (contAi && !m_appletsExpandedConnections.contains(contAi)) {
m_appletsExpandedConnections[ai] = connect(ai, &PlasmaQuick::AppletQuickItem::expandedChanged, this, &ContainmentInterface::on_appletExpandedChanged); m_appletsExpandedConnections[contAi] = connect(contAi, &PlasmaQuick::AppletQuickItem::expandedChanged, this, &ContainmentInterface::on_appletExpandedChanged);
connect(ai, &QObject::destroyed, this, [&, ai](){ connect(contAi, &QObject::destroyed, this, [&, contAi](){
m_appletsExpandedConnections.remove(ai); m_appletsExpandedConnections.remove(contAi);
removeExpandedApplet(ai->applet()->id()); removeExpandedApplet(contAi->applet()->id());
}); });
} }
}
} else {
PlasmaQuick::AppletQuickItem *ai = applet->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>();
if (!ai) {
continue;
}
KPluginMetaData meta = applet->kPackage().metadata(); for (const auto internalApplet : internalC->applets()) {
PlasmaQuick::AppletQuickItem *ai = internalApplet->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>();
if (meta.pluginId() == "org.kde.latte.plasmoid") { if (ai && !m_appletsExpandedConnections.contains(ai) ){
m_latteTasksModel->addTask(ai);
} else if (!m_appletsExpandedConnections.contains(ai)) {
m_appletsExpandedConnections[ai] = connect(ai, &PlasmaQuick::AppletQuickItem::expandedChanged, this, &ContainmentInterface::on_appletExpandedChanged); m_appletsExpandedConnections[ai] = connect(ai, &PlasmaQuick::AppletQuickItem::expandedChanged, this, &ContainmentInterface::on_appletExpandedChanged);
connect(ai, &QObject::destroyed, this, [&, ai](){ connect(ai, &QObject::destroyed, this, [&, ai](){
@ -571,7 +567,32 @@ void ContainmentInterface::updateAppletsTracking()
}); });
} }
} }
} else {
PlasmaQuick::AppletQuickItem *ai = applet->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>();
if (!ai) {
return;
}
KPluginMetaData meta = applet->kPackage().metadata();
const auto &provides = KPluginMetaData::readStringList(meta.rawData(), QStringLiteral("X-Plasma-Provides"));
if (meta.pluginId() == "org.kde.latte.plasmoid") {
//! populate latte tasks applet
m_latteTasksModel->addTask(ai);
} else if (provides.contains(QLatin1String("org.kde.plasma.multitasking"))) {
//! populate plasma tasks applet
m_plasmaTasksModel->addTask(ai);
} else if (!m_appletsExpandedConnections.contains(ai)) {
m_appletsExpandedConnections[ai] = connect(ai, &PlasmaQuick::AppletQuickItem::expandedChanged, this, &ContainmentInterface::on_appletExpandedChanged);
connect(ai, &QObject::destroyed, this, [&, ai](){
m_appletsExpandedConnections.remove(ai);
removeExpandedApplet(ai->applet()->id());
});
}
} }
} }

@ -30,6 +30,10 @@
#include <QQuickItem> #include <QQuickItem>
#include <QTimer> #include <QTimer>
namespace Plasma {
class Applet;
}
namespace PlasmaQuick { namespace PlasmaQuick {
class AppletQuickItem; class AppletQuickItem;
} }
@ -39,7 +43,6 @@ class Corona;
class View; class View;
} }
namespace Latte { namespace Latte {
namespace ViewPart { namespace ViewPart {
@ -49,6 +52,7 @@ class ContainmentInterface: public QObject
Q_PROPERTY(bool hasExpandedApplet READ hasExpandedApplet NOTIFY hasExpandedAppletChanged) Q_PROPERTY(bool hasExpandedApplet READ hasExpandedApplet NOTIFY hasExpandedAppletChanged)
Q_PROPERTY(QAbstractListModel *latteTasksModel READ latteTasksModel() NOTIFY latteTasksModelChanged) Q_PROPERTY(QAbstractListModel *latteTasksModel READ latteTasksModel() NOTIFY latteTasksModelChanged)
Q_PROPERTY(QAbstractListModel *plasmaTasksModel READ plasmaTasksModel() NOTIFY plasmaTasksModelChanged)
public: public:
ContainmentInterface(Latte::View *parent); ContainmentInterface(Latte::View *parent);
@ -78,6 +82,7 @@ public:
int appletIdForIndex(const int index); int appletIdForIndex(const int index);
QAbstractListModel *latteTasksModel() const; QAbstractListModel *latteTasksModel() const;
QAbstractListModel *plasmaTasksModel() const;
public slots: public slots:
Q_INVOKABLE void deactivateApplets(); Q_INVOKABLE void deactivateApplets();
@ -90,12 +95,14 @@ signals:
void hasExpandedAppletChanged(); void hasExpandedAppletChanged();
void expandedAppletStateChanged(); void expandedAppletStateChanged();
void latteTasksModelChanged(); void latteTasksModelChanged();
void plasmaTasksModelChanged();
private slots: private slots:
void identifyMainItem(); void identifyMainItem();
void identifyMethods(); void identifyMethods();
void updateAppletsTracking(); void updateAppletsTracking();
void on_appletAdded(Plasma::Applet *applet);
void on_appletExpandedChanged(); void on_appletExpandedChanged();
private: private:
@ -119,6 +126,7 @@ private:
QTimer m_appletsExpandedConnectionsTimer; QTimer m_appletsExpandedConnectionsTimer;
TasksModel *m_latteTasksModel; TasksModel *m_latteTasksModel;
TasksModel *m_plasmaTasksModel;
QHash<PlasmaQuick::AppletQuickItem *, QMetaObject::Connection> m_appletsExpandedConnections; QHash<PlasmaQuick::AppletQuickItem *, QMetaObject::Connection> m_appletsExpandedConnections;
QList<int> m_expandedAppletIds; QList<int> m_expandedAppletIds;

@ -22,6 +22,9 @@
// Qt // Qt
#include <QDebug> #include <QDebug>
// Plasma
#include <PlasmaQuick/AppletQuickItem>
namespace Latte { namespace Latte {
namespace ViewPart { namespace ViewPart {
@ -61,7 +64,7 @@ QHash<int, QByteArray> TasksModel::roleNames() const{
return roles; return roles;
} }
void TasksModel::addTask(QObject *plasmoid) void TasksModel::addTask(PlasmaQuick::AppletQuickItem *plasmoid)
{ {
if (plasmoid && m_tasks.contains(plasmoid)) { if (plasmoid && m_tasks.contains(plasmoid)) {
return; return;
@ -78,7 +81,7 @@ void TasksModel::addTask(QObject *plasmoid)
emit countChanged(); emit countChanged();
} }
void TasksModel::removeTask(QObject *plasmoid) void TasksModel::removeTask(PlasmaQuick::AppletQuickItem *plasmoid)
{ {
if (!plasmoid || (plasmoid && !m_tasks.contains(plasmoid))) { if (!plasmoid || (plasmoid && !m_tasks.contains(plasmoid))) {
return; return;

@ -22,6 +22,10 @@
#include <QAbstractListModel> #include <QAbstractListModel>
namespace PlasmaQuick {
class AppletQuickItem;
}
namespace Latte { namespace Latte {
namespace ViewPart { namespace ViewPart {
@ -39,14 +43,14 @@ public:
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QHash<int, QByteArray> roleNames() const override; QHash<int, QByteArray> roleNames() const override;
void addTask(QObject *plasmoid); void addTask(PlasmaQuick::AppletQuickItem *plasmoid);
void removeTask(QObject *plasmoid); void removeTask(PlasmaQuick::AppletQuickItem *plasmoid);
signals: signals:
void countChanged(); void countChanged();
private: private:
QList<QObject *> m_tasks; QList<PlasmaQuick::AppletQuickItem *> m_tasks;
}; };
} }

Loading…
Cancel
Save