ReactOS 0.4.16-dev-1020-gf135cab
brfolder.cpp File Reference
#include "precomp.h"
#include <ui/layout.h>
#include <compat_undoc.h>
Include dependency graph for brfolder.cpp:

Go to the source code of this file.

Classes

struct  BrFolder
 
struct  BrItemData
 

Macros

#define SHV_CHANGE_NOTIFY   (WM_USER + 0x1111)
 
#define SUPPORTED_FLAGS
 

Enumerations

enum  { SHGDN_TREE = SHGDN_NORMAL | SHGDN_INFOLDER }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
INT WINAPI Shell_GetCachedImageIndexW (LPCWSTR szPath, INT nIndex, UINT Flags)
 
static LPITEMIDLIST ILCloneToDepth (LPCITEMIDLIST pidlSrc, UINT depth)
 
static HTREEITEM BrFolder_InsertItem (_Inout_ BrFolder *info, _Inout_ IShellFolder *lpsf, _In_ PCUITEMID_CHILD pidlChild, _In_ PCIDLIST_ABSOLUTE pidlParent, _In_ HTREEITEM hParent)
 
static DWORD BrowseFlagsToSHCONTF (UINT ulFlags)
 
static void BrFolder_Callback (LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT uMsg, LPARAM lParam)
 
static BrItemDataBrFolder_GetItemData (BrFolder *info, HTREEITEM hItem)
 
static SFGAOF BrFolder_GetItemAttributes (BrFolder *info, HTREEITEM hItem, SFGAOF Query)
 
static HRESULT BrFolder_GetChildrenEnum (_In_ BrFolder *info, _In_ BrItemData *pItemData, _Outptr_opt_ IEnumIDList **ppEnum)
 
static void BrFolder_InitTreeView (BrFolder *info)
 
static HRESULT BrFolder_GetIconPair (BrItemData &item, TVITEMW &tvi)
 
static BOOL BrFolder_GetName (_In_ IShellFolder *lpsf, _In_ PCIDLIST_RELATIVE pidlChild, _In_ DWORD dwFlags, _Out_ PWSTR lpFriendlyName)
 
static BOOL BrFolder_GetName (_In_ BrFolder *info, _In_ HTREEITEM hItem, _In_ UINT Flags, _Out_ PWSTR Buffer)
 
static BOOL BrFolder_IsTreeItemInEnum (_Inout_ BrFolder *info, _In_ HTREEITEM hItem, _Inout_ IEnumIDList *pEnum)
 
static BOOL BrFolder_TreeItemHasThisChild (_In_ BrFolder *info, _In_ HTREEITEM hItem, _Outptr_opt_ PITEMID_CHILD pidlChild)
 
static HTREEITEM BrFolder_FindTreeItemOfAbsoluteItem (_In_ BrFolder &info, _In_ PCIDLIST_ABSOLUTE pidl, _In_opt_ HTREEITEM hItem=NULL)
 
static BOOL BrFolder_UpdateItemEx (_In_ BrFolder &info, _In_ HTREEITEM hItem, _In_opt_ PCIDLIST_ABSOLUTE pidlFull, _In_ UINT Flags=TVIF_TEXT|TVIF_IMAGE|TVIF_CHILDREN)
 
static void BrFolder_UpdateItem (_In_ BrFolder *info, _In_ HTREEITEM hItem)
 
static void BrFolder_Expand (_In_ BrFolder *info, _In_ IShellFolder *lpsf, _In_ PCIDLIST_ABSOLUTE pidlFull, _In_ HTREEITEM hParent)
 
static BOOL PIDLIsType (LPCITEMIDLIST pidl, PIDLTYPE type)
 
static void BrFolder_CheckValidSelection (BrFolder *info, BrItemData *pItemData)
 
static LRESULT BrFolder_Treeview_Delete (BrFolder *info, NMTREEVIEWW *pnmtv)
 
static LRESULT BrFolder_Treeview_Expand (BrFolder *info, NMTREEVIEWW *pnmtv)
 
static HRESULT BrFolder_Treeview_Changed (BrFolder *info, NMTREEVIEWW *pnmtv)
 
static LRESULT BrFolder_Treeview_Rename (BrFolder *info, NMTVDISPINFOW *pnmtv)
 
static HRESULT BrFolder_Rename (BrFolder *info, HTREEITEM hItem)
 
static void BrFolder_Delete (BrFolder *info, HTREEITEM hItem)
 
static void BrFolder_Refresh (_Inout_ BrFolder *info)
 
static LRESULT BrFolder_Treeview_Keydown (BrFolder *info, LPNMTVKEYDOWN keydown)
 
static LRESULT BrFolder_OnNotify (BrFolder *info, UINT CtlID, LPNMHDR lpnmh)
 
static BOOL BrFolder_OnInitDialog (HWND hWnd, BrFolder *info)
 
static HRESULT BrFolder_NewFolder (BrFolder *info)
 
static void BrFolder_OnOK (BrFolder *info)
 
static void BrFolder_OnCommand (BrFolder *info, UINT id)
 
static void GetTreeViewItemContextMenuPos (HWND hWnd, HTREEITEM hItem, POINT *ppt)
 
static void BrFolder_OnContextMenu (BrFolder &info, LPARAM lParam)
 
static BOOL BrFolder_ExpandToPidl (BrFolder *info, LPITEMIDLIST pidlSelection, HTREEITEM *phItem)
 
static BOOL BrFolder_ExpandToString (BrFolder *info, LPWSTR pszString, HTREEITEM *phItem)
 
static BOOL BrFolder_OnSetExpanded (BrFolder *info, LPITEMIDLIST pidlSelection, LPWSTR pszString)
 
static BOOL BrFolder_OnSetSelectionPidl (BrFolder *info, LPITEMIDLIST pidlSelection)
 
static BOOL BrFolder_OnSetSelectionW (BrFolder *info, LPWSTR pszSelection)
 
static BOOL BrFolder_OnSetSelectionA (BrFolder *info, LPSTR pszSelectionA)
 
static void BrFolder_OnDestroy (BrFolder *info)
 
static void BrFolder_RefreshRecurse (_Inout_ BrFolder *info, _In_ HTREEITEM hTarget)
 
static void BrFolder_OnChangeEx (_Inout_ BrFolder *info, _In_ PCIDLIST_ABSOLUTE pidl1, _In_ PCIDLIST_ABSOLUTE pidl2, _In_ LONG event)
 
static void BrFolder_OnChange (BrFolder *info, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK BrFolderDlgProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi)
 
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi)
 

Variables

static const LAYOUT_INFO g_layout_info []
 

Macro Definition Documentation

◆ SHV_CHANGE_NOTIFY

#define SHV_CHANGE_NOTIFY   (WM_USER + 0x1111)

Definition at line 20 of file brfolder.cpp.

◆ SUPPORTED_FLAGS

#define SUPPORTED_FLAGS
Value:
#define BIF_STATUSTEXT
Definition: shlobj.h:1227
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1225
#define BIF_RETURNFSANCESTORS
Definition: shlobj.h:1228
#define BIF_BROWSEINCLUDEFILES
Definition: shlobj.h:1240
#define BIF_NONEWFOLDERBUTTON
Definition: shlobj.h:1235
#define BIF_NEWDIALOGSTYLE
Definition: shlobj.h:1231
#define BIF_BROWSEFORCOMPUTER
Definition: shlobj.h:1238

Definition at line 69 of file brfolder.cpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SHGDN_TREE 

Definition at line 21 of file brfolder.cpp.

21{ SHGDN_TREE = SHGDN_NORMAL | SHGDN_INFOLDER };
@ SHGDN_TREE
Definition: brfolder.cpp:21

Function Documentation

◆ BrFolder_Callback()

static void BrFolder_Callback ( LPBROWSEINFOW  lpBrowseInfo,
HWND  hWnd,
UINT  uMsg,
LPARAM  lParam 
)
static

Definition at line 88 of file brfolder.cpp.

89{
90 if (!lpBrowseInfo->lpfn)
91 return;
92 lpBrowseInfo->lpfn(hWnd, uMsg, lParam, lpBrowseInfo->lParam);
93}
HWND hWnd
Definition: settings.c:17
LPARAM lParam
Definition: combotst.c:139
BFFCALLBACK lpfn
Definition: shlobj.h:1213
LPARAM lParam
Definition: shlobj.h:1214

Referenced by BrFolder_OnInitDialog(), and BrFolder_Treeview_Changed().

◆ BrFolder_CheckValidSelection()

static void BrFolder_CheckValidSelection ( BrFolder info,
BrItemData pItemData 
)
static

Definition at line 494 of file brfolder.cpp.

495{
496 LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo;
497 PCIDLIST_RELATIVE pidlChild = pItemData->pidlChild;
499 HRESULT hr;
500
501 BOOL bEnabled = TRUE;
502 if ((lpBrowseInfo->ulFlags & BIF_BROWSEFORCOMPUTER) && !PIDLIsType(pidlChild, PT_COMP))
503 bEnabled = FALSE;
504
505 if (lpBrowseInfo->ulFlags & BIF_RETURNFSANCESTORS)
506 {
507 dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM;
508 hr = pItemData->lpsfParent->GetAttributesOf(1, &pidlChild, &dwAttributes);
509 if (FAILED(hr) || !(dwAttributes & (SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM)))
510 bEnabled = FALSE;
511 }
512
513 dwAttributes = SFGAO_FOLDER | SFGAO_FILESYSTEM;
514 hr = pItemData->lpsfParent->GetAttributesOf(1, &pidlChild, &dwAttributes);
515 if (FAILED_UNEXPECTEDLY(hr) ||
516 ((dwAttributes & (SFGAO_FOLDER | SFGAO_FILESYSTEM)) != (SFGAO_FOLDER | SFGAO_FILESYSTEM)))
517 {
518 if (lpBrowseInfo->ulFlags & BIF_RETURNONLYFSDIRS)
519 bEnabled = FALSE;
521 }
522 else
523 {
525 }
526
527 SendMessageW(info->hWnd, BFFM_ENABLEOK, 0, bEnabled);
528}
static BOOL PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type)
Definition: brfolder.cpp:485
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define FAILED_UNEXPECTEDLY(hr)
Definition: debug.h:83
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define FAILED(hr)
Definition: intsafe.h:51
#define PT_COMP
Definition: pidl.h:99
HRESULT hr
Definition: shlfolder.c:183
#define BFFM_ENABLEOK
Definition: shlobj.h:1252
#define IDC_BROWSE_FOR_FOLDER_NEW_FOLDER
Definition: shresdef.h:461
PCIDLIST_RELATIVE pidlChild
Definition: brfolder.cpp:54
CComPtr< IShellFolder > lpsfParent
Definition: brfolder.cpp:53
UINT ulFlags
Definition: shlobj.h:1212
DWORD dwAttributes
Definition: vdmdbg.h:34
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by BrFolder_Treeview_Changed().

◆ BrFolder_Delete()

static void BrFolder_Delete ( BrFolder info,
HTREEITEM  hItem 
)
static

