Author: mjansen
Date: Mon Apr 11 18:28:31 2016
New Revision: 71144
URL: http://svn.reactos.org/svn/reactos?rev=71144=rev
Log:
[SHELL32][SHELL32_WINETEST] Connect CDefViewDual to CDefView to fix crashes in
the shelldispatch test ROSTESTS-209
- CDefViewDual::get_Application now returns a new CDefView to fix the winetest.
- Update CFolder, CFolderItem(s), CFolderItemVerb(s), CShell to use the new
IDispatchImpl
- Enable the last two skipped testcases (test_ShellFolderViewDual,
test_ShellWindows)
Modified:
trunk/reactos/dll/win32/shell32/CDefViewDual.cpp
trunk/reactos/dll/win32/shell32/CFolder.cpp
trunk/reactos/dll/win32/shell32/CFolder.h
trunk/reactos/dll/win32/shell32/CFolderItemVerbs.cpp
trunk/reactos/dll/win32/shell32/CFolderItemVerbs.h
trunk/reactos/dll/win32/shell32/CFolderItems.cpp
trunk/reactos/dll/win32/shell32/CFolderItems.h
trunk/reactos/dll/win32/shell32/CShell.cpp
trunk/reactos/dll/win32/shell32/CShell.h
trunk/reactos/dll/win32/shell32/wine/shell32_main.h
trunk/rostests/winetests/shell32/shelldispatch.c
Modified: trunk/reactos/dll/win32/shell32/CDefViewDual.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/CDefViewDual.cpp?rev=71144=71143=71144=diff
==
--- trunk/reactos/dll/win32/shell32/CDefViewDual.cpp[iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/CDefViewDual.cpp[iso-8859-1] Mon Apr 11
18:28:31 2016
@@ -46,9 +46,8 @@
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **app)
override
{
if (!app) return E_INVALIDARG;
-*app = NULL;
-FIXME("CDefViewDual::get_Application is UNIMPLEMENTED (%p, %p)\n",
this, app);
-return E_NOTIMPL;
+
+return CShell_Constructor(IID_IDispatch, (LPVOID*)app);
}
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **parent)
override
Modified: trunk/reactos/dll/win32/shell32/CFolder.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/CFolder.cpp?rev=71144=71143=71144=diff
==
--- trunk/reactos/dll/win32/shell32/CFolder.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/CFolder.cpp [iso-8859-1] Mon Apr 11
18:28:31 2016
@@ -36,38 +36,30 @@
m_idlist.Attach(idlist);
}
-// *** IDispatch methods ***
-HRESULT STDMETHODCALLTYPE CFolder::GetTypeInfoCount(UINT *pctinfo)
+HRESULT CFolder::GetShellFolder(CComPtr& psfCurrent)
{
-TRACE("(%p, %p)\n", this, pctinfo);
-return E_NOTIMPL;
+CComPtr psfDesktop;
+
+HRESULT hr = SHGetDesktopFolder();
+if (FAILED_UNEXPECTEDLY(hr))
+return hr;
+
+return psfDesktop->BindToObject(m_idlist, NULL, IID_PPV_ARG(IShellFolder,
));
}
-
-HRESULT STDMETHODCALLTYPE CFolder::GetTypeInfo(UINT iTInfo, LCID lcid,
ITypeInfo **ppTInfo)
-{
-TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
-return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CFolder::GetIDsOfNames(REFIID riid, LPOLESTR
*rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
-{
-TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(),
rgszNames, cNames, lcid, rgDispId);
-return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE CFolder::Invoke(DISPID dispIdMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO
*pExcepInfo, UINT *puArgErr)
-{
-TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember,
wine_dbgstr_guid(), lcid, (DWORD)wFlags,
-pDispParams, pVarResult, pExcepInfo, puArgErr);
-return E_NOTIMPL;
-}
-
// *** Folder methods ***
HRESULT STDMETHODCALLTYPE CFolder::get_Title(BSTR *pbs)
{
-TRACE("(%p, %p)\n", this, pbs);
-return E_NOTIMPL;
+if (!pbs)
+return E_POINTER;
+
+WCHAR path[MAX_PATH+2] = {0};
+HRESULT hr = ILGetDisplayNameExW(NULL, m_idlist, path, ILGDN_INFOLDER);
+if (FAILED_UNEXPECTEDLY(hr))
+return hr;
+
+*pbs = SysAllocString(path);
+return S_OK;
}
HRESULT STDMETHODCALLTYPE CFolder::get_Application(IDispatch **ppid)
@@ -97,15 +89,12 @@
HRESULT STDMETHODCALLTYPE CFolder::ParseName(BSTR bName, FolderItem **ppid)
{
TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName), ppid);
-
-CComPtr psfDesktop;
-
-HRESULT hr = SHGetDesktopFolder();
-if (FAILED_UNEXPECTEDLY(hr))
-return hr;
+if (!ppid)
+return E_POINTER;
+*ppid = NULL;
CComPtr psfCurrent;
-hr = psfDesktop->BindToObject(m_idlist, NULL, IID_PPV_ARG(IShellFolder,
));
+HRESULT hr = GetShellFolder(psfCurrent);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
Modified: trunk/reactos/dll/win32/shell32/CFolder.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/CFolder.h?rev=71144=71143=71144=diff