SHELL32: clean up brsfolder.c
Mike McCormack
mike at codeweavers.com
Sat Mar 12 00:30:08 CST 2005
ChangeLog:
* remove tabs, reformat and break long lines
-------------- next part --------------
Index: dlls/shell32/brsfolder.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/brsfolder.c,v
retrieving revision 1.56
diff -u -p -r1.56 brsfolder.c
--- dlls/shell32/brsfolder.c 1 Mar 2005 11:45:32 -0000 1.56
+++ dlls/shell32/brsfolder.c 12 Mar 2005 06:28:05 -0000
@@ -37,12 +37,19 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-static HWND hwndTreeView;
-static LPBROWSEINFOW lpBrowseInfo;
-static LPITEMIDLIST pidlRet;
+static HWND hwndTreeView;
+static LPBROWSEINFOW lpBrowseInfo;
+static LPITEMIDLIST pidlRet;
-static void FillTreeView(LPSHELLFOLDER lpsf, LPITEMIDLIST lpifq, HTREEITEM hParent, IEnumIDList* lpe);
-static HTREEITEM InsertTreeViewItem(IShellFolder * lpsf, LPCITEMIDLIST pidl, LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent);
+typedef struct tagID
+{
+ 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;
+
+static HTREEITEM InsertTreeViewItem(IShellFolder *, LPCITEMIDLIST, LPCITEMIDLIST, IEnumIDList*, HTREEITEM);
#define SUPPORTEDFLAGS (BIF_STATUSTEXT | \
BIF_BROWSEFORCOMPUTER | \
@@ -75,7 +82,8 @@ static void InitializeTreeView(HWND hwnd
TRACE("dlg=%p tree=%p\n", hwndParent, hwndTreeView );
hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW);
- if (!hwndTreeView) {
+ if (!hwndTreeView)
+ {
FIXME("Could not get handle to treeview control! Error: %08lx\n", GetLastError());
return;
}
@@ -84,7 +92,8 @@ static void InitializeTreeView(HWND hwnd
if (hImageList)
TreeView_SetImageList(hwndTreeView, hImageList, 0);
- /* We want to call InsertTreeViewItem down the code, in order to insert
+ /*
+ * 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:
*
@@ -100,39 +109,53 @@ static void InitializeTreeView(HWND hwnd
ILRemoveLastID(pidlParent);
pidlChild = ILClone(ILFindLastID(root));
- if (_ILIsDesktop(pidlParent)) {
+ if (_ILIsDesktop(pidlParent))
+ {
hr = SHGetDesktopFolder(&lpsfParent);
- } else {
+ }
+ else
+ {
IShellFolder *lpsfDesktop;
+
hr = SHGetDesktopFolder(&lpsfDesktop);
- if (!SUCCEEDED(hr)) {
+ if (!SUCCEEDED(hr))
+ {
WARN("SHGetDesktopFolder failed! hr = %08lx\n", hr);
return;
}
- hr = IShellFolder_BindToObject(lpsfDesktop, pidlParent, 0, &IID_IShellFolder, (LPVOID*)&lpsfParent);
+ hr = IShellFolder_BindToObject(lpsfDesktop, pidlParent, 0,
+ &IID_IShellFolder, (LPVOID*)&lpsfParent);
IShellFolder_Release(lpsfDesktop);
}
- if (!SUCCEEDED(hr)) {
+ if (!SUCCEEDED(hr))
+ {
WARN("Could not bind to parent shell folder! hr = %08lx\n", hr);
return;
}
- if (pidlChild && pidlChild->mkid.cb) {
- hr = IShellFolder_BindToObject(lpsfParent, pidlChild, 0, &IID_IShellFolder, (LPVOID*)&lpsfRoot);
- } else {
+ 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)) {
+ if (!SUCCEEDED(hr))
+ {
WARN("Could not bind to root shell folder! hr = %08lx\n", hr);
IShellFolder_Release(lpsfParent);
return;
}
- hr = IShellFolder_EnumObjects(lpsfRoot, hwndParent, BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags), &pEnumChildren);
- if (!SUCCEEDED(hr)) {
+ 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);
@@ -140,7 +163,8 @@ static void InitializeTreeView(HWND hwnd
}
TreeView_DeleteAllItems(hwndTreeView);
- TreeView_Expand(hwndTreeView, InsertTreeViewItem(lpsfParent, pidlChild, pidlParent, pEnumChildren, TVI_ROOT), TVE_EXPAND);
+ TreeView_Expand(hwndTreeView, InsertTreeViewItem(lpsfParent, pidlChild,
+ pidlParent, pEnumChildren, TVI_ROOT), TVE_EXPAND);
IShellFolder_Release(lpsfRoot);
IShellFolder_Release(lpsfParent);
@@ -148,40 +172,34 @@ static void InitializeTreeView(HWND hwnd
static int GetIcon(LPITEMIDLIST lpi, UINT uFlags)
{
- SHFILEINFOW sfi;
- SHGetFileInfoW((LPCWSTR)lpi, 0 ,&sfi, sizeof(SHFILEINFOW), uFlags);
- return sfi.iIcon;
+ SHFILEINFOW sfi;
+ SHGetFileInfoW((LPCWSTR)lpi, 0 ,&sfi, sizeof(SHFILEINFOW), uFlags);
+ return sfi.iIcon;
}
static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM)
{
- LPITEMIDLIST pidlDesktop = NULL;
+ LPITEMIDLIST pidlDesktop = NULL;
+ UINT flags;
- TRACE("%p %p\n",lpifq, lpTV_ITEM);
+ TRACE("%p %p\n",lpifq, lpTV_ITEM);
- if (!lpifq)
- {
- pidlDesktop = _ILCreateDesktop();
- lpifq = pidlDesktop;
- }
+ if (!lpifq)
+ {
+ pidlDesktop = _ILCreateDesktop();
+ lpifq = pidlDesktop;
+ }
- lpTV_ITEM->iImage = GetIcon(lpifq, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
- lpTV_ITEM->iSelectedImage = GetIcon(lpifq, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON);
+ flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON;
+ lpTV_ITEM->iImage = GetIcon(lpifq, flags);
- if (pidlDesktop)
- ILFree(pidlDesktop);
+ flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON;
+ lpTV_ITEM->iSelectedImage = GetIcon(lpifq, flags);
- return;
+ if (pidlDesktop)
+ ILFree(pidlDesktop);
}
-typedef struct tagID
-{
- 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]
*
@@ -197,24 +215,24 @@ typedef struct tagID
* Success: TRUE
* Failure: FALSE
*/
-static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR lpFriendlyName)
+static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags,
+ LPWSTR lpFriendlyName)
{
- BOOL bSuccess=TRUE;
- STRRET str;
+ BOOL bSuccess=TRUE;
+ STRRET str;
+
+ TRACE("%p %p %lx %p\n", lpsf, lpi, dwFlags, lpFriendlyName);
- TRACE("%p %p %lx %p\n", lpsf, lpi, dwFlags, lpFriendlyName);
- if (SUCCEEDED(IShellFolder_GetDisplayNameOf(lpsf, lpi, dwFlags, &str)))
- {
- if (FAILED(StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, lpi)))
- {
- bSuccess = FALSE;
- }
- }
- else
- bSuccess = FALSE;
+ if (SUCCEEDED(IShellFolder_GetDisplayNameOf(lpsf, lpi, dwFlags, &str)))
+ {
+ if (FAILED(StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, lpi)))
+ bSuccess = FALSE;
+ }
+ else
+ bSuccess = FALSE;
- TRACE("-- %s\n", debugstr_w(lpFriendlyName));
- return bSuccess;
+ TRACE("-- %s\n", debugstr_w(lpFriendlyName));
+ return bSuccess;
}
/******************************************************************************
@@ -232,40 +250,41 @@ static BOOL GetName(LPSHELLFOLDER lpsf,
* Failure: NULL
*/
static HTREEITEM InsertTreeViewItem(IShellFolder * lpsf, LPCITEMIDLIST pidl,
- LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent)
+ LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent)
{
- TVITEMW tvi;
- TVINSERTSTRUCTW tvins;
- WCHAR szBuff[MAX_PATH];
- LPTV_ITEMDATA lptvid=0;
+ TVITEMW tvi;
+ TVINSERTSTRUCTW tvins;
+ WCHAR szBuff[MAX_PATH];
+ LPTV_ITEMDATA lptvid=0;
- tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
+ tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
- tvi.cChildren= pEnumIL ? 1 : 0;
- tvi.mask |= TVIF_CHILDREN;
+ tvi.cChildren= pEnumIL ? 1 : 0;
+ tvi.mask |= TVIF_CHILDREN;
- if (!(lptvid = (LPTV_ITEMDATA)SHAlloc(sizeof(TV_ITEMDATA))))
- return NULL;
+ lptvid = (LPTV_ITEMDATA)SHAlloc(sizeof(TV_ITEMDATA));
+ if (!lptvid)
+ return NULL;
- if (!GetName(lpsf, pidl, SHGDN_NORMAL, szBuff))
- return NULL;
+ if (!GetName(lpsf, pidl, SHGDN_NORMAL, szBuff))
+ return NULL;
- tvi.pszText = szBuff;
- tvi.cchTextMax = MAX_PATH;
- tvi.lParam = (LPARAM)lptvid;
+ tvi.pszText = szBuff;
+ tvi.cchTextMax = MAX_PATH;
+ tvi.lParam = (LPARAM)lptvid;
- IShellFolder_AddRef(lpsf);
- lptvid->lpsfParent = lpsf;
- lptvid->lpi = ILClone(pidl);
- lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl);
- lptvid->pEnumIL = pEnumIL;
- GetNormalAndSelectedIcons(lptvid->lpifq, &tvi);
+ IShellFolder_AddRef(lpsf);
+ lptvid->lpsfParent = lpsf;
+ lptvid->lpi = ILClone(pidl);
+ lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl);
+ lptvid->pEnumIL = pEnumIL;
+ GetNormalAndSelectedIcons(lptvid->lpifq, &tvi);
- tvins.u.item = tvi;
- tvins.hInsertAfter = NULL;
- tvins.hParent = hParent;
+ tvins.u.item = tvi;
+ tvins.hInsertAfter = NULL;
+ tvins.hParent = hParent;
- return (HTREEITEM)TreeView_InsertItemW(hwndTreeView, &tvins);
+ return (HTREEITEM)TreeView_InsertItemW(hwndTreeView, &tvins);
}
/******************************************************************************
@@ -280,58 +299,65 @@ static HTREEITEM InsertTreeViewItem(IShe
* 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)
+static void FillTreeView(IShellFolder * lpsf, LPITEMIDLIST pidl,
+ HTREEITEM hParent, IEnumIDList* lpe)
{
- HTREEITEM hPrev = 0;
- LPITEMIDLIST pidlTemp = 0;
- ULONG ulFetched;
- HRESULT hr;
- HWND hwnd=GetParent(hwndTreeView);
-
- 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));
-
- while (NOERROR == IEnumIDList_Next(lpe,1,&pidlTemp,&ulFetched))
- {
- ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER;
- IEnumIDList* pEnumIL = NULL;
- IShellFolder* pSFChild = NULL;
- IShellFolder_GetAttributesOf(lpsf, 1, (LPCITEMIDLIST*)&pidlTemp, &ulAttrs);
- if (ulAttrs & SFGAO_FOLDER)
- {
- hr = IShellFolder_BindToObject(lpsf,pidlTemp,NULL,&IID_IShellFolder,(LPVOID*)&pSFChild);
- if (SUCCEEDED(hr))
+ HTREEITEM hPrev = 0;
+ LPITEMIDLIST pidlTemp = 0;
+ ULONG ulFetched;
+ HRESULT hr;
+ HWND hwnd = GetParent(hwndTreeView);
+
+ 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));
+
+ while (NOERROR == IEnumIDList_Next(lpe,1,&pidlTemp,&ulFetched))
+ {
+ ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER;
+
+ IEnumIDList* pEnumIL = NULL;
+ IShellFolder* pSFChild = NULL;
+ IShellFolder_GetAttributesOf(lpsf, 1, (LPCITEMIDLIST*)&pidlTemp, &ulAttrs);
+ if (ulAttrs & SFGAO_FOLDER)
+ {
+ hr = IShellFolder_BindToObject(lpsf, pidlTemp, NULL,
+ &IID_IShellFolder, (LPVOID*)&pSFChild);
+ if (SUCCEEDED(hr))
+ {
+ hr = IShellFolder_EnumObjects(pSFChild, hwnd,
+ BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags), &pEnumIL);
+ if (SUCCEEDED(hr))
{
- hr = IShellFolder_EnumObjects(pSFChild, hwnd, BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags), &pEnumIL);
- if (SUCCEEDED(hr))
+ hr = IEnumIDList_Skip(pEnumIL, 1);
+ if ((hr != S_OK) || FAILED(IEnumIDList_Reset(pEnumIL)))
{
- if ((IEnumIDList_Skip(pEnumIL, 1) != S_OK) || FAILED(IEnumIDList_Reset(pEnumIL)))
- {
- IEnumIDList_Release(pEnumIL);
- pEnumIL = NULL;
- }
+ IEnumIDList_Release(pEnumIL);
+ pEnumIL = NULL;
}
- IShellFolder_Release(pSFChild);
}
- }
+ IShellFolder_Release(pSFChild);
+ }
+ }
+
+ hPrev = InsertTreeViewItem(lpsf, pidlTemp, pidl, pEnumIL, hParent);
+ if (!hPrev)
+ goto done;
+ SHFree(pidlTemp); /* Finally, free the pidl that the shell gave us... */
+ pidlTemp=NULL;
+ }
- if (!(hPrev = InsertTreeViewItem(lpsf, pidlTemp, pidl, pEnumIL, hParent)))
- goto Done;
- SHFree(pidlTemp); /* Finally, free the pidl that the shell gave us... */
- pidlTemp=NULL;
- }
-
-Done:
- ReleaseCapture();
- SetCursor(LoadCursorW(0, (LPWSTR)IDC_ARROW));
+done:
+ ReleaseCapture();
+ SetCursor(LoadCursorW(0, (LPWSTR)IDC_ARROW));
- if (pidlTemp)
- SHFree(pidlTemp);
+ if (pidlTemp)
+ SHFree(pidlTemp);
}
static inline BOOL PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type)
@@ -347,21 +373,25 @@ static void BrsFolder_CheckValidSelectio
LPCITEMIDLIST pidl = lptvid->lpi;
BOOL bEnabled = TRUE;
DWORD dwAttributes;
- if ((lpBrowseInfo->ulFlags & BIF_BROWSEFORCOMPUTER) &&
- !PIDLIsType(pidl, PT_COMP))
+ HRESULT hr;
+
+ if ((lpBrowseInfo->ulFlags & BIF_BROWSEFORCOMPUTER) && !PIDLIsType(pidl, PT_COMP))
bEnabled = FALSE;
+
if (lpBrowseInfo->ulFlags & BIF_RETURNFSANCESTORS)
{
dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM;
- if (FAILED(IShellFolder_GetAttributesOf(lptvid->lpsfParent, 1, (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes)) ||
- !dwAttributes)
+ hr = IShellFolder_GetAttributesOf(lptvid->lpsfParent, 1,
+ (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes);
+ if (FAILED(hr) || !dwAttributes)
bEnabled = FALSE;
}
if (lpBrowseInfo->ulFlags & BIF_RETURNONLYFSDIRS)
{
dwAttributes = SFGAO_FOLDER | SFGAO_FILESYSTEM;
- if (FAILED(IShellFolder_GetAttributesOf(lptvid->lpsfParent, 1, (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes)) ||
- (dwAttributes != (SFGAO_FOLDER | SFGAO_FILESYSTEM)))
+ hr = IShellFolder_GetAttributesOf(lptvid->lpsfParent, 1,
+ (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes);
+ if (FAILED(hr) || (dwAttributes != (SFGAO_FOLDER | SFGAO_FILESYSTEM)))
bEnabled = FALSE;
}
SendMessageW(hWndTree, BFFM_ENABLEOK, 0, (LPARAM)bEnabled);
@@ -369,155 +399,170 @@ static void BrsFolder_CheckValidSelectio
static LRESULT MsgNotify(HWND hWnd, UINT CtlID, LPNMHDR lpnmh)
{
- NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh;
- LPTV_ITEMDATA lptvid; /* Long pointer to TreeView item data */
- IShellFolder * lpsf2=0;
-
-
- TRACE("%p %x %p msg=%x\n", hWnd, CtlID, lpnmh, pnmtv->hdr.code);
-
- switch (pnmtv->hdr.idFrom)
- { case IDD_TREEVIEW:
- switch (pnmtv->hdr.code)
- {
- case TVN_DELETEITEMA:
- case TVN_DELETEITEMW:
- TRACE("TVN_DELETEITEMA/W\n");
- lptvid=(LPTV_ITEMDATA)pnmtv->itemOld.lParam;
- IShellFolder_Release(lptvid->lpsfParent);
- if (lptvid->pEnumIL)
- IEnumIDList_Release(lptvid->pEnumIL);
- SHFree(lptvid->lpi);
- SHFree(lptvid->lpifq);
- SHFree(lptvid);
- break;
-
- case TVN_ITEMEXPANDINGA:
- case TVN_ITEMEXPANDINGW:
- {
- TRACE("TVN_ITEMEXPANDINGA/W\n");
- if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE))
- break;
-
- lptvid=(LPTV_ITEMDATA)pnmtv->itemNew.lParam;
- if (SUCCEEDED(IShellFolder_BindToObject(lptvid->lpsfParent, lptvid->lpi,0,(REFIID)&IID_IShellFolder,(LPVOID *)&lpsf2)))
- { FillTreeView( lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem, lptvid->pEnumIL);
- }
- /* My Computer is already sorted and trying to do a simple text
- * sort will only mess things up */
- if (!_ILIsMyComputer(lptvid->lpi))
- TreeView_SortChildren(hwndTreeView, pnmtv->itemNew.hItem, FALSE);
- }
- break;
- case TVN_SELCHANGEDA:
- case TVN_SELCHANGEDW:
- lptvid=(LPTV_ITEMDATA)pnmtv->itemNew.lParam;
- pidlRet = lptvid->lpifq;
- if (lpBrowseInfo->lpfn)
- (lpBrowseInfo->lpfn)(hWnd, BFFM_SELCHANGED, (LPARAM)pidlRet, lpBrowseInfo->lParam);
- BrsFolder_CheckValidSelection(hWnd, lptvid);
- break;
-
- default:
- WARN("unhandled (%d)\n", pnmtv->hdr.code);
- break;
- }
- break;
-
- default:
- break;
- }
+ NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh;
+ LPTV_ITEMDATA lptvid; /* Long pointer to TreeView item data */
+ IShellFolder *lpsf2 = 0;
+ HRESULT hr;
- return 0;
-}
+ TRACE("%p %x %p msg=%x\n", hWnd, CtlID, lpnmh, pnmtv->hdr.code);
+ switch (pnmtv->hdr.idFrom)
+ {
+ case IDD_TREEVIEW:
+ switch (pnmtv->hdr.code)
+ {
+ case TVN_DELETEITEMA:
+ case TVN_DELETEITEMW:
+ TRACE("TVN_DELETEITEMA/W\n");
+ lptvid = (LPTV_ITEMDATA) pnmtv->itemOld.lParam;
+ IShellFolder_Release(lptvid->lpsfParent);
+ if (lptvid->pEnumIL)
+ IEnumIDList_Release(lptvid->pEnumIL);
+ SHFree(lptvid->lpi);
+ SHFree(lptvid->lpifq);
+ SHFree(lptvid);
+ break;
+
+ case TVN_ITEMEXPANDINGA:
+ case TVN_ITEMEXPANDINGW:
+ TRACE("TVN_ITEMEXPANDINGA/W\n");
+ if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE))
+ break;
+
+ lptvid=(LPTV_ITEMDATA)pnmtv->itemNew.lParam;
+ hr = IShellFolder_BindToObject(lptvid->lpsfParent, lptvid->lpi, 0,
+ (REFIID)&IID_IShellFolder,(LPVOID *)&lpsf2);
+ if (SUCCEEDED(hr))
+ {
+ FillTreeView( lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem,
+ lptvid->pEnumIL);
+ }
+
+ /*
+ * My Computer is already sorted and trying to do a simple text
+ * sort will only mess things up
+ */
+ if (!_ILIsMyComputer(lptvid->lpi))
+ TreeView_SortChildren(hwndTreeView, pnmtv->itemNew.hItem, FALSE);
+ break;
+
+ case TVN_SELCHANGEDA:
+ case TVN_SELCHANGEDW:
+ lptvid=(LPTV_ITEMDATA)pnmtv->itemNew.lParam;
+ pidlRet = lptvid->lpifq;
+ if (lpBrowseInfo->lpfn)
+ (lpBrowseInfo->lpfn)(hWnd, BFFM_SELCHANGED, (LPARAM)pidlRet,
+ lpBrowseInfo->lParam);
+ BrsFolder_CheckValidSelection(hWnd, lptvid);
+ break;
+
+ default:
+ WARN("unhandled (%d)\n", pnmtv->hdr.code);
+ break;
+ }
+ break;
+ }
+
+ return 0;
+}
/*************************************************************************
* BrsFolderDlgProc32 (not an exported API function)
*/
static INT_PTR CALLBACK BrsFolderDlgProc(HWND hWnd, UINT msg, WPARAM wParam,
- LPARAM lParam )
+ LPARAM lParam )
{
- TRACE("hwnd=%p msg=%04x 0x%08x 0x%08lx\n", hWnd, msg, wParam, lParam );
+ TRACE("hwnd=%p msg=%04x 0x%08x 0x%08lx\n", hWnd, msg, wParam, lParam );
+
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ pidlRet = NULL;
+ lpBrowseInfo = (LPBROWSEINFOW) lParam;
+ if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS)
+ FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS);
+
+ if (lpBrowseInfo->lpszTitle)
+ SetWindowTextW(GetDlgItem(hWnd, IDD_TITLE), lpBrowseInfo->lpszTitle);
+ else
+ ShowWindow(GetDlgItem(hWnd, IDD_TITLE), SW_HIDE);
+
+ if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT))
+ ShowWindow(GetDlgItem(hWnd, IDD_STATUS), SW_HIDE);
+
+ InitializeTreeView(hWnd, lpBrowseInfo->pidlRoot);
+
+ if (lpBrowseInfo->lpfn)
+ (lpBrowseInfo->lpfn)(hWnd, BFFM_INITIALIZED, 0, lpBrowseInfo->lParam);
+
+ return TRUE;
+
+ case WM_NOTIFY:
+ MsgNotify( hWnd, (UINT)wParam, (LPNMHDR)lParam);
+ break;
+
+ case WM_COMMAND:
+ switch (wParam)
+ {
+ case IDOK:
+ pdump( pidlRet );
+ if (lpBrowseInfo->pszDisplayName)
+ SHGetPathFromIDListW(pidlRet, lpBrowseInfo->pszDisplayName);
+ EndDialog(hWnd, (DWORD) ILClone(pidlRet));
+ return TRUE;
+
+ case IDCANCEL:
+ EndDialog(hWnd, 0);
+ return TRUE;
+ }
+ break;
- switch(msg)
- { case WM_INITDIALOG:
- pidlRet = NULL;
- lpBrowseInfo = (LPBROWSEINFOW) lParam;
- if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS)
- FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS);
- if (lpBrowseInfo->lpszTitle) {
- SetWindowTextW(GetDlgItem(hWnd, IDD_TITLE), lpBrowseInfo->lpszTitle);
- } else {
- ShowWindow(GetDlgItem(hWnd, IDD_TITLE), SW_HIDE);
- }
- if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT))
- ShowWindow(GetDlgItem(hWnd, IDD_STATUS), SW_HIDE);
-
- InitializeTreeView(hWnd, lpBrowseInfo->pidlRoot);
-
- if (lpBrowseInfo->lpfn)
- (lpBrowseInfo->lpfn)(hWnd, BFFM_INITIALIZED, 0, lpBrowseInfo->lParam);
-
- return TRUE;
-
- case WM_NOTIFY:
- MsgNotify( hWnd, (UINT)wParam, (LPNMHDR)lParam);
- break;
-
- case WM_COMMAND:
- switch (wParam)
- { case IDOK:
- pdump ( pidlRet );
- if (lpBrowseInfo->pszDisplayName)
- SHGetPathFromIDListW(pidlRet, lpBrowseInfo->pszDisplayName);
- EndDialog(hWnd, (DWORD) ILClone(pidlRet));
- return TRUE;
-
- case IDCANCEL:
- EndDialog(hWnd, 0);
- return TRUE;
- }
- break;
- case BFFM_SETSTATUSTEXTA:
- TRACE("Set status %s\n", debugstr_a((LPSTR)lParam));
- SetWindowTextA(GetDlgItem(hWnd, IDD_STATUS), (LPSTR)lParam);
- break;
- case BFFM_SETSTATUSTEXTW:
- TRACE("Set status %s\n", debugstr_w((LPWSTR)lParam));
- SetWindowTextW(GetDlgItem(hWnd, IDD_STATUS), (LPWSTR)lParam);
- break;
- case BFFM_ENABLEOK:
- TRACE("Enable %ld\n", lParam);
- EnableWindow(GetDlgItem(hWnd, 1), (lParam)?TRUE:FALSE);
- break;
- case BFFM_SETOKTEXT: /* unicode only */
- TRACE("Set OK text %s\n", debugstr_w((LPWSTR)wParam));
- SetWindowTextW(GetDlgItem(hWnd, 1), (LPWSTR)wParam);
- break;
- case BFFM_SETSELECTIONA:
- if (wParam)
- FIXME("Set selection %s\n", debugstr_a((LPSTR)lParam));
- else
- FIXME("Set selection %p\n", (void*)lParam);
- break;
- case BFFM_SETSELECTIONW:
- if (wParam)
- FIXME("Set selection %s\n", debugstr_w((LPWSTR)lParam));
- else
- FIXME("Set selection %p\n", (void*)lParam);
- break;
- case BFFM_SETEXPANDED: /* unicode only */
- if (wParam)
- FIXME("Set expanded %s\n", debugstr_w((LPWSTR)lParam));
- else
- FIXME("Set expanded %p\n", (void*)lParam);
- break;
- }
- return FALSE;
+ case BFFM_SETSTATUSTEXTA:
+ TRACE("Set status %s\n", debugstr_a((LPSTR)lParam));
+ SetWindowTextA(GetDlgItem(hWnd, IDD_STATUS), (LPSTR)lParam);
+ break;
+
+ case BFFM_SETSTATUSTEXTW:
+ TRACE("Set status %s\n", debugstr_w((LPWSTR)lParam));
+ SetWindowTextW(GetDlgItem(hWnd, IDD_STATUS), (LPWSTR)lParam);
+ break;
+
+ case BFFM_ENABLEOK:
+ TRACE("Enable %ld\n", lParam);
+ EnableWindow(GetDlgItem(hWnd, 1), (lParam)?TRUE:FALSE);
+ break;
+
+ case BFFM_SETOKTEXT: /* unicode only */
+ TRACE("Set OK text %s\n", debugstr_w((LPWSTR)wParam));
+ SetWindowTextW(GetDlgItem(hWnd, 1), (LPWSTR)wParam);
+ break;
+
+ case BFFM_SETSELECTIONA:
+ if (wParam)
+ FIXME("Set selection %s\n", debugstr_a((LPSTR)lParam));
+ else
+ FIXME("Set selection %p\n", (void*)lParam);
+ break;
+
+ case BFFM_SETSELECTIONW:
+ if (wParam)
+ FIXME("Set selection %s\n", debugstr_w((LPWSTR)lParam));
+ else
+ FIXME("Set selection %p\n", (void*)lParam);
+ break;
+
+ case BFFM_SETEXPANDED: /* unicode only */
+ if (wParam)
+ FIXME("Set expanded %s\n", debugstr_w((LPWSTR)lParam));
+ else
+ FIXME("Set expanded %p\n", (void*)lParam);
+ break;
+ }
+ return FALSE;
}
-static const WCHAR swBrowseTempName[] = {'S','H','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0};
+static const WCHAR swBrowseTempName[] = {
+ 'S','H','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0};
/*************************************************************************
* SHBrowseForFolderA [SHELL32.@]
@@ -525,51 +570,53 @@ static const WCHAR swBrowseTempName[] =
*/
LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi)
{
- BROWSEINFOW bi;
- LPITEMIDLIST lpid;
- INT len;
-
- TRACE("(%p{lpszTitle=%s,owner=%p})\n", lpbi,
- lpbi ? debugstr_a(lpbi->lpszTitle) : NULL, lpbi ? lpbi->hwndOwner : NULL);
-
- if (!lpbi)
- return NULL;
-
- bi.hwndOwner = lpbi->hwndOwner;
- bi.pidlRoot = lpbi->pidlRoot;
- if (lpbi->pszDisplayName)
- {
- /*lpbi->pszDisplayName is assumed to be MAX_PATH (MSDN) */
- bi.pszDisplayName = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
- MultiByteToWideChar(CP_ACP, 0, lpbi->pszDisplayName, -1, bi.pszDisplayName, MAX_PATH);
- }
- else
- bi.pszDisplayName = NULL;
-
- if (lpbi->lpszTitle)
- {
- len = MultiByteToWideChar(CP_ACP, 0, lpbi->lpszTitle, -1, NULL, 0);
- bi.lpszTitle = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- MultiByteToWideChar(CP_ACP, 0, lpbi->lpszTitle, -1, (LPWSTR)bi.lpszTitle, len);
- }
- else
- bi.lpszTitle = NULL;
-
- bi.ulFlags = lpbi->ulFlags;
- bi.lpfn = lpbi->lpfn;
- bi.lParam = lpbi->lParam;
- bi.iImage = lpbi->iImage;
- lpid = (LPITEMIDLIST) DialogBoxParamW(shell32_hInstance,
- swBrowseTempName, lpbi->hwndOwner,
- BrsFolderDlgProc, (INT)&bi);
- if (bi.pszDisplayName)
- {
- WideCharToMultiByte(CP_ACP, 0, bi.pszDisplayName, -1, lpbi->pszDisplayName, MAX_PATH, 0, NULL);
- HeapFree(GetProcessHeap(), 0, bi.pszDisplayName);
- }
- HeapFree(GetProcessHeap(), 0, (LPVOID)bi.lpszTitle);
- lpbi->iImage = bi.iImage;
- return lpid;
+ BROWSEINFOW bi;
+ LPITEMIDLIST lpid;
+ INT len;
+
+ TRACE("%p\n", lpbi);
+
+ if (!lpbi)
+ return NULL;
+
+ TRACE("Title=%s owner=%p\n", debugstr_a(lpbi->lpszTitle), lpbi->hwndOwner);
+
+ bi.hwndOwner = lpbi->hwndOwner;
+ bi.pidlRoot = lpbi->pidlRoot;
+ if (lpbi->pszDisplayName)
+ {
+ /*lpbi->pszDisplayName is assumed to be MAX_PATH (MSDN) */
+ bi.pszDisplayName = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, lpbi->pszDisplayName, -1, bi.pszDisplayName, MAX_PATH);
+ }
+ else
+ bi.pszDisplayName = NULL;
+
+ if (lpbi->lpszTitle)
+ {
+ len = MultiByteToWideChar(CP_ACP, 0, lpbi->lpszTitle, -1, NULL, 0);
+ bi.lpszTitle = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, lpbi->lpszTitle, -1, (LPWSTR)bi.lpszTitle, len);
+ }
+ else
+ bi.lpszTitle = NULL;
+
+ bi.ulFlags = lpbi->ulFlags;
+ bi.lpfn = lpbi->lpfn;
+ bi.lParam = lpbi->lParam;
+ bi.iImage = lpbi->iImage;
+ lpid = (LPITEMIDLIST) DialogBoxParamW(shell32_hInstance,
+ swBrowseTempName, lpbi->hwndOwner,
+ BrsFolderDlgProc, (INT)&bi);
+ if (bi.pszDisplayName)
+ {
+ WideCharToMultiByte(CP_ACP, 0, bi.pszDisplayName, -1,
+ lpbi->pszDisplayName, MAX_PATH, 0, NULL);
+ HeapFree(GetProcessHeap(), 0, bi.pszDisplayName);
+ }
+ HeapFree(GetProcessHeap(), 0, (LPVOID)bi.lpszTitle);
+ lpbi->iImage = bi.iImage;
+ return lpid;
}
@@ -578,13 +625,14 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (
*/
LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi)
{
- TRACE("((%p->{lpszTitle=%s,owner=%p})\n", lpbi,
- lpbi ? debugstr_w(lpbi->lpszTitle) : NULL, lpbi ? lpbi->hwndOwner : 0);
+ TRACE("%p\n", lpbi);
+
+ if (!lpbi)
+ return NULL;
- if (!lpbi)
- return NULL;
+ TRACE("title=%s owner=%p\n", debugstr_w(lpbi->lpszTitle), lpbi->hwndOwner);
- return (LPITEMIDLIST) DialogBoxParamW(shell32_hInstance,
- swBrowseTempName, lpbi->hwndOwner,
- BrsFolderDlgProc, (INT)lpbi);
+ return (LPITEMIDLIST) DialogBoxParamW(shell32_hInstance,
+ swBrowseTempName, lpbi->hwndOwner,
+ BrsFolderDlgProc, (INT)lpbi);
}
More information about the wine-patches
mailing list