Definition at line 642 of file brfolder.cpp.

643{
645 if (!data || !BrFolder_GetItemAttributes(info, hItem, SFGAO_CANDELETE))
646 return;
648 if (FAILED(data->lpsfParent->GetUIObjectOf(info->hWnd, 1, &data->pidlChild, IID_NULL_PPV_ARG(IContextMenu, &pCM))))
649 return;
650 UINT fCMIC = 0;
651 if (GetKeyState(VK_SHIFT) < 0)
652 fCMIC |= CMIC_MASK_SHIFT_DOWN;
653 if (GetKeyState(VK_CONTROL) < 0)
654 fCMIC |= CMIC_MASK_CONTROL_DOWN;
655 SHInvokeCommandOnContextMenu(info->hWnd, NULL, pCM, fCMIC, "delete");
656}
static SFGAOF BrFolder_GetItemAttributes(BrFolder *info, HTREEITEM hItem, SFGAOF Query)
Definition: brfolder.cpp:109
static BrItemData * BrFolder_GetItemData(BrFolder *info, HTREEITEM hItem)
Definition: brfolder.cpp:96
#define NULL
Definition: types.h:112
EXTERN_C HRESULT WINAPI SHInvokeCommandOnContextMenu(_In_opt_ HWND hWnd, _In_opt_ IUnknown *pUnk, _In_ IContextMenu *pCM, _In_ UINT fCMIC, _In_opt_ LPCSTR pszVerb)
Definition: utils.cpp:150
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
unsigned int UINT
Definition: ndis.h:50
#define VK_CONTROL
Definition: winuser.h:2214
#define VK_SHIFT
Definition: winuser.h:2213
SHORT WINAPI GetKeyState(_In_ int)
#define IID_NULL_PPV_ARG(Itype, ppType)

Referenced by BrFolder_Treeview_Keydown().

◆ BrFolder_Expand()

static void BrFolder_Expand ( _In_ BrFolder info,
_In_ IShellFolder lpsf,
_In_ PCIDLIST_ABSOLUTE  pidlFull,
_In_ HTREEITEM  hParent 
)
static

Definition at line 453 of file brfolder.cpp.

458{
459 TRACE("%p %p %p\n", lpsf, pidlFull, hParent);
460
461 // No IEnumIDList -> No children
462 BrItemData *pItemData = BrFolder_GetItemData(info, hParent);
464 HRESULT hr = BrFolder_GetChildrenEnum(info, pItemData, &pEnum);
465 if (FAILED(hr))
466 return;
467
468 SetCapture(info->hWnd);
470
472 ULONG ulFetched;
473 while (S_OK == pEnum->Next(1, &pidlTemp, &ulFetched))
474 {
475 /* Ignore return value of BrFolder_InsertItem to avoid incomplete folder listing */
476 BrFolder_InsertItem(info, lpsf, pidlTemp, pidlFull, hParent);
477 pidlTemp.Free(); // Finally, free the pidl that the shell gave us...
478 }
479
482}
static HRESULT BrFolder_GetChildrenEnum(_In_ BrFolder *info, _In_ BrItemData *pItemData, _Outptr_opt_ IEnumIDList **ppEnum)
Definition: brfolder.cpp:118
static HTREEITEM BrFolder_InsertItem(_Inout_ BrFolder *info, _Inout_ IShellFolder *lpsf, _In_ PCUITEMID_CHILD pidlChild, _In_ PCIDLIST_ABSOLUTE pidlParent, _In_ HTREEITEM hParent)
Definition: brfolder.cpp:396
void Free()
Definition: atlalloc.h:153
#define S_OK
Definition: intsafe.h:52
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t ULONG
Definition: typedefs.h:59
HWND WINAPI SetCapture(_In_ HWND hWnd)
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
#define IDC_ARROW
Definition: winuser.h:695
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2442
#define IDC_WAIT
Definition: winuser.h:697
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by BrFolder_Treeview_Expand().

◆ BrFolder_ExpandToPidl()

static BOOL BrFolder_ExpandToPidl ( BrFolder info,
LPITEMIDLIST  pidlSelection,
HTREEITEM phItem 
)
static

Definition at line 1064 of file brfolder.cpp.

1065{
1066 LPITEMIDLIST pidlCurrent = pidlSelection;
1067 if (_ILIsDesktop(pidlSelection))
1068 {
1069 if (phItem)
1070 *phItem = TVI_ROOT;
1071 return TRUE;
1072 }
1073
1074 // Initialize item to point to the first child of the root folder.
1076 item.hItem = TreeView_GetRoot(info->hwndTreeView);
1077 if (item.hItem)
1078 item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem);
1079
1080 // Walk the tree along the nodes corresponding to the remaining ITEMIDLIST
1081 UINT depth = _ILGetDepth(info->lpBrowseInfo->pidlRoot);
1082 while (item.hItem && pidlCurrent)
1083 {
1084 LPITEMIDLIST pidlNeedle = ILCloneToDepth(pidlSelection, ++depth);
1085 if (_ILIsEmpty(pidlNeedle))
1086 {
1087 ILFree(pidlNeedle);
1088 item.hItem = NULL; // Failure
1089 break;
1090 }
1091next:
1092 TreeView_GetItem(info->hwndTreeView, &item);
1093 const BrItemData *pItemData = (BrItemData *)item.lParam;
1094 if (ILIsEqual(pItemData->pidlFull, pidlNeedle))
1095 {
1096 BOOL done = _ILGetDepth(pidlSelection) == _ILGetDepth(pidlNeedle);
1097 if (done)
1098 {
1099 pidlCurrent = NULL; // Success
1100 }
1101 else
1102 {
1103 TreeView_Expand(info->hwndTreeView, item.hItem, TVE_EXPAND);
1104 item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem);
1105 }
1106 }
1107 else
1108 {
1109 item.hItem = TreeView_GetNextSibling(info->hwndTreeView, item.hItem);
1110 if (item.hItem)
1111 goto next;
1112 }
1113 ILFree(pidlNeedle);
1114 }
1115
1116 if (phItem)
1117 *phItem = item.hItem;
1118
1119 return (_ILIsEmpty(pidlCurrent) && item.hItem);
1120}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
static LPITEMIDLIST ILCloneToDepth(LPCITEMIDLIST pidlSrc, UINT depth)
Definition: brfolder.cpp:24
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
if(dx< 0)
Definition: linetemp.h:194
static ATOM item
Definition: dde.c:856
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:582
UINT _ILGetDepth(LPCITEMIDLIST pidl)
static BOOL _ILIsEmpty(LPCITEMIDLIST pidl)
Definition: pidl.h:262
#define TreeView_Expand(hwnd, hitem, code)
Definition: commctrl.h:3425
#define TreeView_GetChild(hwnd, hitem)
Definition: commctrl.h:3471
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3495
#define TVE_EXPAND
Definition: commctrl.h:3428
#define TVI_ROOT
Definition: commctrl.h:3373
#define TreeView_GetRoot(hwnd)
Definition: commctrl.h:3480
#define TreeView_GetNextSibling(hwnd, hitem)
Definition: commctrl.h:3472
#define TVIF_PARAM
Definition: commctrl.h:3273
static unsigned __int64 next
Definition: rand_nt.c:6
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
CComHeapPtr< ITEMIDLIST_ABSOLUTE > pidlFull
Definition: brfolder.cpp:55

Referenced by BrFolder_ExpandToString(), BrFolder_OnSetExpanded(), and BrFolder_OnSetSelectionPidl().

◆ BrFolder_ExpandToString()

static BOOL BrFolder_ExpandToString ( BrFolder info,
LPWSTR  pszString,
HTREEITEM phItem 
)
static

Definition at line 1123 of file brfolder.cpp.

1124{
1126 HRESULT hr = SHParseDisplayName(pszString, NULL, &pidlSelection, 0, NULL);
1127 return SUCCEEDED(hr) && BrFolder_ExpandToPidl(info, pidlSelection, phItem);
1128}
static BOOL BrFolder_ExpandToPidl(BrFolder *info, LPITEMIDLIST pidlSelection, HTREEITEM *phItem)
Definition: brfolder.cpp:1064
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
Definition: pidl.c:1506
_In_ DWORD _In_ DWORD _Out_writes_to_opt_ pcchString LPSTR pszString
Definition: wincrypt.h:4505

Referenced by BrFolder_OnSetExpanded(), and BrFolder_OnSetSelectionW().

◆ BrFolder_FindTreeItemOfAbsoluteItem()

static HTREEITEM BrFolder_FindTreeItemOfAbsoluteItem ( _In_ BrFolder info,
_In_ PCIDLIST_ABSOLUTE  pidl,
_In_opt_ HTREEITEM  hItem = NULL 
)
static

Definition at line 304 of file brfolder.cpp.

308{
309 if (!hItem)
310 hItem = TreeView_GetRoot(info.hwndTreeView);
311
312 for (; pidl && hItem; hItem = TreeView_GetNextSibling(info.hwndTreeView, hItem))
313 {
315 if (ILIsEqual(pItemData->pidlFull, pidl))
316 return hItem;
319 return hChild;
320 }
321 return NULL;
322}
static HTREEITEM BrFolder_FindTreeItemOfAbsoluteItem(_In_ BrFolder &info, _In_ PCIDLIST_ABSOLUTE pidl, _In_opt_ HTREEITEM hItem=NULL)
Definition: brfolder.cpp:304
static HTREEITEM hChild
Definition: treeview.c:383
HTREEITEM hItem
Definition: treelist.h:37

Referenced by BrFolder_FindTreeItemOfAbsoluteItem(), and BrFolder_OnChangeEx().

◆ BrFolder_GetChildrenEnum()

static HRESULT BrFolder_GetChildrenEnum ( _In_ BrFolder info,
_In_ BrItemData pItemData,
_Outptr_opt_ IEnumIDList **  ppEnum 
)
static

Definition at line 118 of file brfolder.cpp.

