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