https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6e77747b305add73133faa2049b8bd34e3e2534e

commit 6e77747b305add73133faa2049b8bd34e3e2534e
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Tue Dec 21 00:18:51 2021 +0100
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Thu Jun 15 12:44:29 2023 +0200

    [TASKMGR] Simplify tray icon code.
---
 base/applications/taskmgr/taskmgr.c  |  6 +--
 base/applications/taskmgr/trayicon.c | 83 ++++++++++++++----------------------
 base/applications/taskmgr/trayicon.h |  9 ++--
 3 files changed, 39 insertions(+), 59 deletions(-)

diff --git a/base/applications/taskmgr/taskmgr.c 
b/base/applications/taskmgr/taskmgr.c
index 28a2b4b3c8a..39c12df2ddd 100644
--- a/base/applications/taskmgr/taskmgr.c
+++ b/base/applications/taskmgr/taskmgr.c
@@ -475,7 +475,7 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, 
LPARAM lParam)
 
     case WM_DESTROY:
         ShowWindow(hDlg, SW_HIDE);
-        TrayIcon_ShellRemoveTrayIcon();
+        TrayIcon_RemoveIcon();
         wp.length = sizeof(WINDOWPLACEMENT);
         GetWindowPlacement(hDlg, &wp);
         TaskManagerSettings.Left = wp.rcNormalPosition.left;
@@ -498,7 +498,7 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, 
LPARAM lParam)
         RefreshApplicationPage();
         RefreshProcessPage();
         RefreshPerformancePage();
-        TrayIcon_ShellUpdateTrayIcon();
+        TrayIcon_UpdateIcon();
         break;
 
     case WM_ENTERMENULOOP:
@@ -763,7 +763,7 @@ BOOL OnCreate(HWND hWnd)
     RefreshProcessPage();
     RefreshPerformancePage();
 
-    TrayIcon_ShellAddTrayIcon();
+    TrayIcon_AddIcon();
 
     return TRUE;
 }
diff --git a/base/applications/taskmgr/trayicon.c 
b/base/applications/taskmgr/trayicon.c
index fb02d1cc88b..5da5d7d778a 100644
--- a/base/applications/taskmgr/trayicon.c
+++ b/base/applications/taskmgr/trayicon.c
@@ -8,7 +8,9 @@
 
 #include "precomp.h"
 
-HICON TrayIcon_GetProcessorUsageIcon(void)
+static HICON
+TrayIcon_GetProcessorUsageIcon(
+    _In_ ULONG CpuUsage)
 {
     HICON    hTrayIcon = NULL;
     HDC      hScreenDC = NULL;
@@ -17,7 +19,6 @@ HICON TrayIcon_GetProcessorUsageIcon(void)
     HBITMAP  hOldBitmap = NULL;
     HBITMAP  hBitmapMask = NULL;
     ICONINFO iconInfo;
-    ULONG    ProcessorUsage;
     int      nLinesToDraw;
     HBRUSH   hBitmapBrush = NULL;
     RECT     rc;
@@ -50,18 +51,13 @@ HICON TrayIcon_GetProcessorUsageIcon(void)
      */
     hOldBitmap = SelectObject(hDC, hBitmap);
 
-    /*
-     * Get the cpu usage
-     */
-    ProcessorUsage = PerfDataGetProcessorUsage();
-
     /*
      * Calculate how many lines to draw
      * since we have 11 rows of space
      * to draw the cpu usage instead of
      * just having 10.
      */
-    nLinesToDraw = (ProcessorUsage + (ProcessorUsage / 10)) / 11;
+    nLinesToDraw = (CpuUsage + (CpuUsage / 10)) / 11;
     rc.left = 3;
     rc.top = 12 - nLinesToDraw;
     rc.right = 13;
@@ -103,29 +99,35 @@ done:
     return hTrayIcon;
 }
 