122{
123 if (!pItemData)
124 return E_FAIL;
125
126 CComPtr<IEnumIDList> pEnumIL;
127 PCUITEMID_CHILD pidlRef = pItemData->pidlChild;
128 ULONG attrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER;
129 IShellFolder *lpsf = pItemData->lpsfParent;
130 HRESULT hr = lpsf->GetAttributesOf(1, &pidlRef, &attrs);
131 if (FAILED_UNEXPECTEDLY(hr) || !(attrs & SFGAO_FOLDER))
132 return E_FAIL;
133
134 CComPtr<IShellFolder> psfChild;
135 if (_ILIsDesktop(pItemData->pidlFull))
136 hr = SHGetDesktopFolder(&psfChild);
137 else
138 hr = lpsf->BindToObject(pidlRef, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
140 return E_FAIL;
141
142 DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags);
143 hr = psfChild->EnumObjects(info->hWnd, flags, &pEnumIL);
144 if (hr == S_OK)
145 {
146 if ((pEnumIL->Skip(1) != S_OK) || FAILED(pEnumIL->Reset()))
147 pEnumIL = NULL;
148 }
149
150 if (!pEnumIL || !(attrs & SFGAO_HASSUBFOLDER))
151 return E_FAIL; // No children
152
153 if (ppEnum)
154 *ppEnum = pEnumIL.Detach();
155
156 return S_OK; // There are children
157}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
static DWORD BrowseFlagsToSHCONTF(UINT ulFlags)
Definition: brfolder.cpp:82
T * Detach()
Definition: atlcomcli.h:186
#define E_FAIL
Definition: ddrawi.h:102
GLbitfield flags
Definition: glext.h:7161
HRESULT BindToObject([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
HRESULT GetAttributesOf([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
#define IID_PPV_ARG(Itype, ppType)

Referenced by BrFolder_Expand(), BrFolder_InsertItem(), BrFolder_RefreshRecurse(), and BrFolder_UpdateItemEx().

◆ BrFolder_GetIconPair()

static HRESULT BrFolder_GetIconPair ( BrItemData item,
TVITEMW tvi 
)
static

Definition at line 203 of file brfolder.cpp.

204{
205 INT open = -1;
206 INT normal = SHMapPIDLToSystemImageListIndex(item.lpsfParent, item.pidlChild, &open);
207 if (normal >= 0)
208 {
209 tvi.iImage = normal;
210 tvi.iSelectedImage = (open >= 0) ? open : normal;
211 return S_OK;
212 }
214 return S_FALSE;
215}
#define open
Definition: acwin.h:95
#define IDI_SHELL_FOLDER
Definition: treeview.c:21
INT WINAPI Shell_GetCachedImageIndexW(LPCWSTR szPath, INT nIndex, UINT Flags)
Definition: iconcache.cpp:831
WCHAR swShell32Name[MAX_PATH]
Definition: folders.cpp:22
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:772
@ normal
Definition: optimize.h:166
int iImage
Definition: commctrl.h:3327
int iSelectedImage
Definition: commctrl.h:3328
int32_t INT
Definition: typedefs.h:58
#define S_FALSE
Definition: winerror.h:2357

Referenced by BrFolder_InsertItem(), and BrFolder_UpdateItemEx().

◆ BrFolder_GetItemAttributes()

static SFGAOF BrFolder_GetItemAttributes ( BrFolder info,
HTREEITEM  hItem,
SFGAOF  Query 
)
static

Definition at line 109 of file brfolder.cpp.

110{
112 SFGAOF Att = Query;
113 HRESULT hr = item ? item->lpsfParent->GetAttributesOf(1, &item->pidlChild, &Att) : E_FAIL;
114 return SUCCEEDED(hr) ? (Query & Att) : 0;
115}
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
Definition: query.c:292
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83

Referenced by BrFolder_Delete(), BrFolder_OnNotify(), and BrFolder_Treeview_Rename().

◆ BrFolder_GetItemData()

static BrItemData * BrFolder_GetItemData ( BrFolder info,
HTREEITEM  hItem 
)
static

Definition at line 96 of file brfolder.cpp.

97{
99 item.hItem = hItem;
100 if (!TreeView_GetItem(info->hwndTreeView, &item))
101 {
102 ERR("TreeView_GetItem failed\n");
103 return NULL;
104 }
105 return (BrItemData *)item.lParam;
106}
#define ERR(fmt,...)
Definition: precomp.h:57
#define TVIF_HANDLE
Definition: commctrl.h:3275

Referenced by BrFolder_Delete(), BrFolder_Expand(), BrFolder_FindTreeItemOfAbsoluteItem(), BrFolder_GetItemAttributes(), BrFolder_GetName(), BrFolder_IsTreeItemInEnum(), BrFolder_OnContextMenu(), BrFolder_RefreshRecurse(), BrFolder_TreeItemHasThisChild(), BrFolder_Treeview_Rename(), and BrFolder_UpdateItemEx().

◆ BrFolder_GetName() [1/2]

static BOOL BrFolder_GetName ( _In_ BrFolder info,
_In_ HTREEITEM  hItem,
_In_ UINT  Flags,
_Out_ PWSTR  Buffer 
)
static

Definition at line 251 of file brfolder.cpp.

256{
258 return BrFolder_GetName(item->lpsfParent, item->pidlChild, Flags, Buffer);
259 return FALSE;
260}
static BOOL BrFolder_GetName(_In_ IShellFolder *lpsf, _In_ PCIDLIST_RELATIVE pidlChild, _In_ DWORD dwFlags, _Out_ PWSTR lpFriendlyName)
Definition: brfolder.cpp:233
Definition: bufpool.h:45
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

◆ BrFolder_GetName() [2/2]

static BOOL BrFolder_GetName ( _In_ IShellFolder lpsf,
_In_ PCIDLIST_RELATIVE  pidlChild,
_In_ DWORD  dwFlags,
_Out_ PWSTR  lpFriendlyName 
)
static

Definition at line 233 of file brfolder.cpp.

238{
239 BOOL bSuccess = FALSE;
240 STRRET str;
241
242 TRACE("%p %p %x %p\n", lpsf, pidlChild, dwFlags, lpFriendlyName);
243 if (!FAILED_UNEXPECTEDLY(lpsf->GetDisplayNameOf(pidlChild, dwFlags, &str)))
244 bSuccess = StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, pidlChild);
245
246 TRACE("-- %s\n", debugstr_w(lpFriendlyName));
247 return bSuccess;
248}
#define MAX_PATH
Definition: compat.h:34
#define debugstr_w
Definition: kernel32.h:32
const WCHAR * str
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:85
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

Referenced by BrFolder_GetName(), BrFolder_InsertItem(), BrFolder_OnNotify(), BrFolder_Treeview_Changed(), and BrFolder_UpdateItemEx().

◆ BrFolder_InitTreeView()

static void BrFolder_InitTreeView ( BrFolder info)
static

Definition at line 165 of file brfolder.cpp.

166{
167 HIMAGELIST hImageList;
168 HRESULT hr;
170
171 Shell_GetImageLists(NULL, &hImageList);
172 if (hImageList)
173 TreeView_SetImageList(info->hwndTreeView, hImageList, 0);
174
175 /* We want to call BrFolder_InsertItem down the code, in order to insert
176 * the root item of the treeview. Due to BrFolder_InsertItem's signature,
177 * we need the following to do this:
178 *
179 * + An ITEMIDLIST corresponding to _the parent_ of root.
180 * + An ITEMIDLIST, which is a relative path from root's parent to root
181 * (containing a single SHITEMID).
182 * + An IShellFolder interface pointer of root's parent folder.
183 *
184 * If root is 'Desktop', then root's parent is also 'Desktop'.
185 */
186
187 PCIDLIST_ABSOLUTE pidlRoot = info->lpBrowseInfo->pidlRoot;
188 CComHeapPtr<ITEMIDLIST_ABSOLUTE> pidlParent(ILClone(pidlRoot));
189 ILRemoveLastID(pidlParent);
190 PCIDLIST_RELATIVE pidlChild = ILFindLastID(pidlRoot);
191
192 CComPtr<IShellFolder> lpsfParent;
193 hr = SHBindToObject(NULL, pidlParent, /*NULL, */ IID_PPV_ARG(IShellFolder, &lpsfParent));
195 return;
196
197 TreeView_DeleteItem(info->hwndTreeView, TVI_ROOT);
198 hItem = BrFolder_InsertItem(info, lpsfParent, pidlChild, pidlParent, TVI_ROOT);
199 TreeView_Expand(info->hwndTreeView, hItem, TVE_EXPAND);
200}
EXTERN_C HRESULT SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:370
BOOL WINAPI Shell_GetImageLists(HIMAGELIST *lpBigList, HIMAGELIST *lpSmallList)
Definition: iconcache.cpp:689
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:198
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:221
#define TreeView_SetImageList(hwnd, himl, iImage)
Definition: commctrl.h:3452
#define TreeView_DeleteItem(hwnd, hitem)
Definition: commctrl.h:3420

Referenced by BrFolder_OnInitDialog().

◆ BrFolder_InsertItem()

static HTREEITEM BrFolder_InsertItem ( _Inout_ BrFolder info,
_Inout_ IShellFolder lpsf,
_In_ PCUITEMID_CHILD  pidlChild,
_In_ PCIDLIST_ABSOLUTE  pidlParent,
_In_ HTREEITEM  hParent 
)
static

Definition at line 396 of file brfolder.cpp.

402{
403 if (!(BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags) & SHCONTF_NONFOLDERS))
404 {
405#ifdef BIF_BROWSEFILEJUNCTIONS
406 if (!(info->lpBrowseInfo->ulFlags & BIF_BROWSEFILEJUNCTIONS))
407#endif
408 if (SHGetAttributes(lpsf, pidlChild, SFGAO_STREAM) & SFGAO_STREAM)
409 return NULL; // .zip files have both FOLDER and STREAM attributes set
410 }
411
413 if (!BrFolder_GetName(lpsf, pidlChild, SHGDN_TREE, szName))
414 return NULL;
415
416 BrItemData *pItemData = new BrItemData();
417
419 item.pszText = szName;
420 item.cchTextMax = _countof(szName);
421 item.lParam = (LPARAM)pItemData;
422
423 PIDLIST_ABSOLUTE pidlFull =
424 (pidlParent ? ILCombine(pidlParent, pidlChild) : ILClone(pidlChild));
425
426 pItemData->lpsfParent = lpsf;
427 pItemData->pidlFull.Attach(pidlFull);
428 pItemData->pidlChild = ILFindLastID(pItemData->pidlFull);
429 BrFolder_GetIconPair(*pItemData, item);
430
431 if (BrFolder_GetChildrenEnum(info, pItemData, NULL) == S_OK)
432 item.cChildren = 1;
433
434 TVINSERTSTRUCTW tvins = { hParent };
435 tvins.item = item;
436 return TreeView_InsertItem(info->hwndTreeView, &tvins);
437}
static HRESULT BrFolder_GetIconPair(BrItemData &item, TVITEMW &tvi)
Definition: brfolder.cpp:203
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:425
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:816
static const WCHAR szName[]
Definition: powrprof.c:45
#define TVIF_TEXT
Definition: commctrl.h:3271
#define TVIF_IMAGE
Definition: commctrl.h:3272
#define TVIF_CHILDREN
Definition: commctrl.h:3277
#define TreeView_InsertItem(hwnd, lpis)
Definition: commctrl.h:3417
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3276
#define _countof(array)
Definition: sndvol32.h:70
LONG_PTR LPARAM
Definition: windef.h:208
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by BrFolder_Expand(), BrFolder_InitTreeView(), BrFolder_NewFolder(), and BrFolder_RefreshRecurse().

◆ BrFolder_IsTreeItemInEnum()

static BOOL BrFolder_IsTreeItemInEnum ( _Inout_ BrFolder info,
_In_ HTREEITEM  hItem,
_Inout_ IEnumIDList pEnum 
)
static

Definition at line 263 of file brfolder.cpp.

267{
269 if (!pItemData)
270 return FALSE;
271
272 pEnum->Reset();
273
275 while (pEnum->Next(1, &pidlTemp, NULL) == S_OK)
276 {
277 if (ILIsEqual(pidlTemp, pItemData->pidlChild))
278 return TRUE;
279
280 pidlTemp.Free();
281 }
282
283 return FALSE;
284}

Referenced by BrFolder_RefreshRecurse().

◆ BrFolder_NewFolder()

static HRESULT BrFolder_NewFolder ( BrFolder info)
static

Definition at line 853 of file brfolder.cpp.

854{
855 CComPtr<IShellFolder> desktop, cur;
856 WCHAR wszNewFolder[25], path[MAX_PATH], name[MAX_PATH];
857
858 HRESULT hr = SHGetDesktopFolder(&desktop);
860 return hr;
861
862 if (info->pidlRet)
863 {
864 hr = desktop->BindToObject(info->pidlRet, NULL, IID_PPV_ARG(IShellFolder, &cur));
866 return hr;
867
868 hr = SHGetPathFromIDListW(info->pidlRet, path);
869 }
870 else
871 {
872 cur = desktop;
874 }
875
877 return hr;
878
879 hr = E_FAIL;
880 if (!LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, _countof(wszNewFolder)))
881 return hr;
882
883 if (!PathYetAnotherMakeUniqueName(name, path, NULL, wszNewFolder))
884 return hr;
885
886 INT len = lstrlenW(path);
887 if (len < MAX_PATH && name[len] == L'\\')
888 len++;
889
891 return hr;
892
893 // Update parent of newly created directory
894 HTREEITEM hParent = TreeView_GetSelection(info->hwndTreeView);
895 if (!hParent)
896 return hr;
897
898 TreeView_Expand(info->hwndTreeView, hParent, TVE_EXPAND);
899
901 item.hItem = hParent;
902 TreeView_GetItem(info->hwndTreeView, &item);
903 BrItemData *item_data = (BrItemData *)item.lParam;
904 if (!item_data)
905 return hr;
906
907 // Update treeview
908 if (!(item.state & TVIS_EXPANDEDONCE))
909 {
910 item.mask = TVIF_STATE;
911 item.state = item.stateMask = TVIS_EXPANDEDONCE;
912 TreeView_SetItem(info->hwndTreeView, &item);
913 }
914
916 hr = cur->ParseDisplayName(NULL, NULL, name + len, NULL, &pidlNew, NULL);
918 return hr;
919
920 HTREEITEM hAdded = BrFolder_InsertItem(info, cur, pidlNew, item_data->pidlFull, hParent);
921 TreeView_SortChildren(info->hwndTreeView, hParent, FALSE);
922 return BrFolder_Rename(info, hAdded);
923}
#define shell32_hInstance
static HRESULT BrFolder_Rename(BrFolder *info, HTREEITEM hItem)
Definition: brfolder.cpp:634
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2740
BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR buffer, LPCWSTR path, LPCWSTR shortname, LPCWSTR longname)
Definition: shellpath.c:848
#define IDS_NEWFOLDER
FxCollectionEntry * cur
GLenum GLsizei len
Definition: glext.h:6722
#define L(x)
Definition: ntvdm.h:50
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
#define TreeView_SortChildren(hwnd, hitem, recurse)
Definition: commctrl.h:3547
#define TVIS_EXPANDEDONCE
Definition: commctrl.h:3290
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3478
#define TreeView_SetItem(hwnd, pitem)
Definition: commctrl.h:3502
#define TVIF_STATE
Definition: commctrl.h:3274
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2196
@ SHGFP_TYPE_CURRENT
Definition: shlobj.h:2157
Definition: name.c:39
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)

