From 42f3315e47f03ca6c6a9be5515e3c89ee217cc51 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 15 May 2008 22:34:52 -0700 Subject: [PATCH] shell32: implement make new folder UI changes. --- dlls/shell32/brsfolder.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 40 insertions(+), 0 deletions(-) diff --git a/dlls/shell32/brsfolder.c b/dlls/shell32/brsfolder.c index fab974d..06e1b08 100644 --- a/dlls/shell32/brsfolder.c +++ b/dlls/shell32/brsfolder.c @@ -554,6 +554,8 @@ static BOOL BrsFolder_MakeNewFolder(browse_info *info) IShellFolder *psfDesktop; IShellFolder *psfFolder; LPITEMIDLIST pidlFolder; + LPITEMIDLIST pidlTemp; + TVITEMEXW tvitem; int error = 0; hr = SHGetDesktopFolder(&psfDesktop); @@ -597,6 +599,44 @@ static BOOL BrsFolder_MakeNewFolder(browse_info *info) goto make_new_folder_done; } + /* find item in treeview */ + memset(&tvitem, 0, sizeof(tvitem)); + tvitem.mask = TVIF_PARAM; + tvitem.hItem = TreeView_GetRoot(info->hwndTreeView); + if (tvitem.hItem) + tvitem.hItem = TreeView_GetChild(info->hwndTreeView, tvitem.hItem); + pidlTemp = ILClone(info->pidlRet); + while (tvitem.hItem && !_ILIsEmpty(pidlTemp)) + { + LPTV_ITEMDATA pItemData; + + SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&tvitem); + pItemData = (LPTV_ITEMDATA)tvitem.lParam; + + if (_ILIsEqualSimple(pItemData->lpi, pidlTemp)) + { + pidlTemp = ILGetNext(pidlTemp); + if (!_ILIsEmpty(pidlTemp)) + { + SendMessageW(info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)tvitem.hItem); + tvitem.hItem = TreeView_GetChild(info->hwndTreeView, tvitem.hItem); + } + } + else + tvitem.hItem = TreeView_GetNextSibling(info->hwndTreeView, tvitem.hItem); + } + + /* insert new treeview item, select it */ + if (_ILIsEmpty(pidlTemp) && tvitem.hItem) + { + HTREEITEM hitem; + + hitem = InsertTreeViewItem(info, psfFolder, pidlFolder, info->pidlRet, NULL, tvitem.hItem); + SendMessageW(info->hwndTreeView, TVM_SORTCHILDREN, (WPARAM) tvitem.hItem, 0); + if (hitem) + SendMessageW(info->hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM) hitem); + } + make_new_folder_done: if (error) { -- 1.5.2.2