winemenubuilder: Also extract .lnk icons from file types's open handler.

oldstable
Damjan Jovanovic 2010-06-08 22:05:04 +02:00 committed by Alexandre Julliard
parent a2791a0919
commit 9954735e43
1 changed files with 20 additions and 10 deletions

View File

@ -819,10 +819,11 @@ static int ExtractFromICO(LPCWSTR szFileName, char *szXPMFileName)
static int ExtractFromFileType(LPCWSTR szFileName, char *szXPMFileName)
{
int ret = 1;
int ret = 0;
WCHAR *extension;
WCHAR *icon = NULL;
WCHAR *comma;
WCHAR *executable = NULL;
int index = 0;
char *output_path = NULL;
@ -831,21 +832,30 @@ static int ExtractFromFileType(LPCWSTR szFileName, char *szXPMFileName)
goto end;
icon = assoc_query(ASSOCSTR_DEFAULTICON, extension, NULL);
if (icon == NULL)
goto end;
comma = strrchrW(icon, ',');
if (comma)
if (icon)
{
*comma = 0;
index = atoiW(comma + 1);
comma = strrchrW(icon, ',');
if (comma)
{
*comma = 0;
index = atoiW(comma + 1);
}
output_path = extract_icon(icon, index, NULL, FALSE);
WINE_TRACE("defaulticon %s -> icon %s\n", wine_dbgstr_w(icon), wine_dbgstr_a(output_path));
}
else
{
executable = assoc_query(ASSOCSTR_EXECUTABLE, extension, NULL);
if (executable)
output_path = extract_icon(executable, 0, NULL, FALSE);
WINE_TRACE("executable %s -> icon %s\n", wine_dbgstr_w(executable), wine_dbgstr_a(output_path));
}
output_path = extract_icon(icon, index, NULL, FALSE);
if (output_path)
ret = rename(output_path, szXPMFileName);
ret = (rename(output_path, szXPMFileName) == 0);
end:
HeapFree(GetProcessHeap(), 0, icon);
HeapFree(GetProcessHeap(), 0, executable);
HeapFree(GetProcessHeap(), 0, output_path);
return ret;
}