https://git.reactos.org/?p=reactos.git;a=commitdiff;h=32bdd85b7fb342c61fc86…
commit 32bdd85b7fb342c61fc86efab54cb68bd0c59f03
Author: Whindmar Saksit <whindsaks(a)proton.me>
AuthorDate: Mon Nov 20 17:41:31 2023 +0100
Commit: GitHub <noreply(a)github.com>
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);