https://git.reactos.org/?p=reactos.git;a=commitdiff;h=32bdd85b7fb342c61fc86efab54cb68bd0c59f03

commit 32bdd85b7fb342c61fc86efab54cb68bd0c59f03
Author:     Whindmar Saksit <[email protected]>
AuthorDate: Mon Nov 20 17:41:31 2023 +0100
Commit:     GitHub <[email protected]>
CommitDate: Mon Nov 20 16:41:31 2023 +0000

    DisplayIcon needs to validate the result and support icon index (#5664)
    
    Test:
    
    @echo off
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex1 /v 
DisplayName /d "Ex1 Normal" /f
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex1 /v 
DisplayIcon /d "%windir%\explorer.exe" /f
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex1 /v 
UnstallString /d "calc.exe" /f
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex2 /v 
DisplayName /d "Ex2 Bad icon path" /f
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex2 /v 
DisplayIcon /d "%windir%\DoesNotExist.exe" /f
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex2 /v 
UnstallString /d "calc.exe" /f
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex3 /v 
DisplayName /d "Ex3 Resource index" /f
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex3 /v 
DisplayIcon /d "%windir%\explorer.exe,4" /f
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex3 /v 
UnstallString /d "calc.exe" /f
    start appwiz.cpl
---
 base/applications/rapps/appview.cpp | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/base/applications/rapps/appview.cpp 
b/base/applications/rapps/appview.cpp
index 004e1623c3c..a34e9cd9cad 100644
--- a/base/applications/rapps/appview.cpp
+++ b/base/applications/rapps/appview.cpp
@@ -1289,14 +1289,13 @@ CAppsListView::AddApplication(CAppInfo *AppInfo, BOOL 
InitialCheckState)
         /* Load icon from registry */
         HICON hIcon = NULL;
         CStringW szIconPath;
+        int IconIndex;
         if (AppInfo->RetrieveIcon(szIconPath))
         {
-            PathParseIconLocationW((LPWSTR)szIconPath.GetString());
+            IconIndex = PathParseIconLocationW(szIconPath.GetBuffer());
+            szIconPath.ReleaseBuffer();
 
-            /* Load only the 1st icon from the application executable,
-             * because all apps provide the executables which have the main 
icon
-             * as 1st in the index , so we don't need other icons here */
-            hIcon = ExtractIconW(hInst, szIconPath.GetString(), 0);
+            ExtractIconExW(szIconPath.GetString(), IconIndex, &hIcon, NULL, 1);
         }
 
         /* Use the default icon if none were found in the file, or if it is 
not supported (returned 1) */
@@ -1306,7 +1305,7 @@ CAppsListView::AddApplication(CAppInfo *AppInfo, BOOL 
InitialCheckState)
             hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(IDI_MAIN));
         }
 
-        int IconIndex = ImageList_AddIcon(m_hImageListView, hIcon);
+        IconIndex = ImageList_AddIcon(m_hImageListView, hIcon);
         DestroyIcon(hIcon);
 
         int Index = AddItem(ItemCount, IconIndex, AppInfo->szDisplayName, 
(LPARAM)AppInfo);

Reply via email to