-BOOL TrayIcon_ShellAddTrayIcon(void)
+static BOOL
+TrayIcon_Update(
+    _In_ DWORD dwMessage)
 {
+    static WCHAR szMsg[64] = L"";
+
     NOTIFYICONDATAW nid;
-    HICON           hIcon = NULL;
-    BOOL            bRetVal;
-    WCHAR           szMsg[64];
+    ULONG CpuUsage;
+    HICON hIcon = NULL;
+    BOOL  bRetVal;
 
-    memset(&nid, 0, sizeof(NOTIFYICONDATAW));
+    if (!*szMsg)
+        LoadStringW(hInst, IDS_MSG_TRAYICONCPUUSAGE, szMsg, ARRAYSIZE(szMsg));
 
-    hIcon = TrayIcon_GetProcessorUsageIcon();
+    ZeroMemory(&nid, sizeof(nid));
 
-    nid.cbSize = sizeof(NOTIFYICONDATAW);
+    CpuUsage = PerfDataGetProcessorUsage();
+    hIcon = TrayIcon_GetProcessorUsageIcon(CpuUsage);
+
+    nid.cbSize = sizeof(nid);
     nid.hWnd = hMainWnd;
     nid.uID = 0;
     nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
     nid.uCallbackMessage = WM_ONTRAYICON;
     nid.hIcon = hIcon;
 
+    wsprintfW(nid.szTip, szMsg, CpuUsage);
 
-    LoadStringW( GetModuleHandleW(NULL), IDS_MSG_TRAYICONCPUUSAGE, szMsg, 
sizeof(szMsg) / sizeof(szMsg[0]));
-    wsprintfW(nid.szTip, szMsg, PerfDataGetProcessorUsage());
-
-    bRetVal = Shell_NotifyIconW(NIM_ADD, &nid);
+    bRetVal = Shell_NotifyIconW(dwMessage, &nid);
 
     if (hIcon)
         DestroyIcon(hIcon);
@@ -133,48 +135,27 @@ BOOL TrayIcon_ShellAddTrayIcon(void)
     return bRetVal;
 }
 
-BOOL TrayIcon_ShellRemoveTrayIcon(void)
+BOOL TrayIcon_AddIcon(VOID)
 {
-    NOTIFYICONDATAW nid;
-    BOOL            bRetVal;
-
-    memset(&nid, 0, sizeof(NOTIFYICONDATAW));
-
-    nid.cbSize = sizeof(NOTIFYICONDATAW);
-    nid.hWnd = hMainWnd;
-    nid.uID = 0;
-    nid.uFlags = 0;
-    nid.uCallbackMessage = WM_ONTRAYICON;
-
-    bRetVal = Shell_NotifyIconW(NIM_DELETE, &nid);
-
-    return bRetVal;
+    return TrayIcon_Update(NIM_ADD);
 }
 
-BOOL TrayIcon_ShellUpdateTrayIcon(void)
+BOOL TrayIcon_RemoveIcon(VOID)
 {
     NOTIFYICONDATAW nid;
-    HICON           hIcon = NULL;
-    BOOL            bRetVal;
-    WCHAR           szTemp[64];
-
-    memset(&nid, 0, sizeof(NOTIFYICONDATAW));
 
-    hIcon = TrayIcon_GetProcessorUsageIcon();
+    ZeroMemory(&nid, sizeof(nid));
 
-    nid.cbSize = sizeof(NOTIFYICONDATAW);
+    nid.cbSize = sizeof(nid);
     nid.hWnd = hMainWnd;
     nid.uID = 0;
-    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
+    nid.uFlags = 0;
     nid.uCallbackMessage = WM_ONTRAYICON;
-    nid.hIcon = hIcon;
-    LoadStringW(hInst, IDS_MSG_TRAYICONCPUUSAGE, szTemp, 
sizeof(szTemp)/sizeof(szTemp[0]));
-    wsprintfW(nid.szTip, szTemp, PerfDataGetProcessorUsage());
 
-    bRetVal = Shell_NotifyIconW(NIM_MODIFY, &nid);
-
-    if (hIcon)
-        DestroyIcon(hIcon);
+    return Shell_NotifyIconW(NIM_DELETE, &nid);
+}
 
-    return bRetVal;
+BOOL TrayIcon_UpdateIcon(VOID)
+{
+    return TrayIcon_Update(NIM_MODIFY);
 }
diff --git a/base/applications/taskmgr/trayicon.h 
b/base/applications/taskmgr/trayicon.h
index 5b120b4ab08..6d6c1dbc21c 100644
--- a/base/applications/taskmgr/trayicon.h
+++ b/base/applications/taskmgr/trayicon.h
@@ -8,9 +8,8 @@
 
 #pragma once
 
-#define WM_ONTRAYICON   WM_USER + 5
+#define WM_ONTRAYICON   (WM_USER + 5)
 
-HICON  TrayIcon_GetProcessorUsageIcon(void);
-BOOL   TrayIcon_ShellAddTrayIcon(void);
-BOOL   TrayIcon_ShellRemoveTrayIcon(void);
-BOOL   TrayIcon_ShellUpdateTrayIcon(void);
+BOOL TrayIcon_AddIcon(VOID);
+BOOL TrayIcon_RemoveIcon(VOID);
+BOOL TrayIcon_UpdateIcon(VOID);

Reply via email to