[PATCH] taskmgr: Select process on switch from application to process

David Kahurani k.kahurani at gmail.com
Mon Jan 3 12:50:23 CST 2022


Signed-off-by: David Kahurani <k.kahurani at gmail.com>
---
 programs/taskmgr/applpage.c | 22 ++++++++++++++--------
 programs/taskmgr/perfdata.c | 21 +++++++++++++++++++++
 programs/taskmgr/perfdata.h |  1 +
 3 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/programs/taskmgr/applpage.c b/programs/taskmgr/applpage.c
index b35881c2..0cf9f48d 100644
--- a/programs/taskmgr/applpage.c
+++ b/programs/taskmgr/applpage.c
@@ -28,6 +28,7 @@
 #include <commctrl.h>
 
 #include "taskmgr.h"
+#include "perfdata.h"
 
 typedef struct
 {
@@ -790,15 +791,20 @@ void ApplicationPage_OnGotoProcess(void)
     }
     if (pAPLI) {
         DWORD   dwProcessId;
+	int index;
+	memset(&item, 0, sizeof(LV_ITEMW));
+	item.state = LVIS_SELECTED | LVIS_FOCUSED;
+	item.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
 
-        GetWindowThreadProcessId(pAPLI->hWnd, &dwProcessId);
-        /*
-         * Switch to the process tab
-         */
-        SendMessageW(hTabWnd, TCM_SETCURFOCUS, 1, 0);
-        /*
-         * FIXME: Select the process item in the list
-         */
+	GetWindowThreadProcessId(pAPLI->hWnd, &dwProcessId);
+	/*
+	 *  Switch to the process tab
+	 */
+	SendMessageW(hTabWnd, TCM_SETCURFOCUS, 1, 0);
+
+	index = PerfDataGetProcessIndex(dwProcessId);
+
+	SendMessageW(hProcessPageListCtrl, LVM_SETITEMSTATE, index, (LPARAM) &item);
     }
 }
 
diff --git a/programs/taskmgr/perfdata.c b/programs/taskmgr/perfdata.c
index 4498a2fe..e8dc8900 100644
--- a/programs/taskmgr/perfdata.c
+++ b/programs/taskmgr/perfdata.c
@@ -356,6 +356,27 @@ ULONG PerfDataGetProcessId(ULONG Index)
     return ProcessId;
 }
 
+ULONG PerfDataGetProcessIndex(ULONG ProcessId)
+{
+    ULONG index;
+
+    EnterCriticalSection(&PerfDataCriticalSection);
+
+    for(index=0; index<ProcessCount; index++)
+    {
+	    if(pPerfData[index].ProcessId == ProcessId)
+		    break;
+    }
+
+    LeaveCriticalSection(&PerfDataCriticalSection);
+
+    if (index == ProcessCount)
+	    return 0;
+    else
+	    return index;
+}
+
+
 BOOL PerfDataGetUserName(ULONG Index, LPWSTR lpUserName, int nMaxCount)
 {
     BOOL    bSuccessful;
diff --git a/programs/taskmgr/perfdata.h b/programs/taskmgr/perfdata.h
index 615e7db2..ffc1d2d6 100644
--- a/programs/taskmgr/perfdata.h
+++ b/programs/taskmgr/perfdata.h
@@ -75,6 +75,7 @@ ULONG	PerfDataGetProcessorSystemUsage(void);
 
 BOOL	PerfDataGetImageName(ULONG Index, LPWSTR lpImageName, int nMaxCount);
 ULONG	PerfDataGetProcessId(ULONG Index);
+ULONG   PerfDataGetProcessIndex(ULONG ProcessId);
 BOOL	PerfDataGetUserName(ULONG Index, LPWSTR lpUserName, int nMaxCount);
 ULONG	PerfDataGetSessionId(ULONG Index);
 ULONG	PerfDataGetCPUUsage(ULONG Index);
-- 
2.25.1




More information about the wine-devel mailing list