Referenced by BrFolder_OnCommand().

◆ BrFolder_OnChange()

static void BrFolder_OnChange ( BrFolder info,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1307 of file brfolder.cpp.

1308{
1309 // We use SHCNRF_NewDelivery method
1310 HANDLE hChange = (HANDLE)wParam;
1311 DWORD dwProcID = (DWORD)lParam;
1312
1313 PIDLIST_ABSOLUTE *ppidl = NULL;
1314 LONG event;
1315 HANDLE hLock = SHChangeNotification_Lock(hChange, dwProcID, &ppidl, &event);
1316 if (hLock == NULL)
1317 {
1318 ERR("hLock == NULL\n");
1319 return;
1320 }
1321
1322 BrFolder_OnChangeEx(info, ppidl[0], ppidl[1], (event & ~SHCNE_INTERRUPT));
1323
1325}
static void BrFolder_OnChangeEx(_Inout_ BrFolder *info, _In_ PCIDLIST_ABSOLUTE pidl1, _In_ PCIDLIST_ABSOLUTE pidl2, _In_ LONG event)
Definition: brfolder.cpp:1257
EXTERN_C HANDLE WINAPI SHChangeNotification_Lock(HANDLE hTicket, DWORD dwOwnerPID, LPITEMIDLIST **lppidls, LPLONG lpwEventId)
EXTERN_C BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock)
WPARAM wParam
Definition: combotst.c:138
struct _cl_event * event
Definition: glext.h:7739
#define DWORD
Definition: nt_native.h:44
long LONG
Definition: pedump.c:60
#define SHCNE_INTERRUPT
Definition: shlobj.h:1923
PVOID HANDLE
Definition: typedefs.h:73

Referenced by BrFolderDlgProc().

◆ BrFolder_OnChangeEx()

static void BrFolder_OnChangeEx ( _Inout_ BrFolder info,
_In_ PCIDLIST_ABSOLUTE  pidl1,
_In_ PCIDLIST_ABSOLUTE  pidl2,
_In_ LONG  event 
)
static

Definition at line 1257 of file brfolder.cpp.

1262{
1263 TRACE("(%p)->(%p, %p, 0x%lX)\n", info, pidl1, pidl2, event);
1264
1265 switch (event)
1266 {
1267 case SHCNE_RENAMEFOLDER:
1268 case SHCNE_RENAMEITEM:
1269 case SHCNE_UPDATEITEM:
1270 {
1271 UINT UpdateFlags = (event == SHCNE_UPDATEITEM) ? (TVIF_IMAGE | TVIF_CHILDREN) : (TVIF_TEXT);
1273 {
1274 if (BrFolder_UpdateItemEx(*info, hTI, pidl2, UpdateFlags))
1275 {
1276 if ((hTI = TreeView_GetParent(info->hwndTreeView, hTI)) != NULL)
1277 TreeView_SortChildren(info->hwndTreeView, hTI, FALSE);
1278 return;
1279 }
1280 }
1281 break;
1282 }
1283 }
1284
1285 switch (event)
1286 {
1287 case SHCNE_DRIVEADD:
1288 case SHCNE_MKDIR:
1289 case SHCNE_CREATE:
1290 case SHCNE_DRIVEREMOVED:
1291 case SHCNE_RMDIR:
1292 case SHCNE_DELETE:
1293 case SHCNE_RENAMEFOLDER:
1294 case SHCNE_RENAMEITEM:
1295 case SHCNE_UPDATEDIR:
1296 case SHCNE_UPDATEITEM:
1297 {
1298 // FIXME: Avoid full refresh and optimize for speed. Use pidl0 and pidl1
1300 break;
1301 }
1302 }
1303}
static void BrFolder_Refresh(_Inout_ BrFolder *info)
Definition: brfolder.cpp:1244
static BOOL BrFolder_UpdateItemEx(_In_ BrFolder &info, _In_ HTREEITEM hItem, _In_opt_ PCIDLIST_ABSOLUTE pidlFull, _In_ UINT Flags=TVIF_TEXT|TVIF_IMAGE|TVIF_CHILDREN)
Definition: brfolder.cpp:325
#define TreeView_GetParent(hwnd, hitem)
Definition: commctrl.h:3474
#define SHCNE_DRIVEREMOVED
Definition: shlobj.h:1905
#define SHCNE_RMDIR
Definition: shlobj.h:1902
#define SHCNE_DELETE
Definition: shlobj.h:1900
#define SHCNE_MKDIR
Definition: shlobj.h:1901
#define SHCNE_UPDATEITEM
Definition: shlobj.h:1911
#define SHCNE_RENAMEITEM
Definition: shlobj.h:1898
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1910
#define SHCNE_CREATE
Definition: shlobj.h:1899
#define SHCNE_RENAMEFOLDER
Definition: shlobj.h:1915
#define SHCNE_DRIVEADD
Definition: shlobj.h:1906

Referenced by BrFolder_OnChange().

◆ BrFolder_OnCommand()

static void BrFolder_OnCommand ( BrFolder info,
UINT  id 
)
static

Definition at line 958 of file brfolder.cpp.

959{
960 switch (id)
961 {
962 case IDOK:
963 {
965 EndDialog(info->hWnd, IDOK);
966 break;
967 }
968 case IDCANCEL:
969 {
970 EndDialog(info->hWnd, IDCANCEL);
971 break;
972 }
974 {
976 break;
977 }
978 }
979}
static HRESULT BrFolder_NewFolder(BrFolder *info)
Definition: brfolder.cpp:853
static void BrFolder_OnOK(BrFolder *info)
Definition: brfolder.cpp:926
#define IDCANCEL
Definition: winuser.h:842
#define IDOK
Definition: winuser.h:841
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)

Referenced by BrFolderDlgProc().

◆ BrFolder_OnContextMenu()

static void BrFolder_OnContextMenu ( BrFolder info,
LPARAM  lParam 
)
static

Definition at line 994 of file brfolder.cpp.

