diff --git a/libtaskmanager/activityinfo.h b/libtaskmanager/activityinfo.h --- a/libtaskmanager/activityinfo.h +++ b/libtaskmanager/activityinfo.h @@ -86,6 +86,12 @@ void currentActivityChanged() const; void numberOfRunningActivitiesChanged() const; + /** + * The names of the running activities have changed. + * @since 5.40.0 + **/ + void namesOfRunningActivitiesChanged() const; + private: class Private; QScopedPointer d; diff --git a/libtaskmanager/activityinfo.cpp b/libtaskmanager/activityinfo.cpp --- a/libtaskmanager/activityinfo.cpp +++ b/libtaskmanager/activityinfo.cpp @@ -20,6 +20,7 @@ #include "activityinfo.h" +#include #include namespace TaskManager @@ -33,10 +34,13 @@ static int instanceCount; static KActivities::Consumer* activityConsumer; + static KActivities::ActivitiesModel* activitiesModel; }; int ActivityInfo::Private::instanceCount = 0; KActivities::Consumer* ActivityInfo::Private::activityConsumer = nullptr; +KActivities::ActivitiesModel* ActivityInfo::Private::activitiesModel = nullptr; + ActivityInfo::Private::Private(ActivityInfo *) { @@ -50,6 +54,8 @@ if (!instanceCount) { delete activityConsumer; activityConsumer = nullptr; + delete activitiesModel; + activitiesModel = nullptr; } } @@ -64,6 +70,27 @@ this, &ActivityInfo::currentActivityChanged); connect(d->activityConsumer, &KActivities::Consumer::runningActivitiesChanged, this, &ActivityInfo::numberOfRunningActivitiesChanged); + connect(d->activityConsumer, &KActivities::Consumer::runningActivitiesChanged, + this, &ActivityInfo::namesOfRunningActivitiesChanged); + + if (!d->activitiesModel) { + d->activitiesModel = new KActivities::ActivitiesModel(); + d->activitiesModel->setShownStates(QVector{KActivities::Info::Running}); + } + + connect(d->activitiesModel, &KActivities::ActivitiesModel::modelReset, + this, &ActivityInfo::namesOfRunningActivitiesChanged); + + connect(d->activitiesModel, &KActivities::ActivitiesModel::dataChanged, this, + [this](const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) { + Q_UNUSED(topLeft) + Q_UNUSED(bottomRight) + + if (roles.isEmpty() || roles.contains(Qt::DisplayRole)) { + emit namesOfRunningActivitiesChanged(); + } + } + ); } ActivityInfo::~ActivityInfo()