shell32 (part4): Let SHChangeNotify use SHSimpleIDListFromPath instead

Rolf Kalbermatter rolf.kalbermatter at citengineering.com
Thu Sep 11 14:22:23 CDT 2003


Changelog
  - dlls/shell32/pidl.c
    SHChangeNotify should use SHSimpleIDListFromPath as this function should not
    fail on paths that do not exist anymore, think about delete change notifications!
    (SHSimpleIDListFromPath does actually still the same as SHILCreateFromPath ATM,
    after the previous shell32 patches have been applied, but that is going to change)

License: X11/LGPL

Rolf Kalbermatter

Index: dlls/shell32/changenotify.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/changenotify.c,v
retrieving revision 1.26
diff -u -r1.26 changenotify.c
--- dlls/shell32/changenotify.c	5 Sep 2003 23:08:31 -0000	1.26
+++ dlls/shell32/changenotify.c	11 Sep 2003 18:03:17 -0000
@@ -276,7 +276,6 @@
 {
     LPITEMIDLIST Pidls[2];
     LPNOTIFICATIONLIST ptr;
-    DWORD dummy;
     UINT typeFlag = uFlags & SHCNF_TYPE;
 
     Pidls[0] = NULL;
@@ -313,12 +312,12 @@
     switch (typeFlag)
     {
     case SHCNF_PATHA:
-        if (dwItem1) SHILCreateFromPathA((LPCSTR)dwItem1, &Pidls[0], &dummy);
-        if (dwItem2) SHILCreateFromPathA((LPCSTR)dwItem2, &Pidls[1], &dummy);
+        if (dwItem1) Pidls[0] = SHSimpleIDListFromPathA((LPCSTR)dwItem1);
+        if (dwItem2) Pidls[1] = SHSimpleIDListFromPathA((LPCSTR)dwItem2);
         break;
     case SHCNF_PATHW:
-        if (dwItem1) SHILCreateFromPathW((LPCWSTR)dwItem1, &Pidls[0], &dummy);
-        if (dwItem2) SHILCreateFromPathW((LPCWSTR)dwItem2, &Pidls[1], &dummy);
+        if (dwItem1) Pidls[0] = SHSimpleIDListFromPathW((LPCWSTR)dwItem1);
+        if (dwItem2) Pidls[1] = SHSimpleIDListFromPathW((LPCWSTR)dwItem2);
         break;
     case SHCNF_IDLIST:
         Pidls[0] = (LPITEMIDLIST)dwItem1;
@@ -392,8 +391,8 @@
     TRACE("notify Done\n");
     LeaveCriticalSection(&SHELL32_ChangenotifyCS);
     
-    /* if we allocated it, free it */
-    if ((typeFlag == SHCNF_PATHA) || (typeFlag == SHCNF_PATHW))
+    /* if we allocated it, free it. The ANSI flag is also set in its Unicode sibling. */
+    if ((typeFlag & SHCNF_PATHA) || (typeFlag & SHCNF_PRINTERA))
     {
         if (Pidls[0]) SHFree(Pidls[0]);
         if (Pidls[1]) SHFree(Pidls[1]);





More information about the wine-patches mailing list