995{
996 enum { IDC_TOGGLE = 1, ID_FIRSTCMD, ID_LASTCMD = 0xffff };
997 HTREEITEM hSelected = TreeView_GetSelection(info.hwndTreeView);
998 CMINVOKECOMMANDINFOEX ici = { sizeof(ici), CMIC_MASK_PTINVOKE, info.hWnd };
999 ici.nShow = SW_SHOW;
1000 ici.ptInvoke.x = GET_X_LPARAM(lParam);
1001 ici.ptInvoke.y = GET_Y_LPARAM(lParam);
1002 if ((int)lParam == -1) // Keyboard
1003 {
1004 GetTreeViewItemContextMenuPos(info.hwndTreeView, hSelected, &ici.ptInvoke);
1005 }
1006 else // Get correct item for right-click on not current item
1007 {
1008 TVHITTESTINFO hti = { ici.ptInvoke };
1009 ScreenToClient(info.hwndTreeView, &hti.pt);
1010 hSelected = TreeView_HitTest(info.hwndTreeView, &hti);
1011 }
1012 BrItemData *item = BrFolder_GetItemData(&info, hSelected);
1013 if (!item)
1014 return; // Not on an item
1015
1016 TV_ITEM tvi;
1017 tvi.mask = TVIF_STATE | TVIF_CHILDREN;
1018 tvi.stateMask = TVIS_EXPANDED;
1019 tvi.hItem = hSelected;
1020 TreeView_GetItem(info.hwndTreeView, &tvi);
1021
1023 HRESULT hr = item->lpsfParent->GetUIObjectOf(info.hWnd, 1, &item->pidlChild,
1024 IID_IContextMenu, NULL, (void**)&pcm);
1025 if (FAILED(hr))
1026 return;
1027
1028 HMENU hMenu = CreatePopupMenu();
1029 if (!hMenu)
1030 return;
1031 info.pContextMenu = pcm;
1032 UINT cmf = ((GetKeyState(VK_SHIFT) < 0) ? CMF_EXTENDEDVERBS : 0) | CMF_CANRENAME;
1033 hr = pcm->QueryContextMenu(hMenu, 0, ID_FIRSTCMD, ID_LASTCMD, CMF_EXPLORE | cmf);
1034 if (hr > 0)
1035 _InsertMenuItemW(hMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, 0);
1036 _InsertMenuItemW(hMenu, 0, TRUE, IDC_TOGGLE, MFT_STRING,
1038 MFS_DEFAULT | (tvi.cChildren ? 0 : MFS_GRAYED));
1039
1040 UINT cmd = TrackPopupMenuEx(hMenu, TPM_RETURNCMD, ici.ptInvoke.x, ici.ptInvoke.y, info.hWnd, NULL);
1041 ici.lpVerb = MAKEINTRESOURCEA(cmd - ID_FIRSTCMD);
1042 if (cmd == IDC_TOGGLE)
1043 {
1044 TreeView_SelectItem(info.hwndTreeView, hSelected);
1045 TreeView_Expand(info.hwndTreeView, hSelected, TVE_TOGGLE);
1046 }
1047 else if (cmd != 0 && GetDfmCmd(pcm, ici.lpVerb) == DFM_CMD_RENAME)
1048 {
1049 BrFolder_Rename(&info, hSelected);
1050 }
1051 else if (cmd != 0)
1052 {
1053 if (GetKeyState(VK_SHIFT) < 0)
1054 ici.fMask |= CMIC_MASK_SHIFT_DOWN;
1055 if (GetKeyState(VK_CONTROL) < 0)
1056 ici.fMask |= CMIC_MASK_CONTROL_DOWN;
1057 pcm->InvokeCommand((CMINVOKECOMMANDINFO*)&ici);
1058 }
1059 info.pContextMenu = NULL;
1060 DestroyMenu(hMenu);
1061}
#define IDS_COLLAPSE
Definition: resource.h:144
#define IDS_EXPAND
Definition: resource.h:143
static void GetTreeViewItemContextMenuPos(HWND hWnd, HTREEITEM hItem, POINT *ppt)
Definition: brfolder.cpp:982
UINT GetDfmCmd(_In_ IContextMenu *pCM, _In_ LPCSTR verba)
Definition: utils.cpp:1736
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
#define TreeView_SelectItem(hwnd, hitem)
Definition: commctrl.h:3486
#define TVE_TOGGLE
Definition: commctrl.h:3429
#define TV_ITEM
Definition: commctrl.h:3305
#define TVIS_EXPANDED
Definition: commctrl.h:3289
#define TreeView_HitTest(hwnd, lpht)
Definition: commctrl.h:3518
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
#define DFM_CMD_RENAME
Definition: shlobj.h:2628
Definition: ftp_var.h:139
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define MFT_SEPARATOR
Definition: winuser.h:755
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
#define MFS_DEFAULT
Definition: winuser.h:759
#define MFS_GRAYED
Definition: winuser.h:762
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MFT_STRING
Definition: winuser.h:757
#define SW_SHOW
Definition: winuser.h:786
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define TPM_RETURNCMD
Definition: winuser.h:2398
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)

Referenced by BrFolderDlgProc().

◆ BrFolder_OnDestroy()

static void BrFolder_OnDestroy ( BrFolder info)
static

Definition at line 1186 of file brfolder.cpp.

1187{
1188 if (info->layout)
1189 {
1190 LayoutDestroy(info->layout);
1191 info->layout = NULL;
1192 }
1193
1194 SHChangeNotifyDeregister(info->hChangeNotify);
1195}
EXTERN_C BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
static __inline void LayoutDestroy(LAYOUT_DATA *pData)
Definition: layout.h:252

Referenced by BrFolderDlgProc().

◆ BrFolder_OnInitDialog()

static BOOL BrFolder_OnInitDialog ( HWND  hWnd,
BrFolder info 
)
static

Definition at line 749 of file brfolder.cpp.

750{
753 LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo;
754
755 info->hWnd = hWnd;
757
758 if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)
759 FIXME("flags BIF_NEWDIALOGSTYLE partially implemented\n");
760
761 if (lpBrowseInfo->ulFlags & ~SUPPORTED_FLAGS)
762 FIXME("flags %x not implemented\n", (lpBrowseInfo->ulFlags & ~SUPPORTED_FLAGS));
763
764 info->layout = NULL;
765 if (lpBrowseInfo->ulFlags & BIF_USENEWUI)
766 {
767 RECT rcWnd;
768
769 // Resize the treeview if there's not editbox
770 if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) &&
771 !(lpBrowseInfo->ulFlags & BIF_EDITBOX))
772 {
773 RECT rcEdit, rcTreeView;
776 LONG cy = rcTreeView.top - rcEdit.top;
777 MapWindowPoints(NULL, hWnd, (LPPOINT)&rcTreeView, sizeof(RECT) / sizeof(POINT));
778 rcTreeView.top -= cy;
780 rcTreeView.left, rcTreeView.top,
781 rcTreeView.right - rcTreeView.left,
782 rcTreeView.bottom - rcTreeView.top, TRUE);
783 }
784
785 if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)
787
788 // TODO: Windows allows shrinking the windows a bit
789 GetWindowRect(hWnd, &rcWnd);
790 info->szMin.cx = rcWnd.right - rcWnd.left;
791 info->szMin.cy = rcWnd.bottom - rcWnd.top;
792 }
793
794 if (lpBrowseInfo->lpszTitle)
796 else
798
799 if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT) || (lpBrowseInfo->ulFlags & BIF_USENEWUI))
801
802 // Hide "Make New Folder" Button?
803 if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON) ||
804 !(lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE))
805 {
807 }
808
809 // Hide the editbox?
810 if (!(lpBrowseInfo->ulFlags & BIF_EDITBOX))
811 {
814 }
815
817 if (info->hwndTreeView)
819 else
820 ERR("treeview control missing!\n");
821
822 // Register for change notifications
823 SHGetFolderLocation(NULL, CSIDL_DESKTOP, NULL, 0, &pidlDesktop);
824
825 ntreg.pidl = pidlDesktop;
826 ntreg.fRecursive = TRUE;
827 info->hChangeNotify = SHChangeNotifyRegister(hWnd,
830 SHV_CHANGE_NOTIFY, 1, &ntreg);
831
832 if (!lpBrowseInfo->pidlRoot)
833 {
834 UINT csidl = (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) ? CSIDL_PERSONAL : CSIDL_DRIVES;
836 if (pidl)
837 {
839 if (csidl == CSIDL_DRIVES)
841 ILFree(pidl);
842 }
843 }
844
845 BrFolder_Callback(info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0);
846
849 return TRUE;
850}
#define FIXME(fmt,...)
Definition: precomp.h:53
static void BrFolder_Callback(LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT uMsg, LPARAM lParam)
Definition: brfolder.cpp:88
static const LAYOUT_INFO g_layout_info[]
Definition: brfolder.cpp:58
#define SHV_CHANGE_NOTIFY
Definition: brfolder.cpp:20
#define SUPPORTED_FLAGS
Definition: brfolder.cpp:69
static void BrFolder_InitTreeView(BrFolder *info)
Definition: brfolder.cpp:165
EXTERN_C ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, INT fSources, LONG wEventMask, UINT uMsg, INT cItems, SHChangeNotifyEntry *lpItems)
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3301
static __inline LAYOUT_DATA * LayoutInit(HWND hwndParent, const LAYOUT_INFO *pLayouts, INT cLayouts)
Definition: layout.h:207
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, int nFolder, BOOL fCreate)
Definition: pidl.c:445
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
#define CSIDL_PERSONAL
Definition: shlobj.h:2186
#define BFFM_SETEXPANDED
Definition: shlobj.h:1257
#define BFFM_SETSELECTION
Definition: shlobj.h:1264
#define BIF_USENEWUI
Definition: shlobj.h:1232
#define SHCNRF_NewDelivery
Definition: shlobj.h:1946
#define SHCNRF_ShellLevel
Definition: shlobj.h:1944
#define CSIDL_DESKTOP
Definition: shlobj.h:2181
#define BFFM_INITIALIZED
Definition: shlobj.h:1244
#define SHCNE_ALLEVENTS
Definition: shlobj.h:1922
#define CSIDL_DRIVES
Definition: shlobj.h:2197
#define BIF_EDITBOX
Definition: shlobj.h:1229
HRESULT WINAPI SHAutoComplete(HWND hwndEdit, DWORD dwFlags)
Definition: autocomp.cpp:191
#define SHACF_FILESYSTEM
Definition: shlwapi.h:1957
#define SHACF_URLHISTORY
Definition: shlwapi.h:1958
#define SHACF_FILESYS_ONLY
Definition: shlwapi.h:1962
#define IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT
Definition: shresdef.h:462
#define IDC_BROWSE_FOR_FOLDER_TREEVIEW
Definition: shresdef.h:466
#define IDC_BROWSE_FOR_FOLDER_STATUS
Definition: shresdef.h:464
#define IDC_BROWSE_FOR_FOLDER_TITLE
Definition: shresdef.h:465
#define IDC_BROWSE_FOR_FOLDER_FOLDER
Definition: shresdef.h:463
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1894
PCIDLIST_ABSOLUTE pidlRoot
Definition: shlobj.h:1209
LPCWSTR lpszTitle
Definition: shlobj.h:1211
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define SW_HIDE
Definition: winuser.h:779
#define DWLP_USER
Definition: winuser.h:883
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define SetWindowLongPtrW
Definition: winuser.h:5366
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)

Referenced by BrFolderDlgProc().

◆ BrFolder_OnNotify()

static LRESULT BrFolder_OnNotify ( BrFolder info,
UINT  CtlID,
LPNMHDR  lpnmh 
)
static

Definition at line 694 of file brfolder.cpp.

