Add support for libproc2 (Linux)

Needed for Debian build. (#590)
Also cleaned up platform dependent sections of CMakeLists.txt.
This commit is contained in:
WarmUpTill
2022-11-19 20:23:25 +01:00
committed by WarmUpTill
parent 7407bc7d82
commit fd8e3c1e5c
2 changed files with 68 additions and 24 deletions

View File

@@ -24,7 +24,11 @@
#include <QStringList>
#include <QRegularExpression>
#include <QLibrary>
#ifdef USE_PROCPS
#include <proc/readproc.h>
#else
#include <libproc2/pids.h>
#endif
#include <fstream>
#include <sstream>
@@ -362,7 +366,7 @@ bool isFullscreen(const std::string &title)
return false;
}
//exe switch is not quite what is expected but it works for now
#ifdef USE_PROCPS
void GetProcessList(QStringList &processes)
{
processes.clear();
@@ -371,12 +375,37 @@ void GetProcessList(QStringList &processes)
memset(&proc_info, 0, sizeof(proc_info));
while (readproc(proc, &proc_info) != NULL) {
QString procName(proc_info.cmd);
if (!procName.isEmpty() && !processes.contains(proc_info.cmd)) {
processes << QString(proc_info.cmd);
if (!procName.isEmpty() && !processes.contains(procName)) {
processes << procName;
}
}
closeproc(proc);
}
#else
void GetProcessList(QStringList &processes)
{
processes.clear();
struct pids_info *info = NULL;
struct pids_stack *stack;
enum pids_item Items[] = {
PIDS_CMD,
};
if (procps_pids_new(&info, Items, sizeof(Items) / sizeof(Items[0])) <
0) {
return;
}
while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY))) {
auto cmd = PIDS_VAL(0, str, stack, info);
QString procName(cmd);
if (!procName.isEmpty() && !processes.contains(procName)) {
processes << procName;
}
}
procps_pids_unref(&info);
}
#endif
int getForegroundProcessPid()
{