20#define SHV_CHANGE_NOTIFY (WM_USER + 0x1111)
69#define SUPPORTED_FLAGS (BIF_STATUSTEXT | BIF_BROWSEFORCOMPUTER | BIF_RETURNFSANCESTORS | \
70 BIF_RETURNONLYFSDIRS | BIF_NONEWFOLDERBUTTON | BIF_NEWDIALOGSTYLE | \
71 BIF_BROWSEINCLUDEFILES)
90 if (!lpBrowseInfo->
lpfn)
102 ERR(
"TreeView_GetItem failed\n");
128 ULONG attrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER;
143 hr = psfChild->EnumObjects(
info->hWnd,
flags, &pEnumIL);
146 if ((pEnumIL->Skip(1) !=
S_OK) ||
FAILED(pEnumIL->Reset()))
150 if (!pEnumIL || !(attrs & SFGAO_HASSUBFOLDER))
154 *ppEnum = pEnumIL.
Detach();
242 TRACE(
"%p %p %x %p\n", lpsf, pidlChild,
dwFlags, lpFriendlyName);
275 while (pEnum->Next(1, &pidlTemp,
NULL) ==
S_OK)
341 data->pidlFull.Free();
366 if (pEnum->Next(1, &pidlTemp,
NULL) ==
S_OK)
405#ifdef BIF_BROWSEFILEJUNCTIONS
406 if (!(
info->lpBrowseInfo->ulFlags & BIF_BROWSEFILEJUNCTIONS))
427 pItemData->
pidlFull.Attach(pidlFull);
459 TRACE(
"%p %p %p\n", lpsf, pidlFull, hParent);
473 while (
S_OK == pEnum->Next(1, &pidlTemp, &ulFetched))
507 dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM;
516 ((
dwAttributes & (SFGAO_FOLDER | SFGAO_FILESYSTEM)) != (SFGAO_FOLDER | SFGAO_FILESYSTEM)))
535 TRACE(
"TVN_DELETEITEMA/W %p\n", pItemData);
546 TRACE(
"TVN_ITEMEXPANDINGA/W\n");
605 SHGDN_NORMAL | SHGDN_INFOLDER, &newChild);
615 data->pidlFull.Free();
616 data->pidlFull.Attach(newFull);
630 return AllowTreeTextChange;
652 fCMIC |= CMIC_MASK_SHIFT_DOWN;
654 fCMIC |= CMIC_MASK_CONTROL_DOWN;
670 switch (keydown->
wVKey)
723 if (!(att & SFGAO_CANRENAME))
759 FIXME(
"flags BIF_NEWDIALOGSTYLE partially implemented\n");
773 RECT rcEdit, rcTreeView;
778 rcTreeView.
top -=
cy;
780 rcTreeView.
left, rcTreeView.
top,
817 if (
info->hwndTreeView)
820 ERR(
"treeview control missing!\n");
825 ntreg.
pidl = pidlDesktop;
901 item.hItem = hParent;
996 enum { IDC_TOGGLE = 1, ID_FIRSTCMD, ID_LASTCMD = 0xffff };
998 CMINVOKECOMMANDINFOEX ici = {
sizeof(ici), CMIC_MASK_PTINVOKE,
info.hWnd };
1019 tvi.hItem = hSelected;
1024 IID_IContextMenu,
NULL, (
void**)&pcm);
1031 info.pContextMenu = pcm;
1033 hr = pcm->QueryContextMenu(hMenu, 0, ID_FIRSTCMD, ID_LASTCMD, CMF_EXPLORE | cmf);
1042 if (
cmd == IDC_TOGGLE)
1054 ici.fMask |= CMIC_MASK_SHIFT_DOWN;
1056 ici.fMask |= CMIC_MASK_CONTROL_DOWN;
1057 pcm->InvokeCommand((CMINVOKECOMMANDINFO*)&ici);
1082 while (
item.hItem && pidlCurrent)
1117 *phItem =
item.hItem;
1211 while (
S_OK == pEnum->Next(1, &pidlTemp,
NULL))
1318 ERR(
"hLock == NULL\n");
1462 TRACE(
"%p\n", lpbi);
1478 info.pidlRet = pidlTarget;
1487 return info.pidlRet;
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define shell32_hInstance
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void shell(int argc, const char *argv[])
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
static HRESULT BrFolder_Rename(BrFolder *info, HTREEITEM hItem)
static SFGAOF BrFolder_GetItemAttributes(BrFolder *info, HTREEITEM hItem, SFGAOF Query)
static void BrFolder_OnContextMenu(BrFolder &info, LPARAM lParam)
static void BrFolder_OnChange(BrFolder *info, WPARAM wParam, LPARAM lParam)
static LPITEMIDLIST ILCloneToDepth(LPCITEMIDLIST pidlSrc, UINT depth)
static BOOL BrFolder_OnSetSelectionPidl(BrFolder *info, LPITEMIDLIST pidlSelection)
static void GetTreeViewItemContextMenuPos(HWND hWnd, HTREEITEM hItem, POINT *ppt)
static HTREEITEM BrFolder_FindTreeItemOfAbsoluteItem(_In_ BrFolder &info, _In_ PCIDLIST_ABSOLUTE pidl, _In_opt_ HTREEITEM hItem=NULL)
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
static HRESULT BrFolder_NewFolder(BrFolder *info)
static void BrFolder_Callback(LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT uMsg, LPARAM lParam)
static BOOL BrFolder_ExpandToPidl(BrFolder *info, LPITEMIDLIST pidlSelection, HTREEITEM *phItem)
static BOOL BrFolder_OnSetExpanded(BrFolder *info, LPITEMIDLIST pidlSelection, LPWSTR pszString)
static BOOL BrFolder_OnSetSelectionW(BrFolder *info, LPWSTR pszSelection)
static INT_PTR CALLBACK BrFolderDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static const LAYOUT_INFO g_layout_info[]
static void BrFolder_Refresh(_Inout_ BrFolder *info)
#define SHV_CHANGE_NOTIFY
static LRESULT BrFolder_Treeview_Expand(BrFolder *info, NMTREEVIEWW *pnmtv)
static BOOL BrFolder_IsTreeItemInEnum(_Inout_ BrFolder *info, _In_ HTREEITEM hItem, _Inout_ IEnumIDList *pEnum)
static BOOL PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type)
static BrItemData * BrFolder_GetItemData(BrFolder *info, HTREEITEM hItem)
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_Delete(BrFolder *info, HTREEITEM hItem)
static void BrFolder_RefreshRecurse(_Inout_ BrFolder *info, _In_ HTREEITEM hTarget)
static HRESULT BrFolder_GetChildrenEnum(_In_ BrFolder *info, _In_ BrItemData *pItemData, _Outptr_opt_ IEnumIDList **ppEnum)
static HRESULT BrFolder_Treeview_Changed(BrFolder *info, NMTREEVIEWW *pnmtv)
static DWORD BrowseFlagsToSHCONTF(UINT ulFlags)
static LRESULT BrFolder_Treeview_Keydown(BrFolder *info, LPNMTVKEYDOWN keydown)
static HTREEITEM BrFolder_InsertItem(_Inout_ BrFolder *info, _Inout_ IShellFolder *lpsf, _In_ PCUITEMID_CHILD pidlChild, _In_ PCIDLIST_ABSOLUTE pidlParent, _In_ HTREEITEM hParent)
static void BrFolder_OnOK(BrFolder *info)
static BOOL BrFolder_ExpandToString(BrFolder *info, LPWSTR pszString, HTREEITEM *phItem)
INT WINAPI Shell_GetCachedImageIndexW(LPCWSTR szPath, INT nIndex, UINT Flags)
static LRESULT BrFolder_OnNotify(BrFolder *info, UINT CtlID, LPNMHDR lpnmh)
static void BrFolder_UpdateItem(_In_ BrFolder *info, _In_ HTREEITEM hItem)
static void BrFolder_OnChangeEx(_Inout_ BrFolder *info, _In_ PCIDLIST_ABSOLUTE pidl1, _In_ PCIDLIST_ABSOLUTE pidl2, _In_ LONG event)
static HRESULT BrFolder_GetIconPair(BrItemData &item, TVITEMW &tvi)
static void BrFolder_InitTreeView(BrFolder *info)
static void BrFolder_CheckValidSelection(BrFolder *info, BrItemData *pItemData)
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi)
static BOOL BrFolder_OnSetSelectionA(BrFolder *info, LPSTR pszSelectionA)
static BOOL BrFolder_TreeItemHasThisChild(_In_ BrFolder *info, _In_ HTREEITEM hItem, _Outptr_opt_ PITEMID_CHILD pidlChild)
static BOOL BrFolder_OnInitDialog(HWND hWnd, BrFolder *info)
static BOOL BrFolder_GetName(_In_ IShellFolder *lpsf, _In_ PCIDLIST_RELATIVE pidlChild, _In_ DWORD dwFlags, _Out_ PWSTR lpFriendlyName)
static void BrFolder_OnCommand(BrFolder *info, UINT id)
static void BrFolder_Expand(_In_ BrFolder *info, _In_ IShellFolder *lpsf, _In_ PCIDLIST_ABSOLUTE pidlFull, _In_ HTREEITEM hParent)
static LRESULT BrFolder_Treeview_Rename(BrFolder *info, NMTVDISPINFOW *pnmtv)
static LRESULT BrFolder_Treeview_Delete(BrFolder *info, NMTREEVIEWW *pnmtv)
static void BrFolder_OnDestroy(BrFolder *info)
EXTERN_C HANDLE WINAPI SHChangeNotification_Lock(HANDLE hTicket, DWORD dwOwnerPID, LPITEMIDLIST **lppidls, LPLONG lpwEventId)
EXTERN_C ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, INT fSources, LONG wEventMask, UINT uMsg, INT cItems, SHChangeNotifyEntry *lpItems)
EXTERN_C BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock)
EXTERN_C BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
static UINT RosGetProcessEffectiveVersion(VOID)
void pdump(LPCITEMIDLIST pidl)
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI PathIsRelativeW(const WCHAR *path)
BOOL WINAPI StrTrimW(WCHAR *str, const WCHAR *trim)
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
EXTERN_C HRESULT SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
UINT GetDfmCmd(_In_ IContextMenu *pCM, _In_ LPCSTR verba)
HRESULT SHELL_GetIDListTarget(_In_ LPCITEMIDLIST pidl, _Out_ PIDLIST_ABSOLUTE *ppidl)
HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl)
HRESULT SHILClone(_In_opt_ LPCITEMIDLIST pidl, _Outptr_ LPITEMIDLIST *ppidl)
LPVOID WINAPI SHAlloc(SIZE_T len)
HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl)
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR buffer, LPCWSTR path, LPCWSTR shortname, LPCWSTR longname)
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
EXTERN_C HRESULT WINAPI SHInvokeCommandOnContextMenu(_In_opt_ HWND hWnd, _In_opt_ IUnknown *pUnk, _In_ IContextMenu *pCM, _In_ UINT fCMIC, _In_opt_ LPCSTR pszVerb)
#define FAILED_UNEXPECTEDLY
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
WCHAR swShell32Name[MAX_PATH]
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
BOOL WINAPI Shell_GetImageLists(HIMAGELIST *lpBigList, HIMAGELIST *lpSmallList)
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
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)
static __inline LAYOUT_DATA * LayoutInit(HWND hwndParent, const LAYOUT_INFO *pLayouts, INT cLayouts)
static __inline void LayoutDestroy(LAYOUT_DATA *pData)
static __inline void LayoutUpdate(HWND ignored1, LAYOUT_DATA *pData, LPCVOID ignored2, UINT ignored3)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, int nFolder, BOOL fCreate)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
LPITEMIDLIST _ILCreateDesktop(void)
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
UINT _ILGetDepth(LPCITEMIDLIST pidl)
static BOOL _ILIsEmpty(LPCITEMIDLIST pidl)
static const WCHAR szName[]
_Out_opt_ int _Out_opt_ int * cy
#define TreeView_SelectItem(hwnd, hitem)
#define TreeView_Expand(hwnd, hitem, code)
#define TreeView_GetChild(hwnd, hitem)
#define TVN_ITEMEXPANDINGA
#define TreeView_SortChildren(hwnd, hitem, recurse)
#define TreeView_GetEditControl(hwnd)
#define TVN_BEGINLABELEDITA
#define TVIS_EXPANDEDONCE
#define TreeView_GetParent(hwnd, hitem)
#define TreeView_GetSelection(hwnd)
#define TreeView_GetItem(hwnd, pitem)
#define TreeView_GetItemRect(hwnd, hitem, prc, code)
#define TreeView_GetRoot(hwnd)
#define TreeView_GetNextSibling(hwnd, hitem)
#define TVN_ITEMEXPANDINGW
#define TVN_BEGINLABELEDITW
#define TreeView_EditLabel(hwnd, hitem)
#define TreeView_SetImageList(hwnd, himl, iImage)
#define TreeView_HitTest(hwnd, lpht)
#define TreeView_InsertItem(hwnd, lpis)
#define TVIF_SELECTEDIMAGE
#define TVN_ENDLABELEDITW
#define TreeView_SetItem(hwnd, pitem)
#define TreeView_DeleteItem(hwnd, hitem)
#define SHACF_FILESYS_ONLY
static unsigned __int64 next
HRESULT WINAPI SHForwardContextMenuMsg(IUnknown *pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pResult, BOOL useIContextMenu2)
#define _WIN32_WINNT_WINXP
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
static __inline LPWSTR __SHCloneStrAtoW(WCHAR **target, const char *source)
#define SHGFI_DISPLAYNAME
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
static BOOL SHELL_IsContextMenuMsg(UINT uMsg)
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
#define SHCNE_DRIVEREMOVED
#define CSIDL_DESKTOPDIRECTORY
#define BIF_NOTRANSLATETARGETS
#define BIF_RETURNONLYFSDIRS
#define BIF_RETURNFSANCESTORS
#define BFFM_SETSELECTION
#define SHCNE_RENAMEFOLDER
#define SHCNRF_NewDelivery
#define SHCNRF_ShellLevel
#define BFFM_SETSELECTIONW
#define BIF_BROWSEINCLUDEFILES
#define BFFM_SETSTATUSTEXTW
#define BFFM_SETSTATUSTEXTA
#define BIF_NONEWFOLDERBUTTON
#define BIF_NEWDIALOGSTYLE
#define BIF_BROWSEFORCOMPUTER
#define BFFM_SETSELECTIONA
HRESULT WINAPI SHAutoComplete(HWND hwndEdit, DWORD dwFlags)
#define IDD_BROWSE_FOR_FOLDER_NEW
#define IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT
#define IDC_BROWSE_FOR_FOLDER_TREEVIEW
#define IDC_BROWSE_FOR_FOLDER_NEW_FOLDER
#define IDD_BROWSE_FOR_FOLDER
#define IDC_BROWSE_FOR_FOLDER_STATUS
#define IDC_BROWSE_FOR_FOLDER_TITLE
#define IDC_BROWSE_FOR_FOLDER_FOLDER
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
IContextMenu * pContextMenu
LPBROWSEINFOW lpBrowseInfo
PCIDLIST_RELATIVE pidlChild
CComHeapPtr< ITEMIDLIST_ABSOLUTE > pidlFull
CComPtr< IShellFolder > lpsfParent
WCHAR szDisplayName[MAX_PATH]
PCIDLIST_ABSOLUTE pidlRoot
PCIDLIST_ABSOLUTE pidlRoot
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
HWND WINAPI SetCapture(_In_ HWND hWnd)
HMENU WINAPI CreatePopupMenu(void)
#define GetWindowLongPtrW
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI ReleaseCapture(void)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
BOOL WINAPI MessageBeep(_In_ UINT uType)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
BOOL WINAPI SetDlgItemTextA(_In_ HWND, _In_ int, _In_ LPCSTR)
#define MAKEINTRESOURCEA(i)
BOOL WINAPI DestroyMenu(_In_ HMENU)
struct tagMINMAXINFO * LPMINMAXINFO
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
#define SetWindowLongPtrW
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
SHORT WINAPI GetKeyState(_In_ int)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
_Must_inspect_result_ _In_ ULONG Flags
#define IID_PPV_ARG(Itype, ppType)
#define IID_NULL_PPV_ARG(Itype, ppType)