diff --git a/ProcessList.c b/ProcessList.c index 1f47408b..e02e5f8c 100644 --- a/ProcessList.c +++ b/ProcessList.c @@ -236,6 +236,7 @@ ProcessList* ProcessList_new(UsersTable* usersTable) { this->detailedCPUTime = false; this->countCPUsFromZero = false; this->treeStr = NULL; + this->following = -1; return this; } @@ -915,7 +916,7 @@ void ProcessList_rebuildPanel(ProcessList* this, bool flags, int following, bool } int currPos = Panel_getSelectedIndex(this->panel); - pid_t currPid = following ? following : 0; + pid_t currPid = following != -1 ? following : 0; int currScrollV = this->panel->scrollV; Panel_prune(this->panel); diff --git a/htop.c b/htop.c index 943a7241..b9092d5a 100644 --- a/htop.c +++ b/htop.c @@ -207,7 +207,16 @@ static Object* pickFromVector(Panel* panel, Panel* list, int x, int y, const cha ScreenManager_add(scr, panel, NULL, -1); Panel* panelFocus; int ch; + bool unfollow = false; + if (header->pl->following == -1) { + Process* p = (Process*)Panel_getSelected(panel); + header->pl->following = p ? p->pid : -1; + unfollow = true; + } ScreenManager_run(scr, &panelFocus, &ch); + if (unfollow) { + header->pl->following = -1; + } ScreenManager_delete(scr); Panel_move(panel, 0, y); Panel_resize(panel, COLS, LINES-y-1);