diff --git a/Action.c b/Action.c index 391716a5d93657d2b00f6809bca873230128b16c..a6394ac3b8641c8ca60832781b1a25af38e5a32b 100644 --- a/Action.c +++ b/Action.c @@ -142,7 +142,7 @@ static void tagAllChildren(Panel* panel, Process* parent) { pid_t ppid = parent->pid; for (int i = 0; i < Panel_size(panel); i++) { Process* p = (Process*) Panel_get(panel, i); - if (!p->tag && p->ppid == ppid) { + if (!p->tag && Process_isChildOf(p, ppid)) { tagAllChildren(panel, p); } } diff --git a/Process.c b/Process.c index 394ca25da2c727b7b4e4226c9c475eaaecd48adc..6551afd7e87af26ddfdbc92442d22d153b0873ab 100644 --- a/Process.c +++ b/Process.c @@ -172,6 +172,8 @@ typedef struct ProcessClass_ { #define As_Process(this_) ((ProcessClass*)((this_)->super.klass)) +#define Process_isChildOf(process_, pid_) (process_->tgid == pid_ || (process_->tgid == process_->pid && process_->ppid == pid_)) + }*/ static int Process_getuid = -1; diff --git a/Process.h b/Process.h index 43780a2fd84dbb2c7799e8b9fb0ce3f8259cc01a..5b8ffdba1e9e2c0a1c4446b24e39d1950c623f63 100644 --- a/Process.h +++ b/Process.h @@ -151,6 +151,8 @@ typedef struct ProcessClass_ { #define As_Process(this_) ((ProcessClass*)((this_)->super.klass)) +#define Process_isChildOf(process_, pid_) (process_->tgid == pid_ || (process_->tgid == process_->pid && process_->ppid == pid_)) + #define ONE_K 1024L #define ONE_M (ONE_K * ONE_K) diff --git a/ProcessList.c b/ProcessList.c index aea57e7e3ad00d1f39e81dd9875932dc854cd2e1..25ae1385ae128e189a1dd073b95a05f70f8514c3 100644 --- a/ProcessList.c +++ b/ProcessList.c @@ -173,7 +173,7 @@ static void ProcessList_buildTree(ProcessList* this, pid_t pid, int level, int i for (int i = Vector_size(this->processes) - 1; i >= 0; i--) { Process* process = (Process*) (Vector_get(this->processes, i)); - if (process->show && (process->tgid == pid || (process->tgid == process->pid && process->ppid == pid))) { + if (process->show && Process_isChildOf(process, pid)) { process = (Process*) (Vector_take(this->processes, i)); Vector_add(children, process); }