> First, I would move the psfParent and rpidl variable declarations into the
> then-branch of the if statement, since this is the only place they are
> used. But this is of course personal preference.
Good, done so. I always thought this was a C++ invention.

> Second, please use the -pu flags when generating the diff. This makes the
> diffs more robust and more easily readable for humans.
One more question: I create my diffs with cvs diff -pu, but if I want to apply 
them with patch, I have to specify the filename:

patch -p 1 -R < /home/stefan/Desktop/shell32.diff    (Just to test if the 
patch is OK)
can't find file to patch at input line 8
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: dlls/shell32/shfldr_desktop.c
|===================================================================
|RCS file: /home/wine/wine/dlls/shell32/shfldr_desktop.c,v
|retrieving revision 1.39
|diff -p -u -r1.39 shfldr_desktop.c
|--- dlls/shell32/shfldr_desktop.c      23 May 2005 16:31:42 -0000      1.39
|+++ dlls/shell32/shfldr_desktop.c      26 May 2005 10:28:22 -0000
--------------------------
File to patch:

I created the diffs from the wine root, and I apply the patches in the sources 
root directory. If I specify the filedlls/shell32/shfldr_desktop.c, the patch 
applies fine.

The new patch is attached for reference.

Any hints,
Stefan
Index: dlls/shell32/shfldr_desktop.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shfldr_desktop.c,v
retrieving revision 1.39
diff -p -u -r1.39 shfldr_desktop.c
--- dlls/shell32/shfldr_desktop.c	23 May 2005 16:31:42 -0000	1.39
+++ dlls/shell32/shfldr_desktop.c	26 May 2005 10:38:58 -0000
@@ -69,8 +69,6 @@ typedef struct {
     LPWSTR sPathTarget;     /* complete path to target used for enumeration and ChangeNotify */
     LPITEMIDLIST pidlRoot;  /* absolute pidl */
 
-    int dwAttributes;        /* attributes returned by GetAttributesOf FIXME: use it */
-
     UINT cfShellIDList;        /* clipboardformat for IDropTarget */
     BOOL fAcceptFmt;        /* flag for pending Drop */
 } IGenericSFImpl;
@@ -440,13 +438,21 @@ static HRESULT WINAPI ISF_Desktop_fnGetA
 
     if (*rgfInOut == 0)
         *rgfInOut = ~0;
-
-    while (cidl > 0 && *apidl)
-    {
-        pdump (*apidl);
-        SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut);
-        apidl++;
-        cidl--;
+    
+    if(cidl == 0) {
+        IShellFolder *psfParent = NULL;
+        LPCITEMIDLIST rpidl = NULL;
+
+        hr = SHBindToParent(This->pidlRoot, &IID_IShellFolder, (LPVOID*)&psfParent, (LPCITEMIDLIST*)&rpidl);
+        if(SUCCEEDED(hr))
+            SHELL32_GetItemAttributes (psfParent, rpidl, rgfInOut);
+    } else {
+        while (cidl > 0 && *apidl) {
+            pdump (*apidl);
+            SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut);
+            apidl++;
+            cidl--;
+        }
     }
     /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
     *rgfInOut &= ~SFGAO_VALIDATE;
Index: dlls/shell32/shfldr_fs.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shfldr_fs.c,v
retrieving revision 1.40
diff -p -u -r1.40 shfldr_fs.c
--- dlls/shell32/shfldr_fs.c	23 May 2005 16:31:42 -0000	1.40
+++ dlls/shell32/shfldr_fs.c	26 May 2005 10:39:02 -0000
@@ -76,8 +76,6 @@ typedef struct {
 
     LPITEMIDLIST pidlRoot; /* absolute pidl */
 
-    int dwAttributes;      /* attributes returned by GetAttributesOf FIXME: use it */
-
     UINT cfShellIDList;    /* clipboardformat for IDropTarget */
     BOOL fAcceptFmt;       /* flag for pending Drop */
 } IGenericSFImpl;
@@ -587,11 +585,21 @@ IShellFolder_fnGetAttributesOf (IShellFo
     if (*rgfInOut == 0)
         *rgfInOut = ~0;
 
-    while (cidl > 0 && *apidl) {
-        pdump (*apidl);
-        SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut);
-        apidl++;
-        cidl--;
+    if(cidl == 0){
+        IShellFolder *psfParent = NULL;
+        LPCITEMIDLIST rpidl = NULL;
+
+        hr = SHBindToParent(This->pidlRoot, &IID_IShellFolder, (LPVOID*)&psfParent, (LPCITEMIDLIST*)&rpidl);
+        if(SUCCEEDED(hr))
+            SHELL32_GetItemAttributes (psfParent, rpidl, rgfInOut);
+    }
+    else {
+        while (cidl > 0 && *apidl) {
+            pdump (*apidl);
+            SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut);
+            apidl++;
+            cidl--;
+        }
     }
     /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
     *rgfInOut &= ~SFGAO_VALIDATE;
Index: dlls/shell32/shfldr_mycomp.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shfldr_mycomp.c,v
retrieving revision 1.37
diff -p -u -r1.37 shfldr_mycomp.c
--- dlls/shell32/shfldr_mycomp.c	23 May 2005 16:31:42 -0000	1.37
+++ dlls/shell32/shfldr_mycomp.c	26 May 2005 10:39:04 -0000
@@ -61,7 +61,6 @@ typedef struct {
 
     /* both paths are parsible from the desktop */
     LPITEMIDLIST pidlRoot;    /* absolute pidl */
-    int dwAttributes;        /* attributes returned by GetAttributesOf FIXME: use it */
 } IGenericSFImpl;
 
 static struct IShellFolder2Vtbl vt_ShellFolder2;
@@ -438,13 +437,21 @@ static HRESULT WINAPI ISF_MyComputer_fnG
 
     if (*rgfInOut == 0)
         *rgfInOut = ~0;
-
-    while (cidl > 0 && *apidl)
-    {
-        pdump (*apidl);
-        SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut);
-        apidl++;
-        cidl--;
+    
+    if(cidl == 0){
+        IShellFolder *psfParent = NULL;
+        LPCITEMIDLIST rpidl = NULL;
+
+        hr = SHBindToParent(This->pidlRoot, &IID_IShellFolder, (LPVOID*)&psfParent, (LPCITEMIDLIST*)&rpidl);
+        if(SUCCEEDED(hr))
+            SHELL32_GetItemAttributes (psfParent, rpidl, rgfInOut);
+    } else {
+        while (cidl > 0 && *apidl) {
+            pdump (*apidl);
+            SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut);
+            apidl++;
+            cidl--;
+        }
     }
     /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
     *rgfInOut &= ~SFGAO_VALIDATE;

Reply via email to