695{
696 NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh;
697
698 TRACE("%p %x %p msg=%x\n", info, CtlID, lpnmh, pnmtv->hdr.code);
699
701 return 0;
702
703 switch (pnmtv->hdr.code)
704 {
705 case TVN_DELETEITEMA:
706 case TVN_DELETEITEMW:
707 return BrFolder_Treeview_Delete(info, pnmtv);
708
711 return BrFolder_Treeview_Expand(info, pnmtv);
712
713 case TVN_SELCHANGEDA:
714 case TVN_SELCHANGEDW:
715 return BrFolder_Treeview_Changed(info, pnmtv);
716
719 {
720 HWND hWndEdit = TreeView_GetEditControl(lpnmh->hwndFrom);
721 NMTVDISPINFO &tvdi = *(NMTVDISPINFO*)lpnmh;
722 UINT att = BrFolder_GetItemAttributes(info, tvdi.item.hItem, SFGAO_CANRENAME);
723 if (!(att & SFGAO_CANRENAME))
724 {
725 MessageBeep(0xffffffff);
726 return S_FALSE;
727 }
729 if (BrFolder_GetName(info, tvdi.item.hItem, SHGDN_INFOLDER | SHGDN_FOREDITING, Name))
730 SetWindowTextW(hWndEdit, Name);
731 return S_OK;
732 }
733
736
737 case TVN_KEYDOWN:
739
740 default:
741 WARN("unhandled (%d)\n", pnmtv->hdr.code);
742 break;
743 }
744
745 return 0;
746}
#define WARN(fmt,...)
Definition: precomp.h:61
static LRESULT BrFolder_Treeview_Expand(BrFolder *info, NMTREEVIEWW *pnmtv)
Definition: brfolder.cpp:542
static HRESULT BrFolder_Treeview_Changed(BrFolder *info, NMTREEVIEWW *pnmtv)
Definition: brfolder.cpp:576
static LRESULT BrFolder_Treeview_Keydown(BrFolder *info, LPNMTVKEYDOWN keydown)
Definition: brfolder.cpp:662
static LRESULT BrFolder_Treeview_Rename(BrFolder *info, NMTVDISPINFOW *pnmtv)
Definition: brfolder.cpp:593
static LRESULT BrFolder_Treeview_Delete(BrFolder *info, NMTREEVIEWW *pnmtv)
Definition: brfolder.cpp:531
LPWSTR Name
Definition: desk.c:124
#define TVN_KEYDOWN
Definition: commctrl.h:3718
#define TVN_ITEMEXPANDINGA
Definition: commctrl.h:3704
#define NMTVDISPINFO
Definition: commctrl.h:3680
#define TreeView_GetEditControl(hwnd)
Definition: commctrl.h:3512
#define TVN_BEGINLABELEDITA
Definition: commctrl.h:3714
#define TVN_SELCHANGEDW
Definition: commctrl.h:3653
#define TVN_DELETEITEMA
Definition: commctrl.h:3712
#define TVN_ITEMEXPANDINGW
Definition: commctrl.h:3705
#define TVN_BEGINLABELEDITW
Definition: commctrl.h:3715
#define TVN_SELCHANGEDA
Definition: commctrl.h:3652
#define TVN_ENDLABELEDITW
Definition: commctrl.h:3717
#define TVN_DELETEITEMW
Definition: commctrl.h:3713
UINT_PTR idFrom
Definition: winuser.h:3169
UINT code
Definition: winuser.h:3170
HWND hwndFrom
Definition: winuser.h:3168
BOOL WINAPI MessageBeep(_In_ UINT uType)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)

Referenced by BrFolderDlgProc().

◆ BrFolder_OnOK()

static void BrFolder_OnOK ( BrFolder info)
static

Definition at line 926 of file brfolder.cpp.

927{
928 // Get the text
931 StrTrimW(szPath, L" \t");
932
933 // The original pidl is owned by the treeview and will be free'd.
935 info->pidlRet = ILCreateFromPathW(szPath); // It's valid path
936 else
937 info->pidlRet = ILClone(info->pidlRet);
938
939 if (!info->pidlRet) // A null pidl would mean a cancel
940 info->pidlRet = _ILCreateDesktop();
941
942 pdump(info->pidlRet);
943
944 LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo;
945 if (!lpBrowseInfo->pszDisplayName)
946 return;
947
948 SHFILEINFOW fileInfo = { NULL };
949 lpBrowseInfo->pszDisplayName[0] = UNICODE_NULL;
950 if (SHGetFileInfoW((LPCWSTR)info->pidlRet, 0, &fileInfo, sizeof(fileInfo),
952 {
953 lstrcpynW(lpBrowseInfo->pszDisplayName, fileInfo.szDisplayName, MAX_PATH);
954 }
955}
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:322
#define lstrcpynW
Definition: compat.h:738
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1729
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
Definition: path.c:1585
BOOL WINAPI StrTrimW(LPWSTR lpszStr, LPCWSTR lpszTrim)
Definition: string.c:1883
LPCWSTR szPath
Definition: env.c:37
#define UNICODE_NULL
LPITEMIDLIST _ILCreateDesktop(void)
Definition: pidl.c:1752
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
Definition: pidl.c:1101
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:430
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:167
#define SHGFI_PIDL
Definition: shellapi.h:181
WCHAR szDisplayName[MAX_PATH]
Definition: shellapi.h:376
LPWSTR pszDisplayName
Definition: shlobj.h:1210
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2263
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by BrFolder_OnCommand().

◆ BrFolder_OnSetExpanded()

static BOOL BrFolder_OnSetExpanded ( BrFolder info,
LPITEMIDLIST  pidlSelection,
LPWSTR  pszString 
)
static

Definition at line 1131 of file brfolder.cpp.

1132{
1134 BOOL ret;
1135 if (pszString)
1137 else
1138 ret = BrFolder_ExpandToPidl(info, pidlSelection, &hItem);
1139
1140 if (ret)
1141 TreeView_Expand(info->hwndTreeView, hItem, TVE_EXPAND);
1142 return ret;
1143}
static BOOL BrFolder_ExpandToString(BrFolder *info, LPWSTR pszString, HTREEITEM *phItem)
Definition: brfolder.cpp:1123
int ret

Referenced by BrFolderDlgProc().

◆ BrFolder_OnSetSelectionA()

static BOOL BrFolder_OnSetSelectionA ( BrFolder info,
LPSTR  pszSelectionA 
)
static

Definition at line 1172 of file brfolder.cpp.

1173{
1174 if (!pszSelectionA)
1175 return FALSE;
1176
1177 CComHeapPtr<WCHAR> pszSelectionW;
1178 __SHCloneStrAtoW(&pszSelectionW, pszSelectionA);
1179 if (!pszSelectionW)
1180 return FALSE;
1181
1182 return BrFolder_OnSetSelectionW(info, pszSelectionW);
1183}
static BOOL BrFolder_OnSetSelectionW(BrFolder *info, LPWSTR pszSelection)
Definition: brfolder.cpp:1159
static __inline LPWSTR __SHCloneStrAtoW(WCHAR **target, const char *source)
Definition: shell32_main.h:184

Referenced by BrFolderDlgProc().

◆ BrFolder_OnSetSelectionPidl()

static BOOL BrFolder_OnSetSelectionPidl ( BrFolder info,
LPITEMIDLIST  pidlSelection 
)
static

Definition at line 1146 of file brfolder.cpp.

1147{
1148 if (!pidlSelection)
1149 return FALSE;
1150
1152 BOOL ret = BrFolder_ExpandToPidl(info, pidlSelection, &hItem);
1153 if (ret)
1154 TreeView_SelectItem(info->hwndTreeView, hItem);
1155 return ret;
1156}

Referenced by BrFolderDlgProc().

◆ BrFolder_OnSetSelectionW()

static BOOL BrFolder_OnSetSelectionW ( BrFolder info,
LPWSTR  pszSelection 
)
static

Definition at line 1159 of file brfolder.cpp.

1160{
1161 if (!pszSelection)
1162 return FALSE;
1163
1165 BOOL ret = BrFolder_ExpandToString(info, pszSelection, &hItem);
1166 if (ret)
1167 TreeView_SelectItem(info->hwndTreeView, hItem);
1168 return ret;
1169}

Referenced by BrFolder_OnSetSelectionA(), and BrFolderDlgProc().

◆ BrFolder_Refresh()

static void BrFolder_Refresh ( _Inout_ BrFolder info)
static

Definition at line 1244 of file brfolder.cpp.

1245{
1246 HTREEITEM hRoot = TreeView_GetRoot(info->hwndTreeView);
1247
1248 SendMessageW(info->hwndTreeView, WM_SETREDRAW, FALSE, 0);
1249
1251
1252 SendMessageW(info->hwndTreeView, WM_SETREDRAW, TRUE, 0);
1253 InvalidateRect(info->hwndTreeView, NULL, TRUE);
1254}
static void BrFolder_RefreshRecurse(_Inout_ BrFolder *info, _In_ HTREEITEM hTarget)
Definition: brfolder.cpp:1198
static HTREEITEM hRoot
Definition: treeview.c:383
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define WM_SETREDRAW
Definition: winuser.h:1627

Referenced by BrFolder_OnChangeEx(), and BrFolder_Treeview_Keydown().

◆ BrFolder_RefreshRecurse()

static void BrFolder_RefreshRecurse ( _Inout_ BrFolder info,
_In_ HTREEITEM  hTarget 
)
static

Definition at line 1198 of file brfolder.cpp.

1201{
1202 // Get enum
1204 BrItemData *pItemData = BrFolder_GetItemData(info, hTarget);
1205 HRESULT hrEnum = BrFolder_GetChildrenEnum(info, pItemData, &pEnum);
1206
1207 // Insert new items
1208 if (SUCCEEDED(hrEnum))
1209 {
1211 while (S_OK == pEnum->Next(1, &pidlTemp, NULL))
1212 {
1213 if (!BrFolder_TreeItemHasThisChild(info, hTarget, pidlTemp))
1214 {
1215 BrFolder_InsertItem(info, pItemData->lpsfParent, pidlTemp, pItemData->pidlFull,
1216 hTarget);
1217 }
1218 pidlTemp.Free();
1219 }
1220 }
1221
1222 // Delete zombie items and update items
1223 HTREEITEM hItem, hNextItem;
1224 for (hItem = TreeView_GetChild(info->hwndTreeView, hTarget); hItem; hItem = hNextItem)
1225 {
1226 hNextItem = TreeView_GetNextSibling(info->hwndTreeView, hItem);
1227
1228 if (FAILED(hrEnum) || !BrFolder_IsTreeItemInEnum(info, hItem, pEnum))
1229 {
1230 TreeView_DeleteItem(info->hwndTreeView, hItem);
1231 hNextItem = TreeView_GetChild(info->hwndTreeView, hTarget);
1232 continue;
1233 }
1234
1237 }
1238
1239 if (SUCCEEDED(hrEnum))
1240 TreeView_SortChildren(info->hwndTreeView, hTarget, FALSE);
1241}
static BOOL BrFolder_IsTreeItemInEnum(_Inout_ BrFolder *info, _In_ HTREEITEM hItem, _Inout_ IEnumIDList *pEnum)
Definition: brfolder.cpp:263
static void BrFolder_UpdateItem(_In_ BrFolder *info, _In_ HTREEITEM hItem)
Definition: brfolder.cpp:374
static BOOL BrFolder_TreeItemHasThisChild(_In_ BrFolder *info, _In_ HTREEITEM hItem, _Outptr_opt_ PITEMID_CHILD pidlChild)
Definition: brfolder.cpp:287

Referenced by BrFolder_Refresh(), and BrFolder_RefreshRecurse().

◆ BrFolder_Rename()

static HRESULT BrFolder_Rename ( BrFolder info,
HTREEITEM  hItem 
)
static

Definition at line 634 of file brfolder.cpp.

635{
636 TreeView_SelectItem(info->hwndTreeView, hItem);
637 TreeView_EditLabel(info->hwndTreeView, hItem);
638 return S_OK;
639}
#define TreeView_EditLabel(hwnd, hitem)
Definition: commctrl.h:3509

Referenced by BrFolder_NewFolder(), BrFolder_OnContextMenu(), and BrFolder_Treeview_Keydown().

◆ BrFolder_TreeItemHasThisChild()

static BOOL BrFolder_TreeItemHasThisChild ( _In_ BrFolder info,
_In_ HTREEITEM  hItem,
_Outptr_opt_ PITEMID_CHILD  pidlChild 
)
static

Definition at line 287 of file brfolder.cpp.

291{
292 for (hItem = TreeView_GetChild(info->hwndTreeView, hItem); hItem;
293 hItem = TreeView_GetNextSibling(info->hwndTreeView, hItem))
294 {
296 if (ILIsEqual(pItemData->pidlChild, pidlChild))
297 return TRUE;
298 }
299
300 return FALSE;
301}

Referenced by BrFolder_RefreshRecurse().

◆ BrFolder_Treeview_Changed()

static HRESULT BrFolder_Treeview_Changed ( BrFolder info,
NMTREEVIEWW pnmtv 
)
static

Definition at line 576 of file brfolder.cpp.

577{
578 BrItemData *pItemData = (BrItemData *)pnmtv->itemNew.lParam;
579
580 ILFree(info->pidlRet);
581 info->pidlRet = ILClone(pItemData->pidlFull);
582
584 if (BrFolder_GetName(pItemData->lpsfParent, pItemData->pidlChild, SHGDN_NORMAL | SHGDN_INFOLDER, szName))
586
587 BrFolder_Callback(info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, (LPARAM)info->pidlRet);
589 return S_OK;
590}
static void BrFolder_CheckValidSelection(BrFolder *info, BrItemData *pItemData)
Definition: brfolder.cpp:494
#define BFFM_SELCHANGED
Definition: shlobj.h:1245
TVITEMW itemNew
Definition: commctrl.h:3643
LPARAM lParam
Definition: commctrl.h:3330

Referenced by BrFolder_OnNotify(), and BrFolder_Treeview_Rename().

◆ BrFolder_Treeview_Delete()

static LRESULT BrFolder_Treeview_Delete ( BrFolder info,
NMTREEVIEWW pnmtv 
)
static

Definition at line 531 of file brfolder.cpp.

532{
533 BrItemData *pItemData = (BrItemData *)pnmtv->itemOld.lParam;
534
535 TRACE("TVN_DELETEITEMA/W %p\n", pItemData);
536
537 delete pItemData;
538 return 0;
539}
TVITEMW itemOld
Definition: commctrl.h:3642

Referenced by BrFolder_OnNotify().

◆ BrFolder_Treeview_Expand()

static LRESULT BrFolder_Treeview_Expand ( BrFolder info,
NMTREEVIEWW pnmtv 
)
static

Definition at line 542 of file brfolder.cpp.

543{
544 BrItemData *pItemData = (BrItemData *)pnmtv->itemNew.lParam;
545
546 TRACE("TVN_ITEMEXPANDINGA/W\n");
547
548 if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE))
549 return 0;
550
551 HRESULT hr = S_OK;
553 if (!_ILIsEmpty(pItemData->pidlChild))
554 {
555 hr = pItemData->lpsfParent->BindToObject(pItemData->pidlChild, NULL,
556 IID_PPV_ARG(IShellFolder, &lpsf2));
557 }
558 else
559 {
560 lpsf2 = pItemData->lpsfParent;
561 }
562
563 HTREEITEM hItem = pnmtv->itemNew.hItem;
565 BrFolder_Expand(info, lpsf2, pItemData->pidlFull, hItem);
566
567 // My Computer is already sorted and trying to do a simple text
568 // sort will only mess things up
569 if (!_ILIsMyComputer(pItemData->pidlChild))
570 TreeView_SortChildren(info->hwndTreeView, hItem, FALSE);
571
572 return 0;
573}
static void BrFolder_Expand(_In_ BrFolder *info, _In_ IShellFolder *lpsf, _In_ PCIDLIST_ABSOLUTE pidlFull, _In_ HTREEITEM hParent)
Definition: brfolder.cpp:453
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:2062
HTREEITEM hItem
Definition: commctrl.h:3322
UINT state
Definition: commctrl.h:3323

