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).
This commit is contained in:
Huw Davies 2005-04-11 13:04:41 +00:00 committed by Alexandre Julliard
parent 4f50a2c0dc
commit 861282bf28
8 changed files with 128 additions and 31 deletions

View File

@ -10,6 +10,7 @@ folder_open.ico
mycomputer.ico
netdrive.ico
netdrive2.ico
printer.ico
ramdisk.ico
shell.spec.c
shell32.dll.dbg.c

View File

@ -62,6 +62,7 @@ RC_BINARIES = \
mycomputer.ico \
netdrive.ico \
netdrive2.ico \
printer.ico \
ramdisk.ico
C_SRCS16 = shell.c

View File

@ -223,7 +223,12 @@ BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, LPDWORD dwNr
ret = HCR_RegGetDefaultIconW(hkey, szDest, len, dwNr);
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;
}

View File

@ -40,6 +40,7 @@
#include "pidl.h"
#include "shell32_main.h"
#include "shfldr.h"
#include "shresdef.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
@ -196,9 +197,9 @@ static HRESULT getIconLocationForFolder(IExtractIconW *iface, UINT uFlags,
if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &dwNr))
{
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;
}
@ -233,7 +234,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
if (_ILIsDesktop(pSimplePidl))
{
lstrcpynW(szIconFile, swShell32Name, cchMax);
*piIndex = 34;
*piIndex = -IDI_SHELL_DESKTOP;
}
/* my computer and other shell extensions */
@ -257,7 +258,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
else
{
lstrcpynW(szIconFile, swShell32Name, cchMax);
*piIndex = 15;
*piIndex = -IDI_SHELL_MYCOMPUTER;
}
}
@ -271,17 +272,17 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
{
switch(GetDriveTypeA(sTemp))
{
case DRIVE_REMOVABLE: icon_idx = 5; break;
case DRIVE_CDROM: icon_idx = 11; break;
case DRIVE_REMOTE: icon_idx = 9; break;
case DRIVE_RAMDISK: icon_idx = 12; break;
case DRIVE_REMOVABLE: icon_idx = IDI_SHELL_FLOPPY; break;
case DRIVE_CDROM: icon_idx = IDI_SHELL_CDROM; break;
case DRIVE_REMOTE: icon_idx = IDI_SHELL_NETDRIVE; break;
case DRIVE_RAMDISK: icon_idx = IDI_SHELL_RAMDISK; break;
}
}
if (icon_idx != -1)
{
lstrcpynW(szIconFile, swShell32Name, cchMax);
*piIndex = icon_idx;
*piIndex = -icon_idx;
}
else
{
@ -292,14 +293,14 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
else
{
lstrcpynW(szIconFile, swShell32Name, cchMax);
*piIndex = 8;
*piIndex = -IDI_SHELL_DRIVE;
}
}
}
else if (_ILIsFolder (pSimplePidl))
{
getIconLocationForFolder(iface, uFlags, szIconFile, cchMax, piIndex,
pwFlags);
getIconLocationForFolder(iface, uFlags, szIconFile, cchMax, piIndex,
pwFlags);
}
else
{
@ -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)
{
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)
*phiconLarge = ImageList_GetIcon(ShellBigIconList, nIconIndex, ILD_TRANSPARENT);
*phiconLarge = ImageList_GetIcon(ShellBigIconList, index, ILD_TRANSPARENT);
if (phiconSmall)
*phiconSmall = ImageList_GetIcon(ShellSmallIconList, nIconIndex, ILD_TRANSPARENT);
*phiconSmall = ImageList_GetIcon(ShellSmallIconList, index, ILD_TRANSPARENT);
return S_OK;
}

View File

@ -243,7 +243,8 @@ BOOL SIC_Initialize(void)
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);
}
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);

View File

@ -44,6 +44,7 @@
#include "pidl.h"
#include "shell32_main.h"
#include "version.h"
#include "shresdef.h"
#include "wine/debug.h"
#include "wine/unicode.h"
@ -501,7 +502,7 @@ DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
lstrcpynW(sTemp, szFullPath, MAX_PATH);
if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
psfi->iIcon = 2;
psfi->iIcon = SIC_GetIconIndex(swShell32Name, -IDI_SHELL_FOLDER);
else
{
static const WCHAR p1W[] = {'%','1',0};

View File

@ -36,7 +36,7 @@ BEGIN
END
/* 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 46 00 00 00 10 10 00 00 01 00 08 00 68 05'
@ -340,7 +340,7 @@ END
/* 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 46 00 00 00 10 10 00 00 01 00 08 00 68 05'
@ -640,7 +640,7 @@ END
} */
/* 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 16 00 00 00 28 00 00 00 10 00 00 00 20 00'
@ -733,7 +733,7 @@ END
} */
/* 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 96 00 00 00 10 10 00 00 01 00 08 00 68 05'
@ -2315,7 +2315,7 @@ END
/* 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 86 00 00 00 10 10 00 00 01 00 08 00 68 05'
@ -3793,7 +3793,7 @@ END
} */
/* 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 96 00 00 00 10 10 00 00 01 00 08 00 68 05'
@ -5374,7 +5374,7 @@ END
} */
/* 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 96 00 00 00 10 10 00 00 01 00 08 00 68 05'
@ -6955,7 +6955,7 @@ END
} */
/* 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 96 00 00 00 10 10 00 00 01 00 08 00 68 05'
@ -8536,7 +8536,7 @@ END
} */
/* 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 76 00 00 00 10 10 00 00 01 00 08 00 68 05'
@ -9908,7 +9908,7 @@ END
/* 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 26 00 00 00 20 20 10 00 01 00 04 00 E8 02'
@ -9980,11 +9980,81 @@ END
'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 */
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 26 00 00 00 20 20 10 00 00 00 00 00 E8 02'

View File

@ -89,4 +89,17 @@
#define IDD_TITLE 0x3742
#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