Module: wine Branch: master Commit: 0ecd807ea62d1854a2abc97d1718c616a3ffa3fe URL: https://source.winehq.org/git/wine.git/?a=commit;h=0ecd807ea62d1854a2abc97d1...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Sep 14 12:38:52 2021 +0200
shell32: Fix the shell folder file attributes.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/shell32/shlfolder.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/dlls/shell32/shlfolder.c b/dlls/shell32/shlfolder.c index e663d9486d9..f288b7f7ab1 100644 --- a/dlls/shell32/shlfolder.c +++ b/dlls/shell32/shlfolder.c @@ -427,9 +427,9 @@ HRESULT SHELL32_GetItemAttributes (IShellFolder2 *psf, LPCITEMIDLIST pidl, LPDWO } else if (has_guid && HCR_GetFolderAttributes(pidl, &dwAttributes)) { *pdwAttributes = dwAttributes; } else if (_ILGetDataPointer (pidl)) { - dwAttributes = _ILGetFileAttributes (pidl, NULL, 0); + DWORD file_attr = _ILGetFileAttributes (pidl, NULL, 0);
- if (!dwAttributes && has_guid) { + if (!file_attr && has_guid) { WCHAR path[MAX_PATH]; STRRET strret;
@@ -441,25 +441,28 @@ HRESULT SHELL32_GetItemAttributes (IShellFolder2 *psf, LPCITEMIDLIST pidl, LPDWO
/* call GetFileAttributes() only for file system paths, not for parsing names like "::{...}" */ if (SUCCEEDED(hr) && path[0]!=':') - dwAttributes = GetFileAttributesW(path); + file_attr = GetFileAttributesW(path); } }
/* Set common attributes */ - *pdwAttributes |= SFGAO_FILESYSTEM | SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANDELETE | + *pdwAttributes |= SFGAO_FILESYSTEM | SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANCOPY;
- if (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) - *pdwAttributes |= (SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_FILESYSANCESTOR); + if (file_attr & FILE_ATTRIBUTE_DIRECTORY) + *pdwAttributes |= (SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_FILESYSANCESTOR | SFGAO_STORAGEANCESTOR | SFGAO_STORAGE); else - *pdwAttributes &= ~(SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_FILESYSANCESTOR); + { + *pdwAttributes &= ~(SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_FILESYSANCESTOR | SFGAO_STORAGEANCESTOR | SFGAO_STORAGE); + *pdwAttributes |= SFGAO_STREAM; + }
- if (dwAttributes & FILE_ATTRIBUTE_HIDDEN) + if (file_attr & FILE_ATTRIBUTE_HIDDEN) *pdwAttributes |= SFGAO_HIDDEN; else *pdwAttributes &= ~SFGAO_HIDDEN;
- if (dwAttributes & FILE_ATTRIBUTE_READONLY) + if (file_attr & FILE_ATTRIBUTE_READONLY) *pdwAttributes |= SFGAO_READONLY; else *pdwAttributes &= ~SFGAO_READONLY;