Referenced by BrFolder_OnNotify().

◆ BrFolder_Treeview_Keydown()

static LRESULT BrFolder_Treeview_Keydown ( BrFolder info,
LPNMTVKEYDOWN  keydown 
)
static

Definition at line 662 of file brfolder.cpp.

663{
664 // Old dialog doesn't support those advanced features
665 if (!(info->lpBrowseInfo->ulFlags & BIF_USENEWUI))
666 return 0;
667
668 HTREEITEM hItem = TreeView_GetSelection(info->hwndTreeView);
669
670 switch (keydown->wVKey)
671 {
672 case VK_F2:
674 break;
675 case VK_DELETE:
677 break;
678 case 'R':
679 {
680 if (GetKeyState(VK_CONTROL) < 0) // Ctrl+R
682 break;
683 }
684 case VK_F5:
685 {
687 break;
688 }
689 }
690 return 0;
691}
static void BrFolder_Delete(BrFolder *info, HTREEITEM hItem)
Definition: brfolder.cpp:642
#define VK_F5
Definition: winuser.h:2270
#define VK_DELETE
Definition: winuser.h:2244
#define VK_F2
Definition: winuser.h:2267

Referenced by BrFolder_OnNotify().

◆ BrFolder_Treeview_Rename()

static LRESULT BrFolder_Treeview_Rename ( BrFolder info,
NMTVDISPINFOW pnmtv 
)
static

Definition at line 593 of file brfolder.cpp.

594{
595 if (!pnmtv->item.pszText)
596 return FALSE;
597
598 HTREEITEM hItem = TreeView_GetSelection(info->hwndTreeView);
600 ASSERT(data);
601 ASSERT(BrFolder_GetItemAttributes(info, hItem, SFGAO_CANRENAME) & SFGAO_CANRENAME);
602
603 PITEMID_CHILD newChild;
604 HRESULT hr = data->lpsfParent->SetNameOf(info->hWnd, data->pidlChild, pnmtv->item.pszText,
605 SHGDN_NORMAL | SHGDN_INFOLDER, &newChild);
606 if (FAILED(hr))
607 return FALSE;
608
609 LPITEMIDLIST newFull;
610 if (SUCCEEDED(hr = SHILClone(data->pidlFull, &newFull)))
611 {
612 ILRemoveLastID(newFull);
613 if (SUCCEEDED(hr = SHILAppend(newChild, &newFull)))
614 {
615 data->pidlFull.Free();
616 data->pidlFull.Attach(newFull);
617 data->pidlChild = ILFindLastID(data->pidlFull);
618 }
619 newChild = NULL; // SHILAppend is nuts and frees this
620 }
621 ILFree(newChild);
622
623 BOOL AllowTreeTextChange = !BrFolder_UpdateItemEx(*info, hItem, NULL, TVIF_TEXT);
624
625 NMTREEVIEWW nmtv;
626 nmtv.itemNew.hItem = hItem;
627 nmtv.itemNew.mask = TVIF_PARAM;
628 nmtv.itemNew.lParam = (LPARAM)data;
630 return AllowTreeTextChange;
631}
HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl)
Definition: utils.cpp:193
HRESULT SHILClone(_In_opt_ LPCITEMIDLIST pidl, _Outptr_ LPITEMIDLIST *ppidl)
Definition: utils.cpp:133
#define ASSERT(a)
Definition: mode.c:44
TVITEMW item
Definition: commctrl.h:3677
UINT mask
Definition: commctrl.h:3321
LPWSTR pszText
Definition: commctrl.h:3325

Referenced by BrFolder_OnNotify().

◆ BrFolder_UpdateItem()

static void BrFolder_UpdateItem ( _In_ BrFolder info,
_In_ HTREEITEM  hItem 
)
static

Definition at line 374 of file brfolder.cpp.

Referenced by BrFolder_RefreshRecurse().

◆ BrFolder_UpdateItemEx()

static BOOL BrFolder_UpdateItemEx ( _In_ BrFolder info,
_In_ HTREEITEM  hItem,
_In_opt_ PCIDLIST_ABSOLUTE  pidlFull,
_In_ UINT  Flags = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN 
)
static

Definition at line 325 of file brfolder.cpp.

330{
331 ASSERT(hItem);
334 if (!data)
335 return FALSE;
336
337 if (pidlFull)
338 {
339 if ((pidlFull = ILClone(pidlFull)) == NULL)
340 return FALSE;
341 data->pidlFull.Free();
342 data->pidlFull.Attach(const_cast<PIDLIST_ABSOLUTE>(pidlFull));
343 data->pidlChild = ILFindLastID(data->pidlFull);
344 // Note: We assume lpsfParent does not change
345 }
346
348 if (Flags & TVIF_TEXT)
349 {
350 item.pszText = Name;
351 if (!BrFolder_GetName(data->lpsfParent, data->pidlChild, SHGDN_TREE, Name))
352 return FALSE;
353 }
354
355 if (Flags & TVIF_IMAGE)
356 {
357 item.mask |= TVIF_SELECTEDIMAGE;
359 }
360
361 item.cChildren = 0;
363 if ((Flags & TVIF_CHILDREN) && BrFolder_GetChildrenEnum(&info, data, &pEnum) == S_OK)
364 {
366 if (pEnum->Next(1, &pidlTemp, NULL) == S_OK)
367 ++item.cChildren;
368 }
369
370 return TreeView_SetItem(info.hwndTreeView, &item);
371}

Referenced by BrFolder_OnChangeEx(), BrFolder_Treeview_Rename(), and BrFolder_UpdateItem().

◆ BrFolderDlgProc()

static INT_PTR CALLBACK BrFolderDlgProc ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1331 of file brfolder.cpp.

