> 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;