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");
1340 if (
info->pContextMenu)
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)
#define FAILED_UNEXPECTEDLY(hr)
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
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)
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
BOOL WINAPI StrTrimW(LPWSTR lpszStr, LPCWSTR lpszTrim)
EXTERN_C HRESULT WINAPI SHInvokeCommandOnContextMenu(_In_opt_ HWND hWnd, _In_opt_ IUnknown *pUnk, _In_ IContextMenu *pCM, _In_ UINT fCMIC, _In_opt_ LPCSTR pszVerb)
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 HMODULE MODULEINFO DWORD cb
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
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)
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)
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 SHACF_FILESYS_ONLY
#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
OLE initialisation for drag drop support.
WCHAR szDisplayName[MAX_PATH]
PCIDLIST_ABSOLUTE pidlRoot
PCIDLIST_ABSOLUTE pidlRoot
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
_In_ DWORD _In_ DWORD _Out_writes_to_opt_ pcchString LPSTR pszString
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
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)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
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)