--- trunk/reactos/lib/shell32/brsfolder.c 2005-03-16 16:25:54 UTC (rev 14137)
+++ trunk/reactos/lib/shell32/brsfolder.c 2005-03-16 17:30:11 UTC (rev 14138)
@@ -55,68 +55,95 @@
return SHCONTF_FOLDERS | (ulFlags & BIF_BROWSEINCLUDEFILES ? SHCONTF_NONFOLDERS : 0);
}
+/******************************************************************************
+ * InitializeTreeView [Internal]
+ *
+ * Called from WM_INITDIALOG handler.
+ *
+ * PARAMS
+ * hwndParent [I] The BrowseForFolder dialog
+ * root [I] ITEMIDLIST of the root shell folder
+ */
static void InitializeTreeView(HWND hwndParent, LPCITEMIDLIST root)
{
- HIMAGELIST hImageList;
- IShellFolder * lpsf;
- HRESULT hr;
- IEnumIDList * pEnumIL = NULL;
- LPITEMIDLIST parentofroot;
- parentofroot = ILClone(root);
- ILRemoveLastID(parentofroot);
+ LPITEMIDLIST pidlParent, pidlChild;
+ HIMAGELIST hImageList;
+ HRESULT hr;
+ IShellFolder *lpsfParent, *lpsfRoot;
+ IEnumIDList * pEnumChildren = NULL;
- hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW);
- Shell_GetImageList(NULL, &hImageList);
+ TRACE("dlg=%p tree=%p\n", hwndParent, hwndTreeView );
+
+ hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW);
+ if (!hwndTreeView) {
+ FIXME("Could not get handle to treeview control! Error: %08lx\n", GetLastError());
+ return;
+ }
+ Shell_GetImageList(NULL, &hImageList);
- TRACE("dlg=%p tree=%p\n", hwndParent, hwndTreeView );
+ if (hImageList)
+ TreeView_SetImageList(hwndTreeView, hImageList, 0);
- if (hImageList && hwndTreeView)
- TreeView_SetImageList(hwndTreeView, hImageList, 0);
+ /* We want to call InsertTreeViewItem down the code, in order to insert
+ * the root item of the treeview. Due to InsertTreeViewItem's signature,
+ * we need the following to do this:
+ *
+ * + An ITEMIDLIST corresponding to _the parent_ of root.
+ * + An ITEMIDLIST, which is a relative path from root's parent to root
+ * (containing a single SHITEMID).
+ * + An IShellFolder interface pointer of root's parent folder.
+ *
+ * If root is 'Desktop', then root's parent is also 'Desktop'.
+ */
- if (_ILIsDesktop (root)) {
- hr = SHGetDesktopFolder(&lpsf);
- } else {
- IShellFolder * lpsfdesktop;
+ pidlParent = ILClone(root);
+ ILRemoveLastID(pidlParent);
+ pidlChild = ILClone(ILFindLastID(root));
+
+ if (_ILIsDesktop(pidlParent)) {
+ hr = SHGetDesktopFolder(&lpsfParent);
+ } else {
+ IShellFolder *lpsfDesktop;
+ hr = SHGetDesktopFolder(&lpsfDesktop);
+ if (!SUCCEEDED(hr)) {
+ WARN("SHGetDesktopFolder failed! hr = %08lx\n", hr);
+ return;
+ }
+ hr = IShellFolder_BindToObject(lpsfDesktop, pidlParent, 0, &IID_IShellFolder, (LPVOID*)&lpsfParent);
+ IShellFolder_Release(lpsfDesktop);
+ }
+
+ if (!SUCCEEDED(hr)) {
+ WARN("Could not bind to parent shell folder! hr = %08lx\n", hr);
+ return;
+ }
- hr = SHGetDesktopFolder(&lpsfdesktop);
- if (SUCCEEDED(hr)) {
- hr = IShellFolder_BindToObject(lpsfdesktop, parentofroot, 0,(REFIID)&IID_IShellFolder,(LPVOID *)&lpsf);
- IShellFolder_Release(lpsfdesktop);
- }
- }
- if (SUCCEEDED(hr))
- {
- IShellFolder * pSFRoot;
- if (_ILIsPidlSimple(root))
- {
- pSFRoot = lpsf;
- IShellFolder_AddRef(pSFRoot);
- }
- else
- hr = IShellFolder_BindToObject(lpsf,ILFindLastID(root),0,&IID_IShellFolder,(LPVOID *)&pSFRoot);
- if (SUCCEEDED(hr))
- {
- hr = IShellFolder_EnumObjects(
- pSFRoot,
- hwndParent,
- BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags),
- &pEnumIL);
- IShellFolder_Release(pSFRoot);
- }
- }
+ if (pidlChild && pidlChild->mkid.cb) {
+ hr = IShellFolder_BindToObject(lpsfParent, pidlChild, 0, &IID_IShellFolder, (LPVOID*)&lpsfRoot);
+ } else {
+ lpsfRoot = lpsfParent;
+ hr = IShellFolder_AddRef(lpsfParent);
+ }
+
+ if (!SUCCEEDED(hr)) {
+ WARN("Could not bind to root shell folder! hr = %08lx\n", hr);
+ IShellFolder_Release(lpsfParent);
+ return;
+ }
- if (SUCCEEDED(hr) && hwndTreeView)
- {
- TreeView_DeleteAllItems(hwndTreeView);
- TreeView_Expand(hwndTreeView,
- InsertTreeViewItem(lpsf, _ILIsPidlSimple(root) ? root : ILFindLastID(root), parentofroot, pEnumIL, TVI_ROOT),
- TVE_EXPAND);
- }
+ hr = IShellFolder_EnumObjects(lpsfRoot, hwndParent, BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags), &pEnumChildren);
+ if (!SUCCEEDED(hr)) {
+ WARN("Could not get child iterator! hr = %08lx\n", hr);
+ IShellFolder_Release(lpsfParent);
+ IShellFolder_Release(lpsfRoot);
+ return;
+ }
- if (SUCCEEDED(hr))
- IShellFolder_Release(lpsf);
+ TreeView_DeleteAllItems(hwndTreeView);
+ TreeView_Expand(hwndTreeView, InsertTreeViewItem(lpsfParent, pidlChild, pidlParent, pEnumChildren, TVI_ROOT), TVE_EXPAND);
- TRACE("done\n");
+ IShellFolder_Release(lpsfRoot);
+ IShellFolder_Release(lpsfParent);
}
static int GetIcon(LPITEMIDLIST lpi, UINT uFlags)
@@ -149,12 +176,27 @@
typedef struct tagID
{
- LPSHELLFOLDER lpsfParent;
- LPITEMIDLIST lpi;
- LPITEMIDLIST lpifq;
- IEnumIDList* pEnumIL;
+ LPSHELLFOLDER lpsfParent; /* IShellFolder of the parent */
+ LPITEMIDLIST lpi; /* PIDL relativ to parent */
+ LPITEMIDLIST lpifq; /* Fully qualified PIDL */
+ IEnumIDList* pEnumIL; /* Children iterator */
} TV_ITEMDATA, *LPTV_ITEMDATA;
+/******************************************************************************
+ * GetName [Internal]
+ *
+ * Query a shell folder for the display name of one of it's children
+ *
+ * PARAMS
+ * lpsf [I] IShellFolder interface of the folder to be queried.
+ * lpi [I] ITEMIDLIST of the child, relative to parent
+ * dwFlags [I] as in IShellFolder::GetDisplayNameOf
+ * lpFriendlyName [O] The desired display name in unicode
+ *
+ * RETURNS
+ * Success: TRUE
+ * Failure: FALSE
+ */
static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR lpFriendlyName)
{
BOOL bSuccess=TRUE;
@@ -175,7 +217,22 @@
return bSuccess;
}
-static HTREEITEM InsertTreeViewItem(IShellFolder * lpsf, LPCITEMIDLIST pidl, LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent)
+/******************************************************************************
+ * InsertTreeViewItem [Internal]
+ *
+ * PARAMS
+ * lpsf [I] IShellFolder interface of the item's parent shell folder
+ * pidl [I] ITEMIDLIST of the child to insert, relativ to parent
+ * pidlParent [I] ITEMIDLIST of the parent shell folder
+ * pEnumIL [I] Iterator for the children of the item to be inserted
+ * hParent [I] The treeview-item that represents the parent shell folder
+ *
+ * RETURNS
+ * Success: Handle to the created and inserted treeview-item
+ * Failure: NULL
+ */
+static HTREEITEM InsertTreeViewItem(IShellFolder * lpsf, LPCITEMIDLIST pidl,
+ LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent)
{
TVITEMW tvi;
TVINSERTSTRUCTW tvins;
@@ -211,6 +268,18 @@
return (HTREEITEM)TreeView_InsertItemW(hwndTreeView, &tvins);
}
+/******************************************************************************
+ * FillTreeView [Internal]
+ *
+ * For each child (given by lpe) of the parent shell folder, which is given by
+ * lpsf and whose PIDL is pidl, insert a treeview-item right under hParent
+ *
+ * PARAMS
+ * lpsf [I] IShellFolder interface of the parent shell folder
+ * pidl [I] ITEMIDLIST of the parent shell folder
+ * hParent [I] The treeview item that represents the parent shell folder
+ * lpe [I] An iterator for the children of the parent shell folder
+ */
static void FillTreeView(IShellFolder * lpsf, LPITEMIDLIST pidl, HTREEITEM hParent, IEnumIDList* lpe)
{
HTREEITEM hPrev = 0;
@@ -219,7 +288,11 @@
HRESULT hr;
HWND hwnd=GetParent(hwndTreeView);
- TRACE("%p %p %x\n",lpsf, pidl, (INT)hParent);
+ TRACE("%p %p %x %p\n",lpsf, pidl, (INT)hParent, lpe);
+
+ /* No IEnumIDList -> No children */
+ if (!lpe) return;
+
SetCapture(GetParent(hwndTreeView));
SetCursor(LoadCursorA(0, (LPSTR)IDC_WAIT));
--- trunk/reactos/lib/shell32/pidl.c 2005-03-16 16:25:54 UTC (rev 14137)
+++ trunk/reactos/lib/shell32/pidl.c 2005-03-16 17:30:11 UTC (rev 14138)
@@ -1,7 +1,7 @@
/*
- * pidl Handling
+ * pidl Handling
*
- * Copyright 1998 Juergen Schmied
+ * Copyright 1998 Juergen Schmied
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -57,7 +57,7 @@
extern BOOL WINAPI Free(LPVOID);
/*************************************************************************
- * ILGetDisplayNameEx [SHELL32.186]
+ * ILGetDisplayNameEx [SHELL32.186]
*
* Retrieves the display name of an ItemIDList
*
@@ -75,106 +75,108 @@
*/
BOOL WINAPI ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
{
- BOOL ret = FALSE;
- WCHAR wPath[MAX_PATH];
+ BOOL ret = FALSE;
+ WCHAR wPath[MAX_PATH];
- TRACE("%p %p %p %ld\n", psf, pidl, path, type);
+ TRACE("%p %p %p %ld\n", psf, pidl, path, type);
- if (!pidl || !path)
- return FALSE;
+ if (!pidl || !path)
+ return FALSE;
- ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
- WideCharToMultiByte(CP_ACP, 0, wPath, -1, path, MAX_PATH, NULL, NULL);
- TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
+ ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
+ WideCharToMultiByte(CP_ACP, 0, wPath, -1, path, MAX_PATH, NULL, NULL);
+ TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
- return ret;
+ return ret;
}
BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
{
- LPSHELLFOLDER psfParent, lsf = psf;
- HRESULT ret = NO_ERROR;
- LPCITEMIDLIST pidllast;
- STRRET strret;
- DWORD flag;
+ LPSHELLFOLDER psfParent, lsf = psf;
+ HRESULT ret = NO_ERROR;
+ LPCITEMIDLIST pidllast;
+ STRRET strret;
+ DWORD flag;
- TRACE("%p %p %p %ld\n", psf, pidl, path, type);
+ TRACE("%p %p %p %ld\n", psf, pidl, path, type);
- if (!pidl || !path)
- return FALSE;
+ if (!pidl || !path)
+ return FALSE;
- if (!lsf)
- {
- ret = SHGetDesktopFolder(&lsf);
- if (FAILED(ret))
- return FALSE;
- }
+ if (!lsf)
+ {
+ ret = SHGetDesktopFolder(&lsf);
+ if (FAILED(ret))
+ return FALSE;
+ }
- if (type >= 0 && type <= 2)
- {
- switch (type)
- {
- case ILGDN_FORPARSING:
- flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
- break;
- case ILGDN_NORMAL:
- flag = SHGDN_NORMAL;
- break;
- case ILGDN_INFOLDER:
- flag = SHGDN_INFOLDER;
- break;
- default:
- FIXME("Unknown type parameter = %lx\n", type);
- flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
- break;
- }
- if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
- {
- ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
- if (SUCCEEDED(ret))
- {
- ret = StrRetToStrNW(path, MAX_PATH, &strret, pidl);
- }
- }
- else
- {
- ret = SHBindToParent(pidl, &IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
- if (SUCCEEDED(ret))
- {
- ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
- if (SUCCEEDED(ret))
- {
- ret = StrRetToStrNW(path, MAX_PATH, &strret, pidllast);
- }
- IShellFolder_Release(psfParent);
- }
- }
- }
+ if (type >= 0 && type <= 2)
+ {
+ switch (type)
+ {
+ case ILGDN_FORPARSING:
+ flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
+ break;
+ case ILGDN_NORMAL:
+ flag = SHGDN_NORMAL;
+ break;
+ case ILGDN_INFOLDER:
+ flag = SHGDN_INFOLDER;
+ break;
+ default:
+ FIXME("Unknown type parameter = %lx\n", type);
+ flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
+ break;
+ }
+ if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
+ {
+ ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
+ if (SUCCEEDED(ret))
+ {
+ ret = StrRetToStrNW(path, MAX_PATH, &strret, pidl);
+ }
+ }
+ else
+ {
+ ret = SHBindToParent(pidl, &IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
+ if (SUCCEEDED(ret))
+ {
+ ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
+ if (SUCCEEDED(ret))
+ {
+ ret = StrRetToStrNW(path, MAX_PATH, &strret, pidllast);
+ }
+ IShellFolder_Release(psfParent);
+ }
+ }
+ }
- TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
+ TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
- if (!psf)
- IShellFolder_Release(lsf);
- return SUCCEEDED(ret);
+ if (!psf)
+ IShellFolder_Release(lsf);
+ return SUCCEEDED(ret);
}
BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
{
- TRACE_(shell)("%p %p %p %ld\n", psf, pidl, path, type);
- if (SHELL_OsIsUnicode())
- return ILGetDisplayNameExW(psf, pidl, path, type);
- return ILGetDisplayNameExA(psf, pidl, path, type);
+ TRACE_(shell)("%p %p %p %ld\n", psf, pidl, path, type);
+
+ if (SHELL_OsIsUnicode())
+ return ILGetDisplayNameExW(psf, pidl, path, type);
+ return ILGetDisplayNameExA(psf, pidl, path, type);
}
/*************************************************************************
- * ILGetDisplayName [SHELL32.15]
+ * ILGetDisplayName [SHELL32.15]
*/
BOOL WINAPI ILGetDisplayName(LPCITEMIDLIST pidl, LPVOID path)
{
- TRACE_(shell)("%p %p\n", pidl, path);
- if (SHELL_OsIsUnicode())
- return ILGetDisplayNameExW(NULL, pidl, path, ILGDN_FORPARSING);
- return ILGetDisplayNameExA(NULL, pidl, path, ILGDN_FORPARSING);
+ TRACE_(shell)("%p %p\n", pidl, path);
+
+ if (SHELL_OsIsUnicode())
+ return ILGetDisplayNameExW(NULL, pidl, path, ILGDN_FORPARSING);
+ return ILGetDisplayNameExA(NULL, pidl, path, ILGDN_FORPARSING);
}
/*************************************************************************
@@ -185,20 +187,21 @@
*/
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
{
- LPCITEMIDLIST pidlLast = pidl;
+ LPCITEMIDLIST pidlLast = pidl;
- TRACE("(pidl=%p)\n",pidl);
+ TRACE("(pidl=%p)\n",pidl);
- if (!pidl)
- return NULL;
+ if (!pidl)
+ return NULL;
- while (pidl->mkid.cb)
- {
- pidlLast = pidl;
- pidl = ILGetNext(pidl);
- }
- return (LPITEMIDLIST)pidlLast;
+ while (pidl->mkid.cb)
+ {
+ pidlLast = pidl;
+ pidl = ILGetNext(pidl);
+ }
+ return (LPITEMIDLIST)pidlLast;
}
+
/*************************************************************************
* ILRemoveLastID [SHELL32.17]
*
@@ -207,12 +210,12 @@
*/
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
{
- TRACE_(shell)("pidl=%p\n",pidl);
+ TRACE_(shell)("pidl=%p\n",pidl);
- if (!pidl || !pidl->mkid.cb)
- return 0;
- ILFindLastID(pidl)->mkid.cb = 0;
- return 1;
+ if (!pidl || !pidl->mkid.cb)
+ return 0;
+ ILFindLastID(pidl)->mkid.cb = 0;
+ return 1;
}
/*************************************************************************
@@ -222,22 +225,24 @@
* duplicate an idlist
*/
LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
-{ DWORD len;
- LPITEMIDLIST newpidl;
+{
+ DWORD len;
+ LPITEMIDLIST newpidl;
- if (!pidl)
- return NULL;
+ if (!pidl)
+ return NULL;
- len = ILGetSize(pidl);
- newpidl = (LPITEMIDLIST)SHAlloc(len);
- if (newpidl)
- memcpy(newpidl,pidl,len);
+ len = ILGetSize(pidl);
+ newpidl = (LPITEMIDLIST)SHAlloc(len);
+ if (newpidl)
+ memcpy(newpidl,pidl,len);
- TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
- pdump(pidl);
+ TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
+ pdump(pidl);
- return newpidl;
+ return newpidl;
}
+
/*************************************************************************
* ILCloneFirst [SHELL32.19]
*
@@ -245,27 +250,28 @@
* duplicates the first idlist of a complex pidl
*/
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
-{ DWORD len;
- LPITEMIDLIST pidlNew = NULL;
+{
+ DWORD len;
+ LPITEMIDLIST pidlNew = NULL;
- TRACE("pidl=%p \n",pidl);
- pdump(pidl);
+ TRACE("pidl=%p \n",pidl);
+ pdump(pidl);
- if (pidl)
- {
- len = pidl->mkid.cb;
- pidlNew = (LPITEMIDLIST) SHAlloc (len+2);
- if (pidlNew)
- {
- memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */
+ if (pidl)
+ {
+ len = pidl->mkid.cb;
+ pidlNew = (LPITEMIDLIST) SHAlloc (len+2);
+ if (pidlNew)
+ {
+ memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */
- if (len)
- ILGetNext(pidlNew)->mkid.cb = 0x00;
- }
- }
- TRACE("-- newpidl=%p\n",pidlNew);
+ if (len)
+ ILGetNext(pidlNew)->mkid.cb = 0x00;
+ }
+ }
+ TRACE("-- newpidl=%p\n",pidlNew);
- return pidlNew;
+ return pidlNew;
}
/*************************************************************************
@@ -275,51 +281,58 @@
* the first two bytes are the len, the pidl is following then
*/
HRESULT WINAPI ILLoadFromStream (IStream * pStream, LPITEMIDLIST * ppPidl)
-{ WORD wLen = 0;
- DWORD dwBytesRead;
- HRESULT ret = E_FAIL;
+{
+ WORD wLen = 0;
+ DWORD dwBytesRead;
+ HRESULT ret = E_FAIL;
- TRACE_(shell)("%p %p\n", pStream , ppPidl);
+ TRACE_(shell)("%p %p\n", pStream , ppPidl);
- if (*ppPidl)
- { SHFree(*ppPidl);
- *ppPidl = NULL;
- }
+ if (*ppPidl)
+ {
+ SHFree(*ppPidl);
+ *ppPidl = NULL;
+ }
- IStream_AddRef (pStream);
+ IStream_AddRef (pStream);
- if (SUCCEEDED(IStream_Read(pStream, (LPVOID)&wLen, 2, &dwBytesRead)))
- {
- TRACE("PIDL length is %d\n", wLen);
- if (wLen != 0) {
- *ppPidl = SHAlloc (wLen);
- if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen, &dwBytesRead))) {
- TRACE("Stream read OK\n");
- ret = S_OK;
- } else {
- WARN("reading pidl failed\n");
- SHFree(*ppPidl);
- *ppPidl = NULL;
- }
- } else {
- *ppPidl = NULL;
- ret = S_OK;
- }
- }
+ if (SUCCEEDED(IStream_Read(pStream, (LPVOID)&wLen, 2, &dwBytesRead)))
+ {
+ TRACE("PIDL length is %d\n", wLen);
+ if (wLen != 0)
+ {
+ *ppPidl = SHAlloc (wLen);
+ if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen, &dwBytesRead)))
+ {
+ TRACE("Stream read OK\n");
+ ret = S_OK;
+ }
+ else
+ {
+ WARN("reading pidl failed\n");
+ SHFree(*ppPidl);
+ *ppPidl = NULL;
+ }
+ }
+ else
+ {
+ *ppPidl = NULL;
+ ret = S_OK;
+ }
+ }
- /* we are not yet fully compatible */
- if (*ppPidl && !pcheck(*ppPidl))
- {
- WARN("Check failed\n");
- SHFree(*ppPidl);
- *ppPidl = NULL;
- }
+ /* we are not yet fully compatible */
+ if (*ppPidl && !pcheck(*ppPidl))
+ {
+ WARN("Check failed\n");
+ SHFree(*ppPidl);
+ *ppPidl = NULL;
+ }
-
- IStream_Release (pStream);
- TRACE("done\n");
- return ret;
+ IStream_Release (pStream);
+ TRACE("done\n");
+ return ret;
}
/*************************************************************************
@@ -330,30 +343,29 @@
*/
HRESULT WINAPI ILSaveToStream (IStream * pStream, LPCITEMIDLIST pPidl)
{
- LPCITEMIDLIST pidl;
- WORD wLen = 0;
- HRESULT ret = E_FAIL;
+ LPCITEMIDLIST pidl;
+ WORD wLen = 0;
+ HRESULT ret = E_FAIL;
- TRACE_(shell)("%p %p\n", pStream, pPidl);
+ TRACE_(shell)("%p %p\n", pStream, pPidl);
- IStream_AddRef (pStream);
+ IStream_AddRef (pStream);
- pidl = pPidl;
- while (pidl->mkid.cb)
- {
- wLen += sizeof(WORD) + pidl->mkid.cb;
- pidl = ILGetNext(pidl);
- }
+ pidl = pPidl;
+ while (pidl->mkid.cb)
+ {
+ wLen += sizeof(WORD) + pidl->mkid.cb;
+ pidl = ILGetNext(pidl);
+ }
- if (SUCCEEDED(IStream_Write(pStream, (LPVOID)&wLen, 2, NULL)))
- {
- if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
- { ret = S_OK;
- }
- }
- IStream_Release (pStream);
+ if (SUCCEEDED(IStream_Write(pStream, (LPVOID)&wLen, 2, NULL)))
+ {
+ if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
+ ret = S_OK;
+ }
+ IStream_Release (pStream);
- return ret;
+ return ret;
}
/*************************************************************************
@@ -375,45 +387,37 @@
*/
HRESULT WINAPI SHILCreateFromPathA(LPCSTR path, LPITEMIDLIST * ppidl, DWORD * attributes)
{
- LPSHELLFOLDER sf;
- WCHAR lpszDisplayName[MAX_PATH];
- DWORD pchEaten;
- HRESULT ret = E_FAIL;
+ WCHAR lpszDisplayName[MAX_PATH];
- TRACE_(shell)("%s %p 0x%08lx\n", path, ppidl, attributes ? *attributes : 0);
+ TRACE_(shell)("%s %p 0x%08lx\n", path, ppidl, attributes ? *attributes : 0);
- if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
- lpszDisplayName[MAX_PATH-1] = 0;
+ if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
+ lpszDisplayName[MAX_PATH-1] = 0;
- if (SUCCEEDED (SHGetDesktopFolder(&sf)))
- {
- ret = IShellFolder_ParseDisplayName(sf, 0, NULL, lpszDisplayName, &pchEaten, ppidl, attributes);
- IShellFolder_Release(sf);
- }
- return ret;
+ return SHILCreateFromPathW(lpszDisplayName, ppidl, attributes);
}
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST * ppidl, DWORD * attributes)
{
- LPSHELLFOLDER sf;
- DWORD pchEaten;
- HRESULT ret = E_FAIL;
+ LPSHELLFOLDER sf;
+ DWORD pchEaten;
+ HRESULT ret = E_FAIL;
- TRACE_(shell)("%s %p 0x%08lx\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
+ TRACE_(shell)("%s %p 0x%08lx\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
- if (SUCCEEDED (SHGetDesktopFolder(&sf)))
- {
- ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
- IShellFolder_Release(sf);
- }
- return ret;
+ if (SUCCEEDED (SHGetDesktopFolder(&sf)))
+ {
+ ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
+ IShellFolder_Release(sf);
+ }
+ return ret;
}
HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST * ppidl, DWORD * attributes)
{
- if ( SHELL_OsIsUnicode())
- return SHILCreateFromPathW (path, ppidl, attributes);
- return SHILCreateFromPathA (path, ppidl, attributes);
+ if ( SHELL_OsIsUnicode())
+ return SHILCreateFromPathW (path, ppidl, attributes);
+ return SHILCreateFromPathA (path, ppidl, attributes);
}
/*************************************************************************
@@ -422,9 +426,9 @@
* Create an ItemIDList to one of the special folders.
* PARAMS
- * hwndOwner [in]
- * nFolder [in] CSIDL_xxxxx
- * fCreate [in] Create folder if it does not exist
+ * hwndOwner [in]
+ * nFolder [in] CSIDL_xxxxx
+ * fCreate [in] Create folder if it does not exist
*
* RETURNS
* Success: The newly created pidl
@@ -436,14 +440,15 @@
* shells IMalloc interface, aka ILFree.
*/
LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, DWORD nFolder, BOOL fCreate)
-{ LPITEMIDLIST ppidl;
- TRACE_(shell)("(hwnd=%p,csidl=0x%lx,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
+{
+ LPITEMIDLIST ppidl;
+ TRACE_(shell)("(hwnd=%p,csidl=0x%lx,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
- if (fCreate)
- nFolder |= CSIDL_FLAG_CREATE;
+ if (fCreate)
+ nFolder |= CSIDL_FLAG_CREATE;
- SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
- return ppidl;
+ SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
+ return ppidl;
}
/*************************************************************************
@@ -461,21 +466,22 @@
* exported by ordinal.
*/
[truncated at 1000 lines; 10092 more skipped]