Alexandre Julliard : shell32: Fix the shell folder file attributes.
Module: wine Branch: master Commit: 0ecd807ea62d1854a2abc97d1718c616a3ffa3fe URL: https://source.winehq.org/git/wine.git/?a=commit;h=0ecd807ea62d1854a2abc97d1... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Sep 14 12:38:52 2021 +0200 shell32: Fix the shell folder file attributes. Signed-off-by: Alexandre Julliard <julliard(a)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;
participants (1)
-
Alexandre Julliard