Reapply Wine-20050310 changes, this time with the changes
to the include files. Where's CIS when you need it :P
Modified: trunk/reactos/lib/shell32/Makefile.in
Modified: trunk/reactos/lib/shell32/brsfolder.c
Modified: trunk/reactos/lib/shell32/classes.c
Modified: trunk/reactos/lib/shell32/clipboard.c
Modified: trunk/reactos/lib/shell32/dialogs.c
Modified: trunk/reactos/lib/shell32/enumidlist.c
Modified: trunk/reactos/lib/shell32/enumidlist.h
Modified: trunk/reactos/lib/shell32/folders.c
Modified: trunk/reactos/lib/shell32/pidl.c
Modified: trunk/reactos/lib/shell32/pidl.h
Modified: trunk/reactos/lib/shell32/shell32.spec
Modified: trunk/reactos/lib/shell32/shell32_Es.rc
Modified: trunk/reactos/lib/shell32/shell32_Pt.rc
Modified: trunk/reactos/lib/shell32/shell32_main.c
Modified: trunk/reactos/lib/shell32/shell32_main.h
Modified: trunk/reactos/lib/shell32/shelllink.c
Modified: trunk/reactos/lib/shell32/shellpath.c
Modified: trunk/reactos/lib/shell32/shfldr.h
Modified: trunk/reactos/lib/shell32/shfldr_desktop.c
Modified: trunk/reactos/lib/shell32/shfldr_fs.c
Modified: trunk/reactos/lib/shell32/shfldr_mycomp.c
Added: trunk/reactos/lib/shell32/shfldr_unixfs.c
Modified: trunk/reactos/lib/shell32/shlexec.c
Modified: trunk/reactos/lib/shell32/shlfileop.c
Modified: trunk/reactos/lib/shell32/shlfolder.c
Modified: trunk/reactos/lib/shell32/shlfsbind.c
Modified: trunk/reactos/lib/shell32/shlview.c
Modified: trunk/reactos/w32api/include/shellapi.h
Modified: trunk/reactos/w32api/include/winuser.h
_____
Modified: trunk/reactos/lib/shell32/Makefile.in
--- trunk/reactos/lib/shell32/Makefile.in 2005-03-16 16:25:54 UTC
(rev 14137)
+++ trunk/reactos/lib/shell32/Makefile.in 2005-03-16 17:30:11 UTC
(rev 14138)
@@ -37,6 +37,7 @@
shfldr_desktop.c \
shfldr_fs.c \
shfldr_mycomp.c \
+ shfldr_unixfs.c \
shlexec.c \
shlfileop.c \
shlfolder.c \
@@ -77,7 +78,7 @@
$(LDPATH) $(RC16) $(RC16FLAGS) -fo$@ $(SRCDIR)/version16.rc
shell.spec.c: shell.spec version16.res
- $(WINEBUILD) $(DEFS) $(DLLFLAGS) -o $@ --main-module $(MODULE)
--res version16.res --dll $(SRCDIR)/shell.spec
+ $(WINEBUILD) $(DEFS) $(DLLFLAGS) --dll -o $@ --main-module
$(MODULE) --res version16.res --export $(SRCDIR)/shell.spec
authors.c: $(TOPSRCDIR)/AUTHORS
(LC_ALL=C; export LC_ALL; echo 'const char * const
SHELL_Authors[] = {' && \
_____
Modified: trunk/reactos/lib/shell32/brsfolder.c
--- trunk/reactos/lib/shell32/brsfolder.c 2005-03-16 16:25:54 UTC
(rev 14137)
+++ trunk/reactos/lib/shell32/brsfolder.c 2005-03-16 17:30:11 UTC
(rev 14138)
@@ -55,68 +55,95 @@
return SHCONTF_FOLDERS | (ulFlags & BIF_BROWSEINCLUDEFILES ?
SHCONTF_NONFOLDERS : 0);
}
+/**********************************************************************
********
+ * InitializeTreeView [Internal]
+ *
+ * Called from WM_INITDIALOG handler.
+ *
+ * PARAMS
+ * hwndParent [I] The BrowseForFolder dialog
+ * root [I] ITEMIDLIST of the root shell folder
+ */
static void InitializeTreeView(HWND hwndParent, LPCITEMIDLIST root)
{
- HIMAGELIST hImageList;
- IShellFolder * lpsf;
- HRESULT hr;
- IEnumIDList * pEnumIL = NULL;
- LPITEMIDLIST parentofroot;
- parentofroot = ILClone(root);
- ILRemoveLastID(parentofroot);
+ LPITEMIDLIST pidlParent, pidlChild;
+ HIMAGELIST hImageList;
+ HRESULT hr;
+ IShellFolder *lpsfParent, *lpsfRoot;
+ IEnumIDList * pEnumChildren = NULL;
- hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW);
- Shell_GetImageList(NULL, &hImageList);
+ TRACE("dlg=%p tree=%p\n", hwndParent, hwndTreeView );
+
+ hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW);
+ if (!hwndTreeView) {
+ FIXME("Could not get handle to treeview control! Error:
%08lx\n", GetLastError());
+ return;
+ }
+ Shell_GetImageList(NULL, &hImageList);
- TRACE("dlg=%p tree=%p\n", hwndParent, hwndTreeView );
+ if (hImageList)
+ TreeView_SetImageList(hwndTreeView, hImageList, 0);
- if (hImageList && hwndTreeView)
- TreeView_SetImageList(hwndTreeView, hImageList, 0);
+ /* We want to call InsertTreeViewItem down the code, in order to
insert
+ * the root item of the treeview. Due to InsertTreeViewItem's
signature,
+ * we need the following to do this:
+ *
+ * + An ITEMIDLIST corresponding to _the parent_ of root.
+ * + An ITEMIDLIST, which is a relative path from root's parent to
root
+ * (containing a single SHITEMID).
+ * + An IShellFolder interface pointer of root's parent folder.
+ *
+ * If root is 'Desktop', then root's parent is also 'Desktop'.
+ */
- if (_ILIsDesktop (root)) {
- hr = SHGetDesktopFolder(&lpsf);
- } else {
- IShellFolder * lpsfdesktop;
+ pidlParent = ILClone(root);
+ ILRemoveLastID(pidlParent);
+ pidlChild = ILClone(ILFindLastID(root));
+
+ if (_ILIsDesktop(pidlParent)) {
+ hr = SHGetDesktopFolder(&lpsfParent);
+ } else {
+ IShellFolder *lpsfDesktop;
+ hr = SHGetDesktopFolder(&lpsfDesktop);
+ if (!SUCCEEDED(hr)) {
+ WARN("SHGetDesktopFolder failed! hr = %08lx\n", hr);
+ return;
+ }
+ hr = IShellFolder_BindToObject(lpsfDesktop, pidlParent, 0,
&IID_IShellFolder, (LPVOID*)&lpsfParent);
+ IShellFolder_Release(lpsfDesktop);
+ }
+
+ if (!SUCCEEDED(hr)) {
+ WARN("Could not bind to parent shell folder! hr = %08lx\n",
hr);
+ return;
+ }
- hr = SHGetDesktopFolder(&lpsfdesktop);
- if (SUCCEEDED(hr)) {
- hr = IShellFolder_BindToObject(lpsfdesktop, parentofroot,
0,(REFIID)&IID_IShellFolder,(LPVOID *)&lpsf);
- IShellFolder_Release(lpsfdesktop);
- }
- }
- if (SUCCEEDED(hr))
- {
- IShellFolder * pSFRoot;
- if (_ILIsPidlSimple(root))
- {
- pSFRoot = lpsf;
- IShellFolder_AddRef(pSFRoot);
- }
- else
- hr =
IShellFolder_BindToObject(lpsf,ILFindLastID(root),0,&IID_IShellFolder,(L
PVOID *)&pSFRoot);
- if (SUCCEEDED(hr))
- {
- hr = IShellFolder_EnumObjects(
- pSFRoot,
- hwndParent,
- BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags),
- &pEnumIL);
- IShellFolder_Release(pSFRoot);
- }
- }
+ if (pidlChild && pidlChild->mkid.cb) {
+ hr = IShellFolder_BindToObject(lpsfParent, pidlChild, 0,
&IID_IShellFolder, (LPVOID*)&lpsfRoot);
+ } else {
+ lpsfRoot = lpsfParent;
+ hr = IShellFolder_AddRef(lpsfParent);
+ }
+
+ if (!SUCCEEDED(hr)) {
+ WARN("Could not bind to root shell folder! hr = %08lx\n", hr);
+ IShellFolder_Release(lpsfParent);
+ return;
+ }
- if (SUCCEEDED(hr) && hwndTreeView)
- {
- TreeView_DeleteAllItems(hwndTreeView);
- TreeView_Expand(hwndTreeView,
- InsertTreeViewItem(lpsf, _ILIsPidlSimple(root)
? root : ILFindLastID(root), parentofroot, pEnumIL, TVI_ROOT),
- TVE_EXPAND);
- }
+ hr = IShellFolder_EnumObjects(lpsfRoot, hwndParent,
BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags), &pEnumChildren);
+ if (!SUCCEEDED(hr)) {
+ WARN("Could not get child iterator! hr = %08lx\n", hr);
+ IShellFolder_Release(lpsfParent);
+ IShellFolder_Release(lpsfRoot);
+ return;
+ }
- if (SUCCEEDED(hr))
- IShellFolder_Release(lpsf);
+ TreeView_DeleteAllItems(hwndTreeView);
+ TreeView_Expand(hwndTreeView, InsertTreeViewItem(lpsfParent,
pidlChild, pidlParent, pEnumChildren, TVI_ROOT), TVE_EXPAND);
- TRACE("done\n");
+ IShellFolder_Release(lpsfRoot);
+ IShellFolder_Release(lpsfParent);
}
static int GetIcon(LPITEMIDLIST lpi, UINT uFlags)
@@ -149,12 +176,27 @@
typedef struct tagID
{
- LPSHELLFOLDER lpsfParent;
- LPITEMIDLIST lpi;
- LPITEMIDLIST lpifq;
- IEnumIDList* pEnumIL;
+ LPSHELLFOLDER lpsfParent; /* IShellFolder of the parent */
+ LPITEMIDLIST lpi; /* PIDL relativ to parent */
+ LPITEMIDLIST lpifq; /* Fully qualified PIDL */
+ IEnumIDList* pEnumIL; /* Children iterator */
} TV_ITEMDATA, *LPTV_ITEMDATA;
+/**********************************************************************
********
+ * GetName [Internal]
+ *
+ * Query a shell folder for the display name of one of it's children
+ *
+ * PARAMS
+ * lpsf [I] IShellFolder interface of the folder to be
queried.
+ * lpi [I] ITEMIDLIST of the child, relative to parent
+ * dwFlags [I] as in IShellFolder::GetDisplayNameOf
+ * lpFriendlyName [O] The desired display name in unicode
+ *
+ * RETURNS
+ * Success: TRUE
+ * Failure: FALSE
+ */
static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD
dwFlags, LPWSTR lpFriendlyName)
{
BOOL bSuccess=TRUE;
@@ -175,7 +217,22 @@
return bSuccess;
}
-static HTREEITEM InsertTreeViewItem(IShellFolder * lpsf, LPCITEMIDLIST
pidl, LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent)
+/**********************************************************************
********
+ * InsertTreeViewItem [Internal]
+ *
+ * PARAMS
+ * lpsf [I] IShellFolder interface of the item's parent shell
folder
+ * pidl [I] ITEMIDLIST of the child to insert, relativ to parent
+ * pidlParent [I] ITEMIDLIST of the parent shell folder
+ * pEnumIL [I] Iterator for the children of the item to be inserted
+ * hParent [I] The treeview-item that represents the parent shell
folder
+ *
+ * RETURNS
+ * Success: Handle to the created and inserted treeview-item
+ * Failure: NULL
+ */
+static HTREEITEM InsertTreeViewItem(IShellFolder * lpsf, LPCITEMIDLIST
pidl,
+ LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent)
{
TVITEMW tvi;
TVINSERTSTRUCTW tvins;
@@ -211,6 +268,18 @@
return (HTREEITEM)TreeView_InsertItemW(hwndTreeView, &tvins);
}
+/**********************************************************************
********
+ * FillTreeView [Internal]
+ *
+ * For each child (given by lpe) of the parent shell folder, which is
given by
+ * lpsf and whose PIDL is pidl, insert a treeview-item right under
hParent
+ *
+ * PARAMS
+ * lpsf [I] IShellFolder interface of the parent shell folder
+ * pidl [I] ITEMIDLIST of the parent shell folder
+ * hParent [I] The treeview item that represents the parent shell
folder
+ * lpe [I] An iterator for the children of the parent shell folder
+ */
static void FillTreeView(IShellFolder * lpsf, LPITEMIDLIST pidl,
HTREEITEM hParent, IEnumIDList* lpe)
{
HTREEITEM hPrev = 0;
@@ -219,7 +288,11 @@
HRESULT hr;
HWND hwnd=GetParent(hwndTreeView);
- TRACE("%p %p %x\n",lpsf, pidl, (INT)hParent);
+ TRACE("%p %p %x %p\n",lpsf, pidl, (INT)hParent, lpe);
+
+ /* No IEnumIDList -> No children */
+ if (!lpe) return;
+
SetCapture(GetParent(hwndTreeView));
SetCursor(LoadCursorA(0, (LPSTR)IDC_WAIT));
_____
Modified: trunk/reactos/lib/shell32/classes.c
--- trunk/reactos/lib/shell32/classes.c 2005-03-16 16:25:54 UTC (rev
14137)
+++ trunk/reactos/lib/shell32/classes.c 2005-03-16 17:30:11 UTC (rev
14138)
@@ -116,7 +116,7 @@
BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR
szVerb, LPWSTR szDest, DWORD len )
{
- static const WCHAR swShell[] =
{'\\','s','h','e','l','l','\\',0};
+ static const WCHAR swShell[] =
{'s','h','e','l','l','\\',0};
static const WCHAR swCommand[] =
{'\\','c','o','m','m','a','n','d',0};
BOOL ret = FALSE;
_____
Modified: trunk/reactos/lib/shell32/clipboard.c
--- trunk/reactos/lib/shell32/clipboard.c 2005-03-16 16:25:54 UTC
(rev 14137)
+++ trunk/reactos/lib/shell32/clipboard.c 2005-03-16 17:30:11 UTC
(rev 14138)
@@ -26,7 +26,7 @@
* - a right mousebutton-copy sets the following formats:
* classic:
* Shell IDList Array
- * Prefered Drop Effect
+ * Preferred Drop Effect
* Shell Object Offsets
* HDROP
* FileName
_____
Modified: trunk/reactos/lib/shell32/dialogs.c
--- trunk/reactos/lib/shell32/dialogs.c 2005-03-16 16:25:54 UTC (rev
14137)
+++ trunk/reactos/lib/shell32/dialogs.c 2005-03-16 17:30:11 UTC (rev
14138)
@@ -127,9 +127,9 @@
case WM_INITDIALOG :
prfdp = (RUNFILEDLGPARAMS *)lParam ;
SetWindowTextA (hwnd, prfdp->lpstrTitle) ;
- SetClassLongA (hwnd, GCL_HICON, (LPARAM)prfdp->hIcon) ;
- SendMessageA (GetDlgItem (hwnd, 12297), STM_SETICON,
- (WPARAM)LoadIconA (NULL, (LPSTR)IDI_WINLOGO),
0);
+ SetClassLongPtrW (hwnd, GCLP_HICON, (LPARAM)prfdp->hIcon) ;
+ SendMessageW (GetDlgItem (hwnd, 12297), STM_SETICON,
+ (WPARAM)LoadIconW (NULL,
(LPCWSTR)IDI_WINLOGO), 0);
FillList (GetDlgItem (hwnd, 12298), NULL) ;
SetFocus (GetDlgItem (hwnd, 12298)) ;
return TRUE ;
@@ -283,7 +283,7 @@
if (NULL != pszLatest)
{
- if (!strcasecmp (pszCmd, pszLatest))
+ if (!lstrcmpiA(pszCmd, pszLatest))
{
/*
sprintf (szDbgMsg, "Found existing (%d).\n", Nix) ;
_____
Modified: trunk/reactos/lib/shell32/enumidlist.c
--- trunk/reactos/lib/shell32/enumidlist.c 2005-03-16 16:25:54 UTC
(rev 14137)
+++ trunk/reactos/lib/shell32/enumidlist.c 2005-03-16 17:30:11 UTC
(rev 14138)
@@ -25,6 +25,7 @@
#define COBJMACROS
#include "wine/debug.h"
+#include "wine/unicode.h"
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
@@ -103,24 +104,27 @@
*/
BOOL CreateFolderEnumList(
IEnumIDList *list,
- LPCSTR lpszPath,
+ LPCWSTR lpszPath,
DWORD dwFlags)
{
LPITEMIDLIST pidl=NULL;
- WIN32_FIND_DATAA stffile;
+ WIN32_FIND_DATAW stffile;
HANDLE hFile;
- CHAR szPath[MAX_PATH];
+ WCHAR szPath[MAX_PATH];
BOOL succeeded = TRUE;
+ const static WCHAR stars[] = { '*','.','*',0 };
+ const static WCHAR dot[] = { '.',0 };
+ const static WCHAR dotdot[] = { '.','.',0 };
- TRACE("(%p)->(path=%s flags=0x%08lx)
\n",list,debugstr_a(lpszPath),dwFlags);
+ TRACE("(%p)->(path=%s flags=0x%08lx)
\n",list,debugstr_w(lpszPath),dwFlags);
if(!lpszPath || !lpszPath[0]) return FALSE;
- strcpy(szPath, lpszPath);
- PathAddBackslashA(szPath);
- strcat(szPath,"*.*");
+ strcpyW(szPath, lpszPath);
+ PathAddBackslashW(szPath);
+ strcatW(szPath,stars);
- hFile = FindFirstFileA(szPath,&stffile);
+ hFile = FindFirstFileW(szPath,&stffile);
if ( hFile != INVALID_HANDLE_VALUE )
{
BOOL findFinished = FALSE;
@@ -132,21 +136,21 @@
{
if ( (stffile.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY) &&
dwFlags & SHCONTF_FOLDERS &&
- strcmp (stffile.cFileName, ".") && strcmp
(stffile.cFileName, ".."))
+ strcmpW(stffile.cFileName, dot) &&
strcmpW(stffile.cFileName, dotdot))
{
- pidl = _ILCreateFromFindDataA(&stffile);
+ pidl = _ILCreateFromFindDataW(&stffile);
succeeded = succeeded && AddToEnumList(list, pidl);
}
else if (!(stffile.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY)
&& dwFlags & SHCONTF_NONFOLDERS)
{
- pidl = _ILCreateFromFindDataA(&stffile);
+ pidl = _ILCreateFromFindDataW(&stffile);
succeeded = succeeded && AddToEnumList(list, pidl);
}
}
if (succeeded)
{
- if (!FindNextFileA(hFile, &stffile))
+ if (!FindNextFileW(hFile, &stffile))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
findFinished = TRUE;
_____
Modified: trunk/reactos/lib/shell32/enumidlist.h
--- trunk/reactos/lib/shell32/enumidlist.h 2005-03-16 16:25:54 UTC
(rev 14137)
+++ trunk/reactos/lib/shell32/enumidlist.h 2005-03-16 17:30:11 UTC
(rev 14138)
@@ -25,6 +25,6 @@
/* Enumerates the folders and/or files (depending on dwFlags) in
lpszPath and
* adds them to the already-created list.
*/
-BOOL CreateFolderEnumList(IEnumIDList *list, LPCSTR lpszPath, DWORD
dwFlags);
+BOOL CreateFolderEnumList(IEnumIDList *list, LPCWSTR lpszPath, DWORD
dwFlags);
#endif /* ndef __ENUMIDLIST_H__ */
_____
Modified: trunk/reactos/lib/shell32/folders.c
--- trunk/reactos/lib/shell32/folders.c 2005-03-16 16:25:54 UTC (rev
14137)
+++ trunk/reactos/lib/shell32/folders.c 2005-03-16 17:30:11 UTC (rev
14138)
@@ -328,7 +328,7 @@
found = TRUE;
}
- else if (!strcasecmp(sTemp, "lnkfile"))
+ else if (!lstrcmpiA(sTemp, "lnkfile"))
{
/* extract icon from shell shortcut */
IShellFolder* dsf;
_____
Modified: trunk/reactos/lib/shell32/pidl.c
--- trunk/reactos/lib/shell32/pidl.c 2005-03-16 16:25:54 UTC (rev
14137)
+++ trunk/reactos/lib/shell32/pidl.c 2005-03-16 17:30:11 UTC (rev
14138)
@@ -1,7 +1,7 @@
/*
- * pidl Handling
+ * pidl Handling
*
- * Copyright 1998 Juergen Schmied
+ * Copyright 1998 Juergen Schmied
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -57,7 +57,7 @@
extern BOOL WINAPI Free(LPVOID);
/***********************************************************************
**
- * ILGetDisplayNameEx [SHELL32.186]
+ * ILGetDisplayNameEx [SHELL32.186]
*
* Retrieves the display name of an ItemIDList
*
@@ -75,106 +75,108 @@
*/
BOOL WINAPI ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
LPSTR path, DWORD type)
{
- BOOL ret = FALSE;
- WCHAR wPath[MAX_PATH];
+ BOOL ret = FALSE;
+ WCHAR wPath[MAX_PATH];
- TRACE("%p %p %p %ld\n", psf, pidl, path, type);
+ TRACE("%p %p %p %ld\n", psf, pidl, path, type);
- if (!pidl || !path)
- return FALSE;
+ if (!pidl || !path)
+ return FALSE;
- ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
- WideCharToMultiByte(CP_ACP, 0, wPath, -1, path, MAX_PATH, NULL,
NULL);
- TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
+ ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
+ WideCharToMultiByte(CP_ACP, 0, wPath, -1, path, MAX_PATH, NULL,
NULL);
+ TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
- return ret;
+ return ret;
}
BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
LPWSTR path, DWORD type)
{
- LPSHELLFOLDER psfParent, lsf = psf;
- HRESULT ret = NO_ERROR;
- LPCITEMIDLIST pidllast;
- STRRET strret;
- DWORD flag;
+ LPSHELLFOLDER psfParent, lsf = psf;
+ HRESULT ret = NO_ERROR;
+ LPCITEMIDLIST pidllast;
+ STRRET strret;
+ DWORD flag;
- TRACE("%p %p %p %ld\n", psf, pidl, path, type);
+ TRACE("%p %p %p %ld\n", psf, pidl, path, type);
- if (!pidl || !path)
- return FALSE;
+ if (!pidl || !path)
+ return FALSE;
- if (!lsf)
- {
- ret = SHGetDesktopFolder(&lsf);
- if (FAILED(ret))
- return FALSE;
- }
+ if (!lsf)
+ {
+ ret = SHGetDesktopFolder(&lsf);
+ if (FAILED(ret))
+ return FALSE;
+ }
- if (type >= 0 && type <= 2)
- {
- switch (type)
- {
- case ILGDN_FORPARSING:
- flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
- break;
- case ILGDN_NORMAL:
- flag = SHGDN_NORMAL;
- break;
- case ILGDN_INFOLDER:
- flag = SHGDN_INFOLDER;
- break;
- default:
- FIXME("Unknown type parameter = %lx\n", type);
- flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
- break;
- }
- if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
- {
- ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag,
&strret);
- if (SUCCEEDED(ret))
- {
- ret = StrRetToStrNW(path, MAX_PATH, &strret, pidl);
- }
- }
- else
- {
- ret = SHBindToParent(pidl, &IID_IShellFolder,
(LPVOID*)&psfParent, &pidllast);
- if (SUCCEEDED(ret))
- {
- ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast,
flag, &strret);
- if (SUCCEEDED(ret))
- {
- ret = StrRetToStrNW(path, MAX_PATH, &strret, pidllast);
- }
- IShellFolder_Release(psfParent);
- }
- }
- }
+ if (type >= 0 && type <= 2)
+ {
+ switch (type)
+ {
+ case ILGDN_FORPARSING:
+ flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
+ break;
+ case ILGDN_NORMAL:
+ flag = SHGDN_NORMAL;
+ break;
+ case ILGDN_INFOLDER:
+ flag = SHGDN_INFOLDER;
+ break;
+ default:
+ FIXME("Unknown type parameter = %lx\n", type);
+ flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
+ break;
+ }
+ if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
+ {
+ ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag,
&strret);
+ if (SUCCEEDED(ret))
+ {
+ ret = StrRetToStrNW(path, MAX_PATH, &strret, pidl);
+ }
+ }
+ else
+ {
+ ret = SHBindToParent(pidl, &IID_IShellFolder,
(LPVOID*)&psfParent, &pidllast);
+ if (SUCCEEDED(ret))
+ {
+ ret = IShellFolder_GetDisplayNameOf(psfParent,
pidllast, flag, &strret);
+ if (SUCCEEDED(ret))
+ {
+ ret = StrRetToStrNW(path, MAX_PATH, &strret,
pidllast);
+ }
+ IShellFolder_Release(psfParent);
+ }
+ }
+ }
- TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
+ TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
- if (!psf)
- IShellFolder_Release(lsf);
- return SUCCEEDED(ret);
+ if (!psf)
+ IShellFolder_Release(lsf);
+ return SUCCEEDED(ret);
}
BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
LPVOID path, DWORD type)
{
- TRACE_(shell)("%p %p %p %ld\n", psf, pidl, path, type);
- if (SHELL_OsIsUnicode())
- return ILGetDisplayNameExW(psf, pidl, path, type);
- return ILGetDisplayNameExA(psf, pidl, path, type);
+ TRACE_(shell)("%p %p %p %ld\n", psf, pidl, path, type);
+
+ if (SHELL_OsIsUnicode())
+ return ILGetDisplayNameExW(psf, pidl, path, type);
+ return ILGetDisplayNameExA(psf, pidl, path, type);
}
/***********************************************************************
**
- * ILGetDisplayName [SHELL32.15]
+ * ILGetDisplayName [SHELL32.15]
*/
BOOL WINAPI ILGetDisplayName(LPCITEMIDLIST pidl, LPVOID path)
{
- TRACE_(shell)("%p %p\n", pidl, path);
- if (SHELL_OsIsUnicode())
- return ILGetDisplayNameExW(NULL, pidl, path,
ILGDN_FORPARSING);
- return ILGetDisplayNameExA(NULL, pidl, path, ILGDN_FORPARSING);
+ TRACE_(shell)("%p %p\n", pidl, path);
+
+ if (SHELL_OsIsUnicode())
+ return ILGetDisplayNameExW(NULL, pidl, path, ILGDN_FORPARSING);
+ return ILGetDisplayNameExA(NULL, pidl, path, ILGDN_FORPARSING);
}
/***********************************************************************
**
@@ -185,20 +187,21 @@
*/
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
{
- LPCITEMIDLIST pidlLast = pidl;
+ LPCITEMIDLIST pidlLast = pidl;
- TRACE("(pidl=%p)\n",pidl);
+ TRACE("(pidl=%p)\n",pidl);
- if (!pidl)
- return NULL;
+ if (!pidl)
+ return NULL;
- while (pidl->mkid.cb)
- {
- pidlLast = pidl;
- pidl = ILGetNext(pidl);
- }
- return (LPITEMIDLIST)pidlLast;
+ while (pidl->mkid.cb)
+ {
+ pidlLast = pidl;
+ pidl = ILGetNext(pidl);
+ }
+ return (LPITEMIDLIST)pidlLast;
}
+
/***********************************************************************
**
* ILRemoveLastID [SHELL32.17]
*
@@ -207,12 +210,12 @@
*/
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
{
- TRACE_(shell)("pidl=%p\n",pidl);
+ TRACE_(shell)("pidl=%p\n",pidl);
- if (!pidl || !pidl->mkid.cb)
- return 0;
- ILFindLastID(pidl)->mkid.cb = 0;
- return 1;
+ if (!pidl || !pidl->mkid.cb)
+ return 0;
+ ILFindLastID(pidl)->mkid.cb = 0;
+ return 1;
}
/***********************************************************************
**
@@ -222,22 +225,24 @@
* duplicate an idlist
*/
LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
-{ DWORD len;
- LPITEMIDLIST newpidl;
+{
+ DWORD len;
+ LPITEMIDLIST newpidl;
- if (!pidl)
- return NULL;
+ if (!pidl)
+ return NULL;
- len = ILGetSize(pidl);
- newpidl = (LPITEMIDLIST)SHAlloc(len);
- if (newpidl)
- memcpy(newpidl,pidl,len);
+ len = ILGetSize(pidl);
+ newpidl = (LPITEMIDLIST)SHAlloc(len);
+ if (newpidl)
+ memcpy(newpidl,pidl,len);
- TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
- pdump(pidl);
+ TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
+ pdump(pidl);
- return newpidl;
+ return newpidl;
}
+
/***********************************************************************
**
* ILCloneFirst [SHELL32.19]
*
@@ -245,27 +250,28 @@
* duplicates the first idlist of a complex pidl
*/
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
-{ DWORD len;
- LPITEMIDLIST pidlNew = NULL;
+{
+ DWORD len;
+ LPITEMIDLIST pidlNew = NULL;
- TRACE("pidl=%p \n",pidl);
- pdump(pidl);
+ TRACE("pidl=%p \n",pidl);
+ pdump(pidl);
- if (pidl)
- {
- len = pidl->mkid.cb;
- pidlNew = (LPITEMIDLIST) SHAlloc (len+2);
- if (pidlNew)
- {
- memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop
pidl */
+ if (pidl)
+ {
+ len = pidl->mkid.cb;
+ pidlNew = (LPITEMIDLIST) SHAlloc (len+2);
+ if (pidlNew)
+ {
+ memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop
pidl */
- if (len)
- ILGetNext(pidlNew)->mkid.cb = 0x00;
- }
- }
- TRACE("-- newpidl=%p\n",pidlNew);
+ if (len)
+ ILGetNext(pidlNew)->mkid.cb = 0x00;
+ }
+ }
+ TRACE("-- newpidl=%p\n",pidlNew);
- return pidlNew;
+ return pidlNew;
}
/***********************************************************************
**
@@ -275,51 +281,58 @@
* the first two bytes are the len, the pidl is following then
*/
HRESULT WINAPI ILLoadFromStream (IStream * pStream, LPITEMIDLIST *
ppPidl)
-{ WORD wLen = 0;
- DWORD dwBytesRead;
- HRESULT ret = E_FAIL;
+{
+ WORD wLen = 0;
+ DWORD dwBytesRead;
+ HRESULT ret = E_FAIL;
- TRACE_(shell)("%p %p\n", pStream , ppPidl);
+ TRACE_(shell)("%p %p\n", pStream , ppPidl);
- if (*ppPidl)
- { SHFree(*ppPidl);
- *ppPidl = NULL;
- }
+ if (*ppPidl)
+ {
+ SHFree(*ppPidl);
+ *ppPidl = NULL;
+ }
- IStream_AddRef (pStream);
+ IStream_AddRef (pStream);
- if (SUCCEEDED(IStream_Read(pStream, (LPVOID)&wLen, 2,
&dwBytesRead)))
- {
- TRACE("PIDL length is %d\n", wLen);
- if (wLen != 0) {
- *ppPidl = SHAlloc (wLen);
- if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen,
&dwBytesRead))) {
- TRACE("Stream read OK\n");
- ret = S_OK;
- } else {
- WARN("reading pidl failed\n");
- SHFree(*ppPidl);
- *ppPidl = NULL;
- }
- } else {
- *ppPidl = NULL;
- ret = S_OK;
- }
- }
+ if (SUCCEEDED(IStream_Read(pStream, (LPVOID)&wLen, 2,
&dwBytesRead)))
+ {
+ TRACE("PIDL length is %d\n", wLen);
+ if (wLen != 0)
+ {
+ *ppPidl = SHAlloc (wLen);
+ if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen,
&dwBytesRead)))
+ {
+ TRACE("Stream read OK\n");
+ ret = S_OK;
+ }
+ else
+ {
+ WARN("reading pidl failed\n");
+ SHFree(*ppPidl);
+ *ppPidl = NULL;
+ }
+ }
+ else
+ {
+ *ppPidl = NULL;
+ ret = S_OK;
+ }
+ }
- /* we are not yet fully compatible */
- if (*ppPidl && !pcheck(*ppPidl))
- {
- WARN("Check failed\n");
- SHFree(*ppPidl);
- *ppPidl = NULL;
- }
+ /* we are not yet fully compatible */
+ if (*ppPidl && !pcheck(*ppPidl))
+ {
+ WARN("Check failed\n");
+ SHFree(*ppPidl);
+ *ppPidl = NULL;
+ }
-
- IStream_Release (pStream);
- TRACE("done\n");
- return ret;
+ IStream_Release (pStream);
+ TRACE("done\n");
+ return ret;
}
/***********************************************************************
**
@@ -330,30 +343,29 @@
*/
HRESULT WINAPI ILSaveToStream (IStream * pStream, LPCITEMIDLIST pPidl)
{
- LPCITEMIDLIST pidl;
- WORD wLen = 0;
- HRESULT ret = E_FAIL;
+ LPCITEMIDLIST pidl;
+ WORD wLen = 0;
+ HRESULT ret = E_FAIL;
- TRACE_(shell)("%p %p\n", pStream, pPidl);
+ TRACE_(shell)("%p %p\n", pStream, pPidl);
- IStream_AddRef (pStream);
+ IStream_AddRef (pStream);
- pidl = pPidl;
- while (pidl->mkid.cb)
- {
- wLen += sizeof(WORD) + pidl->mkid.cb;
- pidl = ILGetNext(pidl);
- }
+ pidl = pPidl;
+ while (pidl->mkid.cb)
+ {
+ wLen += sizeof(WORD) + pidl->mkid.cb;
+ pidl = ILGetNext(pidl);
+ }
- if (SUCCEEDED(IStream_Write(pStream, (LPVOID)&wLen, 2, NULL)))
- {
- if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
- { ret = S_OK;
- }
- }
- IStream_Release (pStream);
+ if (SUCCEEDED(IStream_Write(pStream, (LPVOID)&wLen, 2, NULL)))
+ {
+ if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
+ ret = S_OK;
+ }
+ IStream_Release (pStream);
- return ret;
+ return ret;
}
/***********************************************************************
**
@@ -375,45 +387,37 @@
*/
HRESULT WINAPI SHILCreateFromPathA(LPCSTR path, LPITEMIDLIST * ppidl,
DWORD * attributes)
{
- LPSHELLFOLDER sf;
- WCHAR lpszDisplayName[MAX_PATH];
- DWORD pchEaten;
- HRESULT ret = E_FAIL;
+ WCHAR lpszDisplayName[MAX_PATH];
- TRACE_(shell)("%s %p 0x%08lx\n", path, ppidl, attributes ?
*attributes : 0);
+ TRACE_(shell)("%s %p 0x%08lx\n", path, ppidl, attributes ?
*attributes : 0);
- if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName,
MAX_PATH))
- lpszDisplayName[MAX_PATH-1] = 0;
+ if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName,
MAX_PATH))
+ lpszDisplayName[MAX_PATH-1] = 0;
- if (SUCCEEDED (SHGetDesktopFolder(&sf)))
- {
- ret = IShellFolder_ParseDisplayName(sf, 0, NULL,
lpszDisplayName, &pchEaten, ppidl, attributes);
- IShellFolder_Release(sf);
- }
- return ret;
+ return SHILCreateFromPathW(lpszDisplayName, ppidl, attributes);
}
HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST * ppidl,
DWORD * attributes)
{
- LPSHELLFOLDER sf;
- DWORD pchEaten;
- HRESULT ret = E_FAIL;
+ LPSHELLFOLDER sf;
+ DWORD pchEaten;
+ HRESULT ret = E_FAIL;
- TRACE_(shell)("%s %p 0x%08lx\n", debugstr_w(path), ppidl,
attributes ? *attributes : 0);
+ TRACE_(shell)("%s %p 0x%08lx\n", debugstr_w(path), ppidl,
attributes ? *attributes : 0);
- if (SUCCEEDED (SHGetDesktopFolder(&sf)))
- {
- ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path,
&pchEaten, ppidl, attributes);
- IShellFolder_Release(sf);
- }
- return ret;
+ if (SUCCEEDED (SHGetDesktopFolder(&sf)))
+ {
+ ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path,
&pchEaten, ppidl, attributes);
+ IShellFolder_Release(sf);
+ }
+ return ret;
}
HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST *
ppidl, DWORD * attributes)
{
- if ( SHELL_OsIsUnicode())
- return SHILCreateFromPathW (path, ppidl, attributes);
- return SHILCreateFromPathA (path, ppidl, attributes);
+ if ( SHELL_OsIsUnicode())
+ return SHILCreateFromPathW (path, ppidl, attributes);
+ return SHILCreateFromPathA (path, ppidl, attributes);
}
/***********************************************************************
**
@@ -422,9 +426,9 @@
* Create an ItemIDList to one of the special folders.
* PARAMS
- * hwndOwner [in]
- * nFolder [in] CSIDL_xxxxx
- * fCreate [in] Create folder if it does not exist
+ * hwndOwner [in]
+ * nFolder [in] CSIDL_xxxxx
+ * fCreate [in] Create folder if it does not exist
*
* RETURNS
* Success: The newly created pidl
@@ -436,14 +440,15 @@
* shells IMalloc interface, aka ILFree.
*/
LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, DWORD nFolder,
BOOL fCreate)
-{ LPITEMIDLIST ppidl;
- TRACE_(shell)("(hwnd=%p,csidl=0x%lx,%s).\n", hwndOwner, nFolder,
fCreate ? "T" : "F");
+{
+ LPITEMIDLIST ppidl;
+ TRACE_(shell)("(hwnd=%p,csidl=0x%lx,%s).\n", hwndOwner, nFolder,
fCreate ? "T" : "F");
- if (fCreate)
- nFolder |= CSIDL_FLAG_CREATE;
+ if (fCreate)
+ nFolder |= CSIDL_FLAG_CREATE;
- SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
- return ppidl;
+ SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
+ return ppidl;
}
/***********************************************************************
**
@@ -461,21 +466,22 @@
* exported by ordinal.
*/
[truncated at 1000 lines; 10092 more skipped]