diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,7 @@ find_package(KSMServerDBusInterface CONFIG REQUIRED) find_package(KF5ItemModels CONFIG REQUIRED) find_package(KF5Emoticons CONFIG REQUIRED) +find_package(KF5 REQUIRED COMPONENTS SysGuard) find_package(KF5Baloo ${KF5_MIN_VERSION}) set_package_properties(KF5Baloo PROPERTIES DESCRIPTION "File Searching" diff --git a/applets/taskmanager/CMakeLists.txt b/applets/taskmanager/CMakeLists.txt --- a/applets/taskmanager/CMakeLists.txt +++ b/applets/taskmanager/CMakeLists.txt @@ -28,6 +28,7 @@ KF5::KIOWidgets KF5::KIOFileWidgets # KFilePlacesModel KF5::Plasma + KF5::ProcessCore KF5::Service KF5::WindowSystem PW::LibNotificationManager) diff --git a/applets/taskmanager/package/contents/ui/PulseAudio.qml b/applets/taskmanager/package/contents/ui/PulseAudio.qml --- a/applets/taskmanager/package/contents/ui/PulseAudio.qml +++ b/applets/taskmanager/package/contents/ui/PulseAudio.qml @@ -62,7 +62,23 @@ } function streamsForPid(pid) { - return findStreams("pid", pid); + var streams = findStreams("pid", pid); + + if (streams.length === 0) { + for (var i = 0, length = instantiator.count; i < length; ++i) { + var stream = instantiator.objectAt(i); + + if (stream.parentPid === -1) { + stream.parentPid = backend.parentPid(stream.pid); + } + + if (stream.parentPid === pid) { + streams.push(stream); + } + } + } + + return streams; } // QtObject has no default property, hence adding the Instantiator to one explicitly. @@ -74,6 +90,8 @@ delegate: QtObject { readonly property int pid: Client ? Client.properties["application.process.id"] : 0 + // Determined on demand. + property int parentPid: -1 readonly property string appName: Client ? Client.properties["application.name"] : "" readonly property bool muted: Muted // whether there is nothing actually going on on that stream diff --git a/applets/taskmanager/plugin/backend.h b/applets/taskmanager/plugin/backend.h --- a/applets/taskmanager/plugin/backend.h +++ b/applets/taskmanager/plugin/backend.h @@ -89,6 +89,8 @@ Q_INVOKABLE void cancelHighlightWindows(); + Q_INVOKABLE qint64 parentPid(qint64 pid) const; + static QUrl tryDecodeApplicationsUrl(const QUrl &launcherUrl); public Q_SLOTS: diff --git a/applets/taskmanager/plugin/backend.cpp b/applets/taskmanager/plugin/backend.cpp --- a/applets/taskmanager/plugin/backend.cpp +++ b/applets/taskmanager/plugin/backend.cpp @@ -45,6 +45,9 @@ #include #include +#include +#include + namespace KAStats = KActivities::Stats; using namespace KAStats; @@ -536,6 +539,19 @@ updateWindowHighlight(); } +qint64 Backend::parentPid(qint64 pid) const +{ + KSysGuard::Processes procs; + procs.updateOrAddProcess(pid); + + KSysGuard::Process *proc = procs.getProcess(pid); + if (!proc) { + return -1; + } + + return proc->parentPid(); +} + void Backend::windowsHovered(const QVariant &_winIds, bool hovered) { m_windowsToHighlight.clear();