[libtaskmanager] Expose process ID of application

Works on X11, Wayland implementation pending.

Differential Revision: https://phabricator.kde.org/D3301
wilder-5.14
Kai Uwe Broulik 9 years ago
parent 341a534e9d
commit b5a83d0850
  1. 1
      libtaskmanager/abstracttasksmodel.h
  2. 2
      libtaskmanager/waylandtasksmodel.cpp
  3. 6
      libtaskmanager/xwindowtasksmodel.cpp

@ -83,6 +83,7 @@ public:
IsDemandingAttention, /**< Task is demanding attention. */
SkipTaskbar, /**< Task should not be shown in a 'task bar' user interface. */
SkipPager, /**< Task should not to be shown in a 'pager' user interface. */
AppPid, /**< Application Process ID */
};
Q_ENUM(AdditionalRoles)

@ -332,6 +332,8 @@ QVariant WaylandTasksModel::data(const QModelIndex &index, int role) const
return window->skipTaskbar();
} else if (role == SkipPager) {
// FIXME Implement.
} else if (role == AppPid) {
// FIXME Implement.
}
return QVariant();

@ -52,7 +52,7 @@ namespace TaskManager
{
static const NET::Properties windowInfoFlags = NET::WMState | NET::XAWMState | NET::WMDesktop |
NET::WMVisibleName | NET::WMGeometry | NET::WMFrameExtents | NET::WMWindowType;
NET::WMVisibleName | NET::WMGeometry | NET::WMFrameExtents | NET::WMWindowType | NET::WMPid;
static const NET::Properties2 windowInfoFlags2 = NET::WM2DesktopFileName | NET::WM2Activities |
NET::WM2WindowClass | NET::WM2AllowedActions;
@ -346,7 +346,7 @@ void XWindowTasksModel::Private::windowChanged(WId window, NET::Properties prope
|| properties2 & (NET::WM2DesktopFileName | NET::WM2WindowClass)) {
wipeInfoCache = true;
wipeAppDataCache = true;
changedRoles << Qt::DisplayRole << Qt::DecorationRole << AppId << AppName << GenericName << LauncherUrl;
changedRoles << Qt::DisplayRole << Qt::DecorationRole << AppId << AppName << GenericName << LauncherUrl << AppPid;
}
if ((properties & NET::WMIcon) && !changedRoles.contains(Qt::DecorationRole)) {
@ -926,6 +926,8 @@ QVariant XWindowTasksModel::data(const QModelIndex &index, int role) const
return (info->hasState(NET::SkipTaskbar) || info->windowType(NET::UtilityMask) == NET::Utility);
} else if (role == SkipPager) {
return d->windowInfo(window)->hasState(NET::SkipPager);
} else if (role == AppPid) {
return d->windowInfo(window)->pid();
}
return QVariant();

Loading…
Cancel
Save