1332{
1333 if (uMsg == WM_INITDIALOG)
1335
1337 if (!info)
1338 return 0;
1339
1340 if (info->pContextMenu)
1341 {
1343 if (SHForwardContextMenuMsg(info->pContextMenu, uMsg, wParam,
1344 lParam, &result, TRUE) == S_OK)
1345 {
1347 return TRUE;
1348 }
1349 }
1350
1351 switch (uMsg)
1352 {
1353 case WM_NOTIFY:
1355 return TRUE;
1356
1357 case WM_COMMAND:
1359 break;
1360
1361 case WM_CONTEXTMENU:
1362 if (info->hwndTreeView == (HWND)wParam)
1364 break;
1365
1366 case WM_GETMINMAXINFO:
1367 ((LPMINMAXINFO)lParam)->ptMinTrackSize.x = info->szMin.cx;
1368 ((LPMINMAXINFO)lParam)->ptMinTrackSize.y = info->szMin.cy;
1369 break;
1370
1371 case WM_SIZE:
1372 if (info->layout) // New style dialogs
1374 break;
1375
1378 break;
1379
1382 break;
1383
1384 case BFFM_ENABLEOK:
1386 break;
1387
1388 case BFFM_SETOKTEXT: // Unicode only
1390 break;
1391
1392 case BFFM_SETSELECTIONA:
1393 if (wParam) // String
1395 else // PIDL
1397
1398 case BFFM_SETSELECTIONW:
1399 if (wParam) // String
1401 else // PIDL
1403
1404 case BFFM_SETEXPANDED: // Unicode only
1405 if (wParam) // String
1407 else // PIDL
1409
1410 case SHV_CHANGE_NOTIFY:
1412 break;
1413
1414 case WM_DESTROY:
1416 break;
1417 }
1418
1419 return 0;
1420}
static void BrFolder_OnContextMenu(BrFolder &info, LPARAM lParam)
Definition: brfolder.cpp:994
static void BrFolder_OnChange(BrFolder *info, WPARAM wParam, LPARAM lParam)
Definition: brfolder.cpp:1307
static BOOL BrFolder_OnSetSelectionPidl(BrFolder *info, LPITEMIDLIST pidlSelection)
Definition: brfolder.cpp:1146
static BOOL BrFolder_OnSetExpanded(BrFolder *info, LPITEMIDLIST pidlSelection, LPWSTR pszString)
Definition: brfolder.cpp:1131
static LRESULT BrFolder_OnNotify(BrFolder *info, UINT CtlID, LPNMHDR lpnmh)
Definition: brfolder.cpp:694
static BOOL BrFolder_OnSetSelectionA(BrFolder *info, LPSTR pszSelectionA)
Definition: brfolder.cpp:1172
static BOOL BrFolder_OnInitDialog(HWND hWnd, BrFolder *info)
Definition: brfolder.cpp:749
static void BrFolder_OnCommand(BrFolder *info, UINT id)
Definition: brfolder.cpp:958
static void BrFolder_OnDestroy(BrFolder *info)
Definition: brfolder.cpp:1186
GLuint64EXT * result
Definition: glext.h:11304
static __inline void LayoutUpdate(HWND ignored1, LAYOUT_DATA *pData, LPCVOID ignored2, UINT ignored3)
Definition: layout.h:188
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_NOTIFY
Definition: richedit.h:61
HRESULT WINAPI SHForwardContextMenuMsg(IUnknown *pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pResult, BOOL useIContextMenu2)
Definition: rosordinal.c:11
#define BFFM_SETOKTEXT
Definition: shlobj.h:1256
#define BFFM_SETSELECTIONW
Definition: shlobj.h:1254
#define BFFM_SETSTATUSTEXTW
Definition: shlobj.h:1255
#define BFFM_SETSTATUSTEXTA
Definition: shlobj.h:1251
#define BFFM_SETSELECTIONA
Definition: shlobj.h:1253
#define SetWindowLongPtr
Definition: treelist.c:70
LONG_PTR LRESULT
Definition: windef.h:209
#define GetWindowLongPtrW
Definition: winuser.h:4840
#define WM_SIZE
Definition: winuser.h:1622
#define WM_COMMAND
Definition: winuser.h:1751
#define WM_INITDIALOG
Definition: winuser.h:1750
#define WM_GETMINMAXINFO
Definition: winuser.h:1651
BOOL WINAPI SetDlgItemTextA(_In_ HWND, _In_ int, _In_ LPCSTR)
#define DWLP_MSGRESULT
Definition: winuser.h:881
struct tagMINMAXINFO * LPMINMAXINFO
#define WM_DESTROY
Definition: winuser.h:1620
char * LPSTR
Definition: xmlstorage.h:182

Referenced by SHBrowseForFolderW().

◆ BrowseFlagsToSHCONTF()

static DWORD BrowseFlagsToSHCONTF ( UINT  ulFlags)
inlinestatic

Definition at line 82 of file brfolder.cpp.

83{
84 return SHCONTF_FOLDERS | ((ulFlags & BIF_BROWSEINCLUDEFILES) ? SHCONTF_NONFOLDERS : 0);
85}

Referenced by BrFolder_GetChildrenEnum(), and BrFolder_InsertItem().

◆ GetTreeViewItemContextMenuPos()

static void GetTreeViewItemContextMenuPos ( HWND  hWnd,
HTREEITEM  hItem,
POINT ppt 
)
static

Definition at line 982 of file brfolder.cpp.

983{
984 RECT rc;
986 {
987 ppt->x = (rc.left + rc.right) / 2;
988 ppt->y = (rc.top + rc.bottom) / 2;
989 }
990 ClientToScreen(hWnd, ppt);
991}
#define TreeView_GetItemRect(hwnd, hitem, prc, code)
Definition: commctrl.h:3434
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)

Referenced by BrFolder_OnContextMenu().

◆ ILCloneToDepth()

static LPITEMIDLIST ILCloneToDepth ( LPCITEMIDLIST  pidlSrc,
UINT  depth 
)
static

Definition at line 24 of file brfolder.cpp.

25{
26 SIZE_T cb = 0;
27 for (LPCITEMIDLIST pidl = pidlSrc; pidl && depth--; pidl = ILGetNext(pidl))
28 cb += pidl->mkid.cb;
29
30 LPITEMIDLIST pidlOut = (LPITEMIDLIST)SHAlloc(cb + sizeof(WORD));
31 if (pidlOut)
32 {
33 CopyMemory(pidlOut, pidlSrc, cb);
34 ZeroMemory(((BYTE*)pidlOut) + cb, sizeof(WORD));
35 }
36 return pidlOut;
37}
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
unsigned short WORD
Definition: ntddk_ex.h:93
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define ZeroMemory
Definition: winbase.h:1743
#define CopyMemory
Definition: winbase.h:1741
unsigned char BYTE
Definition: xxhash.c:193

Referenced by BrFolder_ExpandToPidl().

◆ PIDLIsType()

static BOOL PIDLIsType ( LPCITEMIDLIST  pidl,
PIDLTYPE  type 
)
inlinestatic

Definition at line 485 of file brfolder.cpp.

486{
488 if (!data)
489 return FALSE;
490 return (data->type == type);
491}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2236

Referenced by BrFolder_CheckValidSelection().

◆ SHBrowseForFolderA()

EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderA ( LPBROWSEINFOA  lpbi)

Definition at line 1428 of file brfolder.cpp.

1429{
1430 BROWSEINFOW bi;
1431 bi.hwndOwner = lpbi->hwndOwner;
1432 bi.pidlRoot = lpbi->pidlRoot;
1433
1435 bi.pszDisplayName = (lpbi->pszDisplayName ? szName : NULL);
1436
1437 CComHeapPtr<WCHAR> pszTitle;
1438 if (lpbi->lpszTitle)
1439 __SHCloneStrAtoW(&pszTitle, lpbi->lpszTitle);
1440 bi.lpszTitle = pszTitle;
1441
1442 bi.ulFlags = lpbi->ulFlags;
1443 bi.lpfn = lpbi->lpfn;
1444 bi.lParam = lpbi->lParam;
1445 bi.iImage = lpbi->iImage;
1447
1448 if (bi.pszDisplayName)
1450
1451 lpbi->iImage = bi.iImage;
1452 return pidl;
1453}
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brfolder.cpp:1460
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2797
LPCSTR lpszTitle
Definition: shlobj.h:1200
PCIDLIST_ABSOLUTE pidlRoot
Definition: shlobj.h:1198
BFFCALLBACK lpfn
Definition: shlobj.h:1202
HWND hwndOwner
Definition: shlobj.h:1197
LPSTR pszDisplayName
Definition: shlobj.h:1199
UINT ulFlags
Definition: shlobj.h:1201
LPARAM lParam
Definition: shlobj.h:1203
HWND hwndOwner
Definition: shlobj.h:1208

Referenced by test_click_make_new_folder_button(), and test_selection().

◆ SHBrowseForFolderW()

EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW ( LPBROWSEINFOW  lpbi)

Definition at line 1460 of file brfolder.cpp.

1461{
1462 TRACE("%p\n", lpbi);
1463
1464 // MSDN says the caller must initialize COM. We do it anyway in case the caller forgot.
1465 COleInit OleInit;
1466 BrFolder info = { lpbi };
1467
1471 if (ret == IDOK && !(lpbi->ulFlags & BIF_NOTRANSLATETARGETS) &&
1473 {
1474 PIDLIST_ABSOLUTE pidlTarget;
1475 if (SHELL_GetIDListTarget(info.pidlRet, &pidlTarget) == S_OK)
1476 {
1477 ILFree(info.pidlRet);
1478 info.pidlRet = pidlTarget;
1479 }
1480 }
1481 if (ret != IDOK)
1482 {
1483 ILFree(info.pidlRet);
1484 return NULL;
1485 }
1486
1487 return info.pidlRet;
1488}
static INT_PTR CALLBACK BrFolderDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: brfolder.cpp:1331
static UINT RosGetProcessEffectiveVersion(VOID)
Definition: compat_undoc.h:39
HRESULT SHELL_GetIDListTarget(_In_ LPCITEMIDLIST pidl, _Out_ PIDLIST_ABSOLUTE *ppidl)
Definition: utils.cpp:459
#define _WIN32_WINNT_WINXP
Definition: sdkddkver.h:22
#define BIF_NOTRANSLATETARGETS
Definition: shlobj.h:1236
#define IDD_BROWSE_FOR_FOLDER_NEW
Definition: shresdef.h:460
#define IDD_BROWSE_FOR_FOLDER
Definition: shresdef.h:459
OLE initialisation for drag drop support.
Definition: shellclasses.h:202
int32_t INT_PTR
Definition: typedefs.h:64
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)

Referenced by CBandSiteMenu::_CreateNewISFBand(), BtrfsSend::AddClone(), CShellDispatch::BrowseForFolder(), BtrfsSend::BrowseParent(), ChooseFolder(), CHSourceDlgProc(), CCabFolder::ExtractFilesUI(), FileExtractDialogWndProc(), CZipExtract::CExtractSettingsPage::OnBrowse(), CSearchBar::OnLocationEditChange(), SHBrowseForFolderA(), SHBrowseForFolderWrapW(), and WelcomeDlgProc().

◆ Shell_GetCachedImageIndexW()

INT WINAPI Shell_GetCachedImageIndexW ( LPCWSTR  szPath,
INT  nIndex,
UINT  Flags 
)

Definition at line 831 of file iconcache.cpp.

832{
833 WARN("(%s,%08x,%08x) semi-stub.\n",debugstr_w(szPath), nIndex, bSimulateDoc);
834
835 return SIC_GetIconIndex(szPath, nIndex, 0);
836}
INT SIC_GetIconIndex(LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags)
Definition: iconcache.cpp:474

Referenced by BrFolder_GetIconPair(), and Shell_GetCachedImageIndexAW().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ g_layout_info