Commit 861282bf authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

Fix the icon resource ids (most were off by one).

Fix IExtractIcon_{GetIconLocation,Extract} to use -ve icon resource ids and fix bugs relating to confusion between resource ids and the system imagelist indicies. Extend the system imagelist initialization hack to load both +ve and -ve resource ids. Add a printer icon (that'll be used by an upcoming printer folder patch).
parent 4f50a2c0
...@@ -10,6 +10,7 @@ folder_open.ico ...@@ -10,6 +10,7 @@ folder_open.ico
mycomputer.ico mycomputer.ico
netdrive.ico netdrive.ico
netdrive2.ico netdrive2.ico
printer.ico
ramdisk.ico ramdisk.ico
shell.spec.c shell.spec.c
shell32.dll.dbg.c shell32.dll.dbg.c
......
...@@ -62,6 +62,7 @@ RC_BINARIES = \ ...@@ -62,6 +62,7 @@ RC_BINARIES = \
mycomputer.ico \ mycomputer.ico \
netdrive.ico \ netdrive.ico \
netdrive2.ico \ netdrive2.ico \
printer.ico \
ramdisk.ico ramdisk.ico
C_SRCS16 = shell.c C_SRCS16 = shell.c
......
...@@ -223,7 +223,12 @@ BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, LPDWORD dwNr ...@@ -223,7 +223,12 @@ BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, LPDWORD dwNr
ret = HCR_RegGetDefaultIconW(hkey, szDest, len, dwNr); ret = HCR_RegGetDefaultIconW(hkey, szDest, len, dwNr);
RegCloseKey(hkey); RegCloseKey(hkey);
} }
TRACE("-- %s %li\n", debugstr_w(szDest), *dwNr );
if(ret)
TRACE("-- %s %li\n", debugstr_w(szDest), *dwNr );
else
TRACE("-- not found\n");
return ret; return ret;
} }
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "pidl.h" #include "pidl.h"
#include "shell32_main.h" #include "shell32_main.h"
#include "shfldr.h" #include "shfldr.h"
#include "shresdef.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell); WINE_DEFAULT_DEBUG_CHANNEL(shell);
...@@ -196,9 +197,9 @@ static HRESULT getIconLocationForFolder(IExtractIconW *iface, UINT uFlags, ...@@ -196,9 +197,9 @@ static HRESULT getIconLocationForFolder(IExtractIconW *iface, UINT uFlags,
if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &dwNr)) if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &dwNr))
{ {
lstrcpynW(szIconFile, swShell32Name, cchMax); lstrcpynW(szIconFile, swShell32Name, cchMax);
dwNr = 3; dwNr = IDI_SHELL_FOLDER;
} }
*piIndex = (uFlags & GIL_OPENICON) ? dwNr + 1 : dwNr; *piIndex = -((uFlags & GIL_OPENICON) ? dwNr + 1 : dwNr);
} }
return S_OK; return S_OK;
} }
...@@ -233,7 +234,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation( ...@@ -233,7 +234,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
if (_ILIsDesktop(pSimplePidl)) if (_ILIsDesktop(pSimplePidl))
{ {
lstrcpynW(szIconFile, swShell32Name, cchMax); lstrcpynW(szIconFile, swShell32Name, cchMax);
*piIndex = 34; *piIndex = -IDI_SHELL_DESKTOP;
} }
/* my computer and other shell extensions */ /* my computer and other shell extensions */
...@@ -257,7 +258,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation( ...@@ -257,7 +258,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
else else
{ {
lstrcpynW(szIconFile, swShell32Name, cchMax); lstrcpynW(szIconFile, swShell32Name, cchMax);
*piIndex = 15; *piIndex = -IDI_SHELL_MYCOMPUTER;
} }
} }
...@@ -271,17 +272,17 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation( ...@@ -271,17 +272,17 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
{ {
switch(GetDriveTypeA(sTemp)) switch(GetDriveTypeA(sTemp))
{ {
case DRIVE_REMOVABLE: icon_idx = 5; break; case DRIVE_REMOVABLE: icon_idx = IDI_SHELL_FLOPPY; break;
case DRIVE_CDROM: icon_idx = 11; break; case DRIVE_CDROM: icon_idx = IDI_SHELL_CDROM; break;
case DRIVE_REMOTE: icon_idx = 9; break; case DRIVE_REMOTE: icon_idx = IDI_SHELL_NETDRIVE; break;
case DRIVE_RAMDISK: icon_idx = 12; break; case DRIVE_RAMDISK: icon_idx = IDI_SHELL_RAMDISK; break;
} }
} }
if (icon_idx != -1) if (icon_idx != -1)
{ {
lstrcpynW(szIconFile, swShell32Name, cchMax); lstrcpynW(szIconFile, swShell32Name, cchMax);
*piIndex = icon_idx; *piIndex = -icon_idx;
} }
else else
{ {
...@@ -292,14 +293,14 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation( ...@@ -292,14 +293,14 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
else else
{ {
lstrcpynW(szIconFile, swShell32Name, cchMax); lstrcpynW(szIconFile, swShell32Name, cchMax);
*piIndex = 8; *piIndex = -IDI_SHELL_DRIVE;
} }
} }
} }
else if (_ILIsFolder (pSimplePidl)) else if (_ILIsFolder (pSimplePidl))
{ {
getIconLocationForFolder(iface, uFlags, szIconFile, cchMax, piIndex, getIconLocationForFolder(iface, uFlags, szIconFile, cchMax, piIndex,
pwFlags); pwFlags);
} }
else else
{ {
...@@ -370,14 +371,18 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation( ...@@ -370,14 +371,18 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
static HRESULT WINAPI IExtractIconW_fnExtract(IExtractIconW * iface, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) static HRESULT WINAPI IExtractIconW_fnExtract(IExtractIconW * iface, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize)
{ {
IExtractIconWImpl *This = (IExtractIconWImpl *)iface; IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
int index;
FIXME("(%p) (file=%p index=%u %p %p size=%u) semi-stub\n", This, debugstr_w(pszFile), nIconIndex, phiconLarge, phiconSmall, nIconSize); FIXME("(%p) (file=%p index=%d %p %p size=%08x) semi-stub\n", This, debugstr_w(pszFile), (signed)nIconIndex,
phiconLarge, phiconSmall, nIconSize);
index = SIC_GetIconIndex(pszFile, nIconIndex);
if (phiconLarge) if (phiconLarge)
*phiconLarge = ImageList_GetIcon(ShellBigIconList, nIconIndex, ILD_TRANSPARENT); *phiconLarge = ImageList_GetIcon(ShellBigIconList, index, ILD_TRANSPARENT);
if (phiconSmall) if (phiconSmall)
*phiconSmall = ImageList_GetIcon(ShellSmallIconList, nIconIndex, ILD_TRANSPARENT); *phiconSmall = ImageList_GetIcon(ShellSmallIconList, index, ILD_TRANSPARENT);
return S_OK; return S_OK;
} }
......
...@@ -243,7 +243,8 @@ BOOL SIC_Initialize(void) ...@@ -243,7 +243,8 @@ BOOL SIC_Initialize(void)
hSm = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_small, cy_small, LR_SHARED); hSm = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_small, cy_small, LR_SHARED);
hLg = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_large, cy_large, LR_SHARED); hLg = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_large, cy_large, LR_SHARED);
} }
SIC_IconAppend (swShell32Name, index, hSm, hLg); SIC_IconAppend (swShell32Name, index - 1, hSm, hLg);
SIC_IconAppend (swShell32Name, -index, hSm, hLg);
} }
TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList); TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
#include "pidl.h" #include "pidl.h"
#include "shell32_main.h" #include "shell32_main.h"
#include "version.h" #include "version.h"
#include "shresdef.h"
#include "wine/debug.h" #include "wine/debug.h"
#include "wine/unicode.h" #include "wine/unicode.h"
...@@ -501,7 +502,7 @@ DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, ...@@ -501,7 +502,7 @@ DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
lstrcpynW(sTemp, szFullPath, MAX_PATH); lstrcpynW(sTemp, szFullPath, MAX_PATH);
if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
psfi->iIcon = 2; psfi->iIcon = SIC_GetIconIndex(swShell32Name, -IDI_SHELL_FOLDER);
else else
{ {
static const WCHAR p1W[] = {'%','1',0}; static const WCHAR p1W[] = {'%','1',0};
......
...@@ -36,7 +36,7 @@ BEGIN ...@@ -36,7 +36,7 @@ BEGIN
END END
/* BINRES document.ico */ /* BINRES document.ico */
1 ICON document.ico IDI_SHELL_DOCUMENT ICON document.ico
/* { /* {
'00 00 01 00 04 00 10 10 10 00 01 00 04 00 28 01' '00 00 01 00 04 00 10 10 10 00 01 00 04 00 28 01'
'00 00 46 00 00 00 10 10 00 00 01 00 08 00 68 05' '00 00 46 00 00 00 10 10 00 00 01 00 08 00 68 05'
...@@ -340,7 +340,7 @@ END ...@@ -340,7 +340,7 @@ END
/* BINRES folder.ico */ /* BINRES folder.ico */
3 ICON folder.ico IDI_SHELL_FOLDER ICON folder.ico
/* { /* {
'00 00 01 00 04 00 10 10 10 00 01 00 04 00 28 01' '00 00 01 00 04 00 10 10 10 00 01 00 04 00 28 01'
'00 00 46 00 00 00 10 10 00 00 01 00 08 00 68 05' '00 00 46 00 00 00 10 10 00 00 01 00 08 00 68 05'
...@@ -640,7 +640,7 @@ END ...@@ -640,7 +640,7 @@ END
} */ } */
/* BINRES folder_open.ico */ /* BINRES folder_open.ico */
4 ICON folder_open.ico IDI_SHELL_FOLDER_OPEN ICON folder_open.ico
/* { /* {
'00 00 01 00 01 00 10 10 10 00 00 00 00 00 68 05' '00 00 01 00 01 00 10 10 10 00 00 00 00 00 68 05'
'00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00' '00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00'
...@@ -733,7 +733,7 @@ END ...@@ -733,7 +733,7 @@ END
} */ } */
/* BINRES floppy.ico */ /* BINRES floppy.ico */
5 ICON floppy.ico IDI_SHELL_FLOPPY ICON floppy.ico
/* { /* {
'00 00 01 00 09 00 20 20 00 00 01 00 08 00 A8 08' '00 00 01 00 09 00 20 20 00 00 01 00 08 00 A8 08'
'00 00 96 00 00 00 10 10 00 00 01 00 08 00 68 05' '00 00 96 00 00 00 10 10 00 00 01 00 08 00 68 05'
...@@ -2315,7 +2315,7 @@ END ...@@ -2315,7 +2315,7 @@ END
/* BINRES drive.ico */ /* BINRES drive.ico */
8 ICON drive.ico IDI_SHELL_DRIVE ICON drive.ico
/* { /* {
'00 00 01 00 08 00 20 20 00 00 01 00 08 00 A8 08' '00 00 01 00 08 00 20 20 00 00 01 00 08 00 A8 08'
'00 00 86 00 00 00 10 10 00 00 01 00 08 00 68 05' '00 00 86 00 00 00 10 10 00 00 01 00 08 00 68 05'
...@@ -3793,7 +3793,7 @@ END ...@@ -3793,7 +3793,7 @@ END
} */ } */
/* BINRES netdrive.ico */ /* BINRES netdrive.ico */
9 ICON netdrive.ico IDI_SHELL_NETDRIVE ICON netdrive.ico
/* { /* {
'00 00 01 00 09 00 20 20 00 00 01 00 08 00 A8 08' '00 00 01 00 09 00 20 20 00 00 01 00 08 00 A8 08'
'00 00 96 00 00 00 10 10 00 00 01 00 08 00 68 05' '00 00 96 00 00 00 10 10 00 00 01 00 08 00 68 05'
...@@ -5374,7 +5374,7 @@ END ...@@ -5374,7 +5374,7 @@ END
} */ } */
/* BINRES netdrive2.ico */ /* BINRES netdrive2.ico */
10 ICON netdrive2.ico IDI_SHELL_NETDRIVE2 ICON netdrive2.ico
/* { /* {
'00 00 01 00 09 00 20 20 00 00 01 00 08 00 A8 08' '00 00 01 00 09 00 20 20 00 00 01 00 08 00 A8 08'
'00 00 96 00 00 00 10 10 00 00 01 00 08 00 68 05' '00 00 96 00 00 00 10 10 00 00 01 00 08 00 68 05'
...@@ -6955,7 +6955,7 @@ END ...@@ -6955,7 +6955,7 @@ END
} */ } */
/* BINRES cdrom.ico */ /* BINRES cdrom.ico */
11 ICON cdrom.ico IDI_SHELL_CDROM ICON cdrom.ico
/* { /* {
'00 00 01 00 09 00 20 20 00 00 01 00 08 00 A8 08' '00 00 01 00 09 00 20 20 00 00 01 00 08 00 A8 08'
'00 00 96 00 00 00 10 10 00 00 01 00 08 00 68 05' '00 00 96 00 00 00 10 10 00 00 01 00 08 00 68 05'
...@@ -8536,7 +8536,7 @@ END ...@@ -8536,7 +8536,7 @@ END
} */ } */
/* BINRES ramdisk.ico */ /* BINRES ramdisk.ico */
12 ICON ramdisk.ico IDI_SHELL_RAMDISK ICON ramdisk.ico
/* { /* {
'00 00 01 00 07 00 20 20 00 00 01 00 04 00 E8 02' '00 00 01 00 07 00 20 20 00 00 01 00 04 00 E8 02'
'00 00 76 00 00 00 10 10 00 00 01 00 08 00 68 05' '00 00 76 00 00 00 10 10 00 00 01 00 08 00 68 05'
...@@ -9908,7 +9908,7 @@ END ...@@ -9908,7 +9908,7 @@ END
/* BINRES mycomputer.ico */ /* BINRES mycomputer.ico */
15 ICON mycomputer.ico IDI_SHELL_MYCOMPUTER ICON mycomputer.ico
/* { /* {
'00 00 01 00 02 00 10 10 10 00 01 00 04 00 28 01' '00 00 01 00 02 00 10 10 10 00 01 00 04 00 28 01'
'00 00 26 00 00 00 20 20 10 00 01 00 04 00 E8 02' '00 00 26 00 00 00 20 20 10 00 01 00 04 00 E8 02'
...@@ -9980,11 +9980,81 @@ END ...@@ -9980,11 +9980,81 @@ END
'FF FF FF FF FF FF' 'FF FF FF FF FF FF'
} */ } */
/* BINRES printer.ico */
IDI_SHELL_PRINTER ICON printer.ico
/* {
'00 00 01 00 02 00 20 20 10 00 00 00 00 00 E8 02'
'00 00 26 00 00 00 10 10 10 00 00 00 00 00 28 01'
'00 00 0E 03 00 00 28 00 00 00 20 00 00 00 40 00'
'00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
'00 00 80 00 80 00 80 80 00 00 C0 C0 C0 00 80 80'
'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'08 88 88 88 88 88 88 88 88 80 00 00 00 00 00 00'
'08 88 88 88 88 88 88 88 88 80 00 00 00 00 00 00'
'08 88 88 88 88 8A A8 89 98 80 00 00 00 00 00 00'
'08 88 88 88 88 8A A8 89 98 80 00 00 00 00 00 00'
'08 88 88 88 88 88 88 88 88 80 00 00 00 00 00 00'
'08 88 88 88 88 88 88 88 88 80 00 00 00 00 00 00'
'00 77 77 77 77 77 77 77 77 77 00 00 00 00 00 00'
'00 07 77 77 77 77 77 77 77 77 70 00 00 00 00 00'
'00 00 77 77 77 77 77 77 77 77 77 00 00 00 00 00'
'00 00 07 7F FF FF FF FF FF FF FF 70 00 00 00 00'
'00 00 00 7F FF FF FF FF FF FF FF 77 00 00 00 00'
'00 00 00 0F FF FF FF FF FF FF FF 77 70 00 00 00'
'00 00 00 0F FF 00 00 00 00 0F FF 00 00 00 00 00'
'00 00 00 00 FF FF FF FF FF FF FF F0 00 00 00 00'
'00 00 00 00 FF FF FF FF FF FF FF F0 00 00 00 00'
'00 00 00 00 FF F0 00 00 00 00 FF F0 00 00 00 00'
'00 00 00 00 FF FF FF FF FF FF FF F0 00 00 00 00'
'00 00 00 00 0F FF FF FF FF FF FF FF 00 00 00 00'
'00 00 00 00 0F FF 00 00 00 00 0F FF 00 00 00 00'
'00 00 00 00 0F FF FF FF FF FF FF FF 00 00 00 00'
'00 00 00 00 0F FF FF FF FF FF FF FF 00 00 00 00'
'00 00 00 00 00 FF F0 00 00 00 00 FF F0 00 00 00'
'00 00 00 00 00 FF FF FF FF FF FF FF F0 00 00 00'
'00 00 00 00 00 FF FF FF FF FF FF FF F0 00 00 00'
'00 00 00 00 00 FF FF FF FF FF FF FF F0 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF'
'FF FF FF FF FF FF FF FF FF FF F8 00 00 FF F8 00'
'00 7F F8 00 00 3F F8 00 00 1F F8 00 00 0F F8 00'
'00 07 FC 00 00 07 FE 00 00 07 FF 00 00 07 FF 80'
'00 07 FF C0 00 07 FF E0 00 07 FF E0 00 3F FF F0'
'00 1F FF F0 00 1F FF F0 00 1F FF F0 00 1F FF F8'
'00 0F FF F8 00 0F FF F8 00 0F FF F8 00 0F FF FC'
'00 07 FF FC 00 07 FF FC 00 07 FF FC 00 07 FF FF'
'FF FF FF FF FF FF FF FF FF FF FF FF FF FF 28 00'
'00 00 10 00 00 00 20 00 00 00 01 00 04 00 00 00'
'00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 88 88 88 88 88 00 00 00 88'
'88 AA 89 98 00 00 00 88 88 88 88 88 00 00 00 77'
'77 77 77 77 70 00 00 07 7F FF FF FF 77 00 00 00'
'7F FF FF FF 77 70 00 00 0F 00 00 0F 00 00 00 00'
'0F FF FF FF F0 00 00 00 00 F0 00 00 F0 00 00 00'
'00 FF FF FF FF 00 00 00 00 0F 00 00 0F 00 00 00'
'00 0F FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 FF FF 00 00 FF FF 00 00 C0 07'
'00 00 C0 03 00 00 C0 01 00 00 C0 01 00 00 E0 01'
'00 00 F0 01 00 00 F8 0F 00 00 F8 07 00 00 FC 07'
'00 00 FC 03 00 00 FE 03 00 00 FE 03 00 00 FF FF'
'00 00 FF FF 00 00'
} */
/* BINRES desktop.ico */ /* BINRES desktop.ico */
34 ICON desktop.ico IDI_SHELL_DESKTOP ICON desktop.ico
/* { /* {
'00 00 01 00 02 00 10 10 10 00 00 00 00 00 28 01' '00 00 01 00 02 00 10 10 10 00 00 00 00 00 28 01'
'00 00 26 00 00 00 20 20 10 00 00 00 00 00 E8 02' '00 00 26 00 00 00 20 20 10 00 00 00 00 00 E8 02'
......
...@@ -89,4 +89,17 @@ ...@@ -89,4 +89,17 @@
#define IDD_TITLE 0x3742 #define IDD_TITLE 0x3742
#define IDD_TREEVIEW 0x3741 #define IDD_TREEVIEW 0x3741
#define IDI_SHELL_DOCUMENT 1
#define IDI_SHELL_FOLDER 4
#define IDI_SHELL_FOLDER_OPEN 5
#define IDI_SHELL_FLOPPY 6
#define IDI_SHELL_DRIVE 9
#define IDI_SHELL_NETDRIVE 10
#define IDI_SHELL_NETDRIVE2 11
#define IDI_SHELL_CDROM 12
#define IDI_SHELL_RAMDISK 13
#define IDI_SHELL_MYCOMPUTER 16
#define IDI_SHELL_PRINTER 17
#define IDI_SHELL_DESKTOP 35
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment