Changeset 3646 for trunk/src/shell32/shlfolder.cpp
- Timestamp:
- Jun 1, 2000, 4:01:10 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shell32/shlfolder.cpp
r3306 r3646 1 /* $Id: shlfolder.cpp,v 1.1 3 2000-04-02 15:12:48 cbratschiExp $ */1 /* $Id: shlfolder.cpp,v 1.14 2000-06-01 14:01:10 sandervl Exp $ */ 2 2 /* 3 3 * Shell Folder stuff … … 31 31 #include "shell32_main.h" 32 32 #include "shresdef.h" 33 #include "shlwapi.h" 33 34 34 35 #include <heapstring.h> … … 209 210 210 211 return hr; 212 } 213 214 /*********************************************************************** 215 * SHELL32_GetItemAttributes 216 * 217 * NOTES 218 * observerd values: 219 * folder: 0xE0000177 FILESYSTEM | HASSUBFOLDER | FOLDER 220 * file: 0x40000177 FILESYSTEM 221 * drive: 0xf0000144 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR 222 * mycomputer: 0xb0000154 HASSUBFOLDER | FOLDER | FILESYSANCESTOR 223 * (seems to be default for shell extensions if no registry entry exists) 224 * 225 * This functions does not set flags!! It only resets flags when nessesary. 226 */ 227 static HRESULT SHELL32_GetItemAttributes( 228 IShellFolder * psf, 229 LPITEMIDLIST pidl, 230 LPDWORD pdwAttributes) 231 { 232 GUID const * clsid; 233 DWORD dwAttributes; 234 235 TRACE("0x%08lx\n", *pdwAttributes); 236 237 if (*pdwAttributes & (0xcff3fe88)) 238 WARN("attribute 0x%08lx not implemented\n", *pdwAttributes); 239 *pdwAttributes &= ~SFGAO_LINK; /* FIXME: for native filedialogs */ 240 241 if (_ILIsDrive(pidl)) 242 { 243 *pdwAttributes &= 0xf0000144; 244 } 245 else if ((clsid=_ILGetGUIDPointer(pidl))) 246 { 247 if (HCR_GetFolderAttributes(clsid, &dwAttributes)) 248 { 249 *pdwAttributes &= dwAttributes; 250 } 251 else 252 { 253 *pdwAttributes &= 0xb0000154; 254 } 255 } 256 else if (_ILGetDataPointer(pidl)) 257 { 258 dwAttributes = _ILGetFileAttributes(pidl, NULL, 0); 259 *pdwAttributes &= ~SFGAO_FILESYSANCESTOR; 260 261 if(( SFGAO_FOLDER & *pdwAttributes) && !(dwAttributes & FILE_ATTRIBUTE_DIRECTORY)) 262 *pdwAttributes &= ~(SFGAO_FOLDER|SFGAO_HASSUBFOLDER); 263 264 if(( SFGAO_HIDDEN & *pdwAttributes) && !(dwAttributes & FILE_ATTRIBUTE_HIDDEN)) 265 *pdwAttributes &= ~SFGAO_HIDDEN; 266 267 if(( SFGAO_READONLY & *pdwAttributes) && !(dwAttributes & FILE_ATTRIBUTE_READONLY)) 268 *pdwAttributes &= ~SFGAO_READONLY; 269 } 270 else 271 { 272 *pdwAttributes &= 0xb0000154; 273 } 274 TRACE("-- 0x%08lx\n", *pdwAttributes); 275 return S_OK; 211 276 } 212 277 … … 1856 1921 if (pchEaten) *pchEaten = 0; /* strange but like the original */ 1857 1922 1858 if (PathIsRootW(lpszDisplayName)) 1859 { 1860 szNext = GetNextElementW(lpszDisplayName, szElement, MAX_PATH); 1861 WideCharToLocal(szTempA, szElement, lstrlenW(szElement) + 1); 1862 pidlTemp = _ILCreateDrive(szTempA); 1863 1864 if (szNext && *szNext) 1865 { 1866 hr = SHELL32_ParseNextElement(hwndOwner,iface, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes); 1867 } 1868 else 1869 { 1870 hr = S_OK; 1871 } 1872 *ppidl = pidlTemp; 1873 } 1923 /* do we have an absolute path name ? */ 1924 if (PathGetDriveNumberW(lpszDisplayName) >= 0 && 1925 lpszDisplayName[2] == (WCHAR)'\\') 1926 { 1927 szNext = GetNextElementW(lpszDisplayName, szElement, MAX_PATH); 1928 lstrcpynWtoA(szTempA, szElement, lstrlenW(szElement) + 1); 1929 pidlTemp = _ILCreateDrive(szTempA); 1930 1931 if (szNext && *szNext) 1932 { 1933 hr = SHELL32_ParseNextElement(hwndOwner, iface, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes); 1934 } 1935 else 1936 { 1937 if (pdwAttributes && *pdwAttributes) 1938 { 1939 SHELL32_GetItemAttributes(_IShellFolder_(This), pidlTemp, pdwAttributes); 1940 } 1941 hr = S_OK; 1942 } 1943 *ppidl = pidlTemp; 1944 } 1874 1945 1875 1946 TRACE("(%p)->(-- ret=0x%08lx)\n", This, hr);
Note:
See TracChangeset
for help on using the changeset viewer.