Module: wine Branch: master Commit: 7ce1813fed11ec657a972e5a4774dcccb128c33c URL: http://source.winehq.org/git/wine.git/?a=commit;h=7ce1813fed11ec657a972e5a47...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri May 8 07:44:13 2015 +0300
shell32: Added IDispatch support for IShellFolderViewDual3.
---
dlls/shell32/shell32_main.h | 10 ++++++++++ dlls/shell32/shelldispatch.c | 13 ++++--------- dlls/shell32/shlview.c | 41 +++++++++++++++++++++++++++++++++-------- 3 files changed, 47 insertions(+), 17 deletions(-)
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h index 954f1e4..18503eb 100644 --- a/dlls/shell32/shell32_main.h +++ b/dlls/shell32/shell32_main.h @@ -229,6 +229,16 @@ BOOL AddToEnumList(IEnumIDListImpl *list, LPITEMIDLIST pidl) DECLSPEC_HIDDEN; */ BOOL CreateFolderEnumList(IEnumIDListImpl *list, LPCWSTR lpszPath, DWORD dwFlags) DECLSPEC_HIDDEN;
+enum tid_t { + NULL_tid, + IShellDispatch6_tid, + IShellFolderViewDual3_tid, + Folder3_tid, + FolderItem2_tid, + LAST_tid +}; + +HRESULT get_typeinfo(enum tid_t, ITypeInfo**) DECLSPEC_HIDDEN; void release_typelib(void) DECLSPEC_HIDDEN; void release_desktop_folder(void) DECLSPEC_HIDDEN;
diff --git a/dlls/shell32/shelldispatch.c b/dlls/shell32/shelldispatch.c index e39d0f1..f168477 100644 --- a/dlls/shell32/shelldispatch.c +++ b/dlls/shell32/shelldispatch.c @@ -34,23 +34,18 @@ #include "shldisp.h" #include "debughlp.h"
+#include "shell32_main.h" + #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-enum tid_t { - NULL_tid, - IShellDispatch6_tid, - Folder3_tid, - FolderItem2_tid, - LAST_tid -}; - static ITypeLib *typelib; static const IID * const tid_ids[] = { &IID_NULL, &IID_IShellDispatch6, + &IID_IShellFolderViewDual3, &IID_Folder3, &IID_FolderItem2 }; @@ -118,7 +113,7 @@ void release_typelib(void) ITypeLib_Release(typelib); }
-static HRESULT get_typeinfo(enum tid_t tid, ITypeInfo **typeinfo) +HRESULT get_typeinfo(enum tid_t tid, ITypeInfo **typeinfo) { HRESULT hr;
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c index 6ddb937..e6691f8 100644 --- a/dlls/shell32/shlview.c +++ b/dlls/shell32/shlview.c @@ -3483,16 +3483,23 @@ static ULONG WINAPI shellfolderviewdual_Release(IShellFolderViewDual3 *iface) static HRESULT WINAPI shellfolderviewdual_GetTypeInfoCount(IShellFolderViewDual3 *iface, UINT *pctinfo) { IShellViewImpl *This = impl_from_IShellFolderViewDual3(iface); - FIXME("%p\n", This); - return E_NOTIMPL; + TRACE("%p %p\n", This, pctinfo); + *pctinfo = 1; + return S_OK; }
static HRESULT WINAPI shellfolderviewdual_GetTypeInfo(IShellFolderViewDual3 *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { IShellViewImpl *This = impl_from_IShellFolderViewDual3(iface); - FIXME("%p\n", This); - return E_NOTIMPL; + HRESULT hr; + + TRACE("(%p,%u,%d,%p)\n", This, iTInfo, lcid, ppTInfo); + + hr = get_typeinfo(IShellFolderViewDual3_tid, ppTInfo); + if (SUCCEEDED(hr)) + ITypeInfo_AddRef(*ppTInfo); + return hr; }
static HRESULT WINAPI shellfolderviewdual_GetIDsOfNames( @@ -3500,8 +3507,16 @@ static HRESULT WINAPI shellfolderviewdual_GetIDsOfNames( cNames, LCID lcid, DISPID *rgDispId) { IShellViewImpl *This = impl_from_IShellFolderViewDual3(iface); - FIXME("%p\n", This); - return E_NOTIMPL; + ITypeInfo *ti; + HRESULT hr; + + TRACE("(%p,%p,%p,%u,%d,%p)\n", This, riid, rgszNames, cNames, lcid, + rgDispId); + + hr = get_typeinfo(IShellFolderViewDual3_tid, &ti); + if (SUCCEEDED(hr)) + hr = ITypeInfo_GetIDsOfNames(ti, rgszNames, cNames, rgDispId); + return hr; }
static HRESULT WINAPI shellfolderviewdual_Invoke(IShellFolderViewDual3 *iface, @@ -3510,8 +3525,18 @@ static HRESULT WINAPI shellfolderviewdual_Invoke(IShellFolderViewDual3 *iface, UINT *puArgErr) { IShellViewImpl *This = impl_from_IShellFolderViewDual3(iface); - FIXME("%p\n", This); - return E_NOTIMPL; + ITypeInfo *ti; + HRESULT hr; + + TRACE("(%p,%d,%p,%d,%u,%p,%p,%p,%p)\n", This, dispIdMember, riid, lcid, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + + hr = get_typeinfo(IShellFolderViewDual3_tid, &ti); + if (SUCCEEDED(hr)) + hr = ITypeInfo_Invoke(ti, &This->IShellFolderViewDual3_iface, dispIdMember, wFlags, pDispParams, + pVarResult, pExcepInfo, puArgErr); + return hr; + }
static HRESULT WINAPI shellfolderviewdual_get_Application(IShellFolderViewDual3 *iface,