diff --git a/libtaskmanager/abstracttasksmodel.h b/libtaskmanager/abstracttasksmodel.h --- a/libtaskmanager/abstracttasksmodel.h +++ b/libtaskmanager/abstracttasksmodel.h @@ -96,6 +96,10 @@ model contents due to the asynchronous nature of the windowing system. */ LastActivated, /**< The timestamp of the last time a task was the active task. */ + ApplicationMenuServiceName, /**< The DBus service name for the application's menu. + May be empty. @since 5.19 */ + ApplicationMenuObjectPath,/**< The DBus object path for the application's menu. + May be empty. @since 5.19 */ }; Q_ENUM(AdditionalRoles) diff --git a/libtaskmanager/waylandtasksmodel.cpp b/libtaskmanager/waylandtasksmodel.cpp --- a/libtaskmanager/waylandtasksmodel.cpp +++ b/libtaskmanager/waylandtasksmodel.cpp @@ -312,6 +312,12 @@ QObject::connect(window, &KWayland::Client::PlasmaWindow::skipTaskbarChanged, q, [window, this] { this->dataChanged(window, SkipTaskbar); } ); + + QObject::connect(window, &KWayland::Client::PlasmaWindow::applicationMenuChanged, q, + [window, this] { + this->dataChanged(window, QVector{ApplicationMenuServiceName, ApplicationMenuObjectPath}); + } + ); } AppData WaylandTasksModel::Private::appData(KWayland::Client::PlasmaWindow *window) @@ -461,6 +467,10 @@ // FIXME Implement. } else if (role == AppPid) { return window->pid(); + } else if (role == ApplicationMenuObjectPath) { + return window->applicationMenuObjectPath(); + } else if (role == ApplicationMenuServiceName) { + return window->applicationMenuServiceName(); } return QVariant(); diff --git a/libtaskmanager/xwindowtasksmodel.cpp b/libtaskmanager/xwindowtasksmodel.cpp --- a/libtaskmanager/xwindowtasksmodel.cpp +++ b/libtaskmanager/xwindowtasksmodel.cpp @@ -81,6 +81,8 @@ KWindowInfo* windowInfo(WId window); AppData appData(WId window); + QString appMenuServiceName(WId window); + QString appMenuObjectPath(WId window); QIcon icon(WId window); static QString mimeType(); @@ -465,6 +467,18 @@ return data; } +QString XWindowTasksModel::Private::appMenuServiceName(WId window) +{ + const KWindowInfo *info = windowInfo(window); + return QString::fromUtf8(info->applicationMenuServiceName()); +} + +QString XWindowTasksModel::Private::appMenuObjectPath(WId window) +{ + const KWindowInfo *info = windowInfo(window); + return QString::fromUtf8(info->applicationMenuServiceName()); +} + QIcon XWindowTasksModel::Private::icon(WId window) { const AppData &app = appData(window); @@ -690,6 +704,10 @@ if (d->lastActivated.contains(window)) { return d->lastActivated.value(window); } + } else if (role == ApplicationMenuObjectPath) { + return d->appMenuObjectPath(window); + } else if (role == ApplicationMenuServiceName) { + return d->appMenuServiceName(window); } return QVariant();