Changelog: - move from IShellFolder_fnGetDisplayNameOf() into new function SHELL_FS_ProcessDisplayFilename() to call it also in ISF_Desktop_fnGetDisplayNameOf() and do the same file system processing for the desktop level - handle hidden file extensions in SHELL_FS_ProcessDisplayFilename(), that are configured by "NeverShowExt" in the registry Index: shfldr.h =================================================================== RCS file: /home/wine/wine/dlls/shell32/shfldr.h,v retrieving revision 1.4 diff -u -p -d -r1.4 shfldr.h --- shfldr.h 30 Dec 2003 19:24:22 -0000 1.4 +++ shfldr.h 17 Jan 2004 13:32:10 -0000 @@ -54,3 +54,5 @@ static inline void SHELL32_GUIDToStringA guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); } + +void SHELL_FS_ProcessDisplayFilename(LPSTR szPath, DWORD dwFlags); Index: shfldr_desktop.c =================================================================== RCS file: /home/wine/wine/dlls/shell32/shfldr_desktop.c,v retrieving revision 1.14 diff -u -p -d -r1.14 shfldr_desktop.c --- shfldr_desktop.c 30 Dec 2003 19:24:22 -0000 1.14 +++ shfldr_desktop.c 17 Jan 2004 13:32:10 -0000 @@ -510,6 +510,9 @@ static HRESULT WINAPI ISF_Desktop_fnGetD } else { /* file system folder */ _ILSimpleGetText (pidl, szPath, MAX_PATH); + + if (!_ILIsFolder(pidl)) + SHELL_FS_ProcessDisplayFilename(szPath, dwFlags); } } else { /* a complex pidl, let the subfolder do the work */ Index: shfldr_fs.c =================================================================== RCS file: /home/wine/wine/dlls/shell32/shfldr_fs.c,v retrieving revision 1.16 diff -u -p -d -r1.16 shfldr_fs.c --- shfldr_fs.c 17 Sep 2003 04:17:33 -0000 1.16 +++ shfldr_fs.c 17 Jan 2004 13:32:10 -0000 @@ -587,6 +587,48 @@ IShellFolder_fnGetUIObjectOf (IShellFold return hr; } +void SHELL_FS_ProcessDisplayFilename(LPSTR szPath, DWORD dwFlags) +{ + /*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */ + if (!(dwFlags & SHGDN_FORPARSING) && + ((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) { + HKEY hKey; + DWORD dwData; + DWORD dwDataSize = sizeof (DWORD); + BOOL doHide = FALSE; /* The default value is FALSE (win98 at least) */ + + if (!RegCreateKeyExA (HKEY_CURRENT_USER, + "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + 0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0)) { + if (!RegQueryValueExA (hKey, "HideFileExt", 0, 0, (LPBYTE) & dwData, &dwDataSize)) + doHide = dwData; + + RegCloseKey (hKey); + } + + if (!doHide) { + LPSTR ext = PathFindExtensionA(szPath); + + if (ext) { + HKEY hkey; + char classname[MAX_PATH]; + LONG classlen = MAX_PATH; + + if (!RegQueryValueA(HKEY_CLASSES_ROOT, ext, classname, &classlen)) + if (!RegOpenKeyA(HKEY_CLASSES_ROOT, classname, &hkey)) { + if (!RegQueryValueExA(hkey, "NeverShowExt", 0, NULL, NULL, NULL)) + doHide = TRUE; + + RegCloseKey(hkey); + } + } + } + + if (doHide && szPath[0] != '.') + PathRemoveExtensionA (szPath); + } +} + /************************************************************************** * IShellFolder_fnGetDisplayNameOf * Retrieves the display name for the specified file object or subfolder @@ -632,26 +674,8 @@ IShellFolder_fnGetDisplayNameOf (IShellF } _ILSimpleGetText (pidl, szPath + len, MAX_PATH - len); /* append my own path */ - /* MSDN also mentions SHGDN_FOREDITING, which isn't defined in wine */ - if (!_ILIsFolder (pidl) && !(dwFlags & SHGDN_FORPARSING) && - ((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) { - HKEY hKey; - DWORD dwData; - DWORD dwDataSize = sizeof (DWORD); - BOOL doHide = 0; /* The default value is FALSE (win98 at least) */ - - /* XXX should it do this only for known file types? -- that would make it even slower! */ - /* XXX That's what the prompt says!! */ - if (!RegCreateKeyExA (HKEY_CURRENT_USER, - "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", - 0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0)) { - if (!RegQueryValueExA (hKey, "HideFileExt", 0, 0, (LPBYTE) & dwData, &dwDataSize)) - doHide = dwData; - RegCloseKey (hKey); - } - if (doHide && szPath[0] != '.') - PathRemoveExtensionA (szPath); - } + if (!_ILIsFolder(pidl)) + SHELL_FS_ProcessDisplayFilename(szPath, dwFlags); } if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) { /* go deeper if needed */