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

Alexandre Julliard julliard at winehq.org
Wed Jun 9 13:38:12 CDT 2010


Module: wine
Branch: master
Commit: 9954735e430ea09f0dd6cd640bdafff8b410544a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9954735e430ea09f0dd6cd640bdafff8b410544a

Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date:   Tue Jun  8 22:05:04 2010 +0200

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

---

 programs/winemenubuilder/winemenubuilder.c |   30 ++++++++++++++++++---------
 1 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c
index 276c4e4..3abfc39 100644
--- a/programs/winemenubuilder/winemenubuilder.c
+++ b/programs/winemenubuilder/winemenubuilder.c
@@ -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 = 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
     {
-        *comma = 0;
-        index = atoiW(comma + 1);
+        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;
 }




More information about the wine-cvs mailing list