Author: akhaldi Date: Mon Jul 20 21:52:13 2015 New Revision: 68483
URL: http://svn.reactos.org/svn/reactos?rev=68483&view=rev Log: [OLEACC] Sync with Wine Staging 1.7.47. CORE-9924
Added: trunk/reactos/dll/win32/oleacc/guid.c (with props) trunk/reactos/dll/win32/oleacc/oleacc_classes_r.rgs - copied, changed from r68415, trunk/reactos/dll/win32/oleacc/oleacc_classes.rgs trunk/reactos/dll/win32/oleacc/oleacc_classes_t.rgs (with props) Removed: trunk/reactos/dll/win32/oleacc/oleacc_classes.rgs Modified: trunk/reactos/dll/win32/oleacc/CMakeLists.txt trunk/reactos/dll/win32/oleacc/client.c trunk/reactos/dll/win32/oleacc/main.c trunk/reactos/dll/win32/oleacc/oleacc.rc trunk/reactos/dll/win32/oleacc/oleacc.spec trunk/reactos/dll/win32/oleacc/oleacc_classes.idl trunk/reactos/dll/win32/oleacc/oleacc_private.h trunk/reactos/dll/win32/oleacc/propservice.c trunk/reactos/dll/win32/oleacc/window.c trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/win32/oleacc/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/CMakeLists... ============================================================================== --- trunk/reactos/dll/win32/oleacc/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/CMakeLists.txt [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -1,5 +1,10 @@
-add_definitions(-D__WINESRC__) +add_definitions( + -D__WINESRC__ + -DENTRY_PREFIX=OLEACC_ + -DPROXY_DELEGATION + -DWINE_REGISTER_DLL) + include_directories(${REACTOS_SOURCE_DIR}/include/reactos/wine) spec2def(oleacc.dll oleacc.spec ADD_IMPORTLIB)
@@ -8,25 +13,31 @@ main.c propservice.c window.c - oleacc_private.h) + oleacc_private.h + ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c)
+add_idl_headers(oleacc_idlheader oleacc_classes.idl) add_typelib(oleacc_classes.idl) +add_rpcproxy_files(oleacc_classes.idl)
list(APPEND oleacc_rc_deps - ${CMAKE_CURRENT_SOURCE_DIR}/oleacc_classes.rgs + ${CMAKE_CURRENT_SOURCE_DIR}/oleacc_classes_r.rgs + ${CMAKE_CURRENT_SOURCE_DIR}/oleacc_classes_t.rgs ${CMAKE_CURRENT_BINARY_DIR}/oleacc_classes.tlb)
set_source_files_properties(oleacc.rc PROPERTIES OBJECT_DEPENDS "${oleacc_rc_deps}")
add_library(oleacc SHARED ${SOURCE} + guid.c oleacc.rc + ${CMAKE_CURRENT_BINARY_DIR}/oleacc_classes_p.c ${CMAKE_CURRENT_BINARY_DIR}/oleacc_stubs.c ${CMAKE_CURRENT_BINARY_DIR}/oleacc.def)
-add_dependencies(oleacc stdole2) +add_dependencies(oleacc oleacc_idlheader stdole2) set_module_type(oleacc win32dll) -target_link_libraries(oleacc uuid wine) -add_importlibs(oleacc oleaut32 ole32 user32 msvcrt kernel32 ntdll) +target_link_libraries(oleacc uuid wine ${PSEH_LIB}) +add_importlibs(oleacc oleaut32 ole32 user32 rpcrt4 msvcrt kernel32 ntdll) add_pch(oleacc oleacc_private.h SOURCE) add_cd_file(TARGET oleacc DESTINATION reactos/system32 FOR all)
Modified: trunk/reactos/dll/win32/oleacc/client.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/client.c?r... ============================================================================== --- trunk/reactos/dll/win32/oleacc/client.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/client.c [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -21,10 +21,12 @@ typedef struct { IAccessible IAccessible_iface; IOleWindow IOleWindow_iface; + IEnumVARIANT IEnumVARIANT_iface;
LONG ref;
HWND hwnd; + HWND enum_pos; } Client;
static inline Client* impl_from_Client(IAccessible *iface) @@ -44,6 +46,8 @@ *ppv = iface; }else if(IsEqualIID(riid, &IID_IOleWindow)) { *ppv = &This->IOleWindow_iface; + }else if(IsEqualIID(riid, &IID_IEnumVARIANT)) { + *ppv = &This->IEnumVARIANT_iface; }else { WARN("no interface: %s\n", debugstr_guid(riid)); *ppv = NULL; @@ -137,8 +141,11 @@ VARIANT varChildID, IDispatch **ppdispChild) { Client *This = impl_from_Client(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varChildID), ppdispChild); - return E_NOTIMPL; + + TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&varChildID), ppdispChild); + + *ppdispChild = NULL; + return E_INVALIDARG; }
static HRESULT WINAPI Client_get_accName(IAccessible *iface, VARIANT varID, BSTR *pszName) @@ -486,6 +493,128 @@ Client_OleWindow_ContextSensitiveHelp };
+static inline Client* impl_from_Client_EnumVARIANT(IEnumVARIANT *iface) +{ + return CONTAINING_RECORD(iface, Client, IEnumVARIANT_iface); +} + +static HRESULT WINAPI Client_EnumVARIANT_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppv) +{ + Client *This = impl_from_Client_EnumVARIANT(iface); + return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv); +} + +static ULONG WINAPI Client_EnumVARIANT_AddRef(IEnumVARIANT *iface) +{ + Client *This = impl_from_Client_EnumVARIANT(iface); + return IAccessible_AddRef(&This->IAccessible_iface); +} + +static ULONG WINAPI Client_EnumVARIANT_Release(IEnumVARIANT *iface) +{ + Client *This = impl_from_Client_EnumVARIANT(iface); + return IAccessible_Release(&This->IAccessible_iface); +} + +static HRESULT WINAPI Client_EnumVARIANT_Next(IEnumVARIANT *iface, + ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched) +{ + Client *This = impl_from_Client_EnumVARIANT(iface); + HWND cur = This->enum_pos, next; + ULONG fetched = 0; + HRESULT hr; + + TRACE("(%p)->(%u %p %p)\n", This, celt, rgVar, pCeltFetched); + + if(!celt) { + if(pCeltFetched) + *pCeltFetched = 0; + return S_OK; + } + + if(!This->enum_pos) + next = GetWindow(This->hwnd, GW_CHILD); + else + next = GetWindow(This->enum_pos, GW_HWNDNEXT); + + while(next) { + cur = next; + + V_VT(rgVar+fetched) = VT_DISPATCH; + hr = AccessibleObjectFromWindow(cur, OBJID_WINDOW, + &IID_IDispatch, (void**)&V_DISPATCH(rgVar+fetched)); + if(FAILED(hr)) { + V_VT(rgVar+fetched) = VT_EMPTY; + while(fetched > 0) { + VariantClear(rgVar+fetched-1); + fetched--; + } + if(pCeltFetched) + *pCeltFetched = 0; + return hr; + } + fetched++; + if(fetched == celt) + break; + + next = GetWindow(cur, GW_HWNDNEXT); + } + + This->enum_pos = cur; + if(pCeltFetched) + *pCeltFetched = fetched; + return celt == fetched ? S_OK : S_FALSE; +} + +static HRESULT WINAPI Client_EnumVARIANT_Skip(IEnumVARIANT *iface, ULONG celt) +{ + Client *This = impl_from_Client_EnumVARIANT(iface); + HWND next; + + TRACE("(%p)->(%u)\n", This, celt); + + while(celt) { + if(!This->enum_pos) + next = GetWindow(This->hwnd, GW_CHILD); + else + next = GetWindow(This->enum_pos, GW_HWNDNEXT); + if(!next) + return S_FALSE; + + This->enum_pos = next; + celt--; + } + + return S_OK; +} + +static HRESULT WINAPI Client_EnumVARIANT_Reset(IEnumVARIANT *iface) +{ + Client *This = impl_from_Client_EnumVARIANT(iface); + + TRACE("(%p)\n", This); + + This->enum_pos = 0; + return S_OK; +} + +static HRESULT WINAPI Client_EnumVARIANT_Clone(IEnumVARIANT *iface, IEnumVARIANT **ppEnum) +{ + Client *This = impl_from_Client_EnumVARIANT(iface); + FIXME("(%p)->(%p)\n", This, ppEnum); + return E_NOTIMPL; +} + +static const IEnumVARIANTVtbl ClientEnumVARIANTVtbl = { + Client_EnumVARIANT_QueryInterface, + Client_EnumVARIANT_AddRef, + Client_EnumVARIANT_Release, + Client_EnumVARIANT_Next, + Client_EnumVARIANT_Skip, + Client_EnumVARIANT_Reset, + Client_EnumVARIANT_Clone +}; + HRESULT create_client_object(HWND hwnd, const IID *iid, void **obj) { Client *client; @@ -500,8 +629,10 @@
client->IAccessible_iface.lpVtbl = &ClientVtbl; client->IOleWindow_iface.lpVtbl = &ClientOleWindowVtbl; + client->IEnumVARIANT_iface.lpVtbl = &ClientEnumVARIANTVtbl; client->ref = 1; client->hwnd = hwnd; + client->enum_pos = 0;
hres = IAccessible_QueryInterface(&client->IAccessible_iface, iid, obj); IAccessible_Release(&client->IAccessible_iface);
Added: trunk/reactos/dll/win32/oleacc/guid.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/guid.c?rev... ============================================================================== --- trunk/reactos/dll/win32/oleacc/guid.c (added) +++ trunk/reactos/dll/win32/oleacc/guid.c [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -0,0 +1,15 @@ +/* DO NOT USE THE PRECOMPILED HEADER FOR THIS FILE! */ + +#include <stdarg.h> + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H + +#include <windef.h> +#include <winbase.h> +#include <objbase.h> +#include <initguid.h> +#include <oleacc_classes.h> + +/* NO CODE HERE, THIS IS JUST REQUIRED FOR THE GUID DEFINITIONS */
Propchange: trunk/reactos/dll/win32/oleacc/guid.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/dll/win32/oleacc/main.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/main.c?rev... ============================================================================== --- trunk/reactos/dll/win32/oleacc/main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/main.c [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -39,6 +39,11 @@ static const WCHAR richedit20wW[] = {'R','i','c','h','E','d','i','t','2','0','W',0};
typedef HRESULT (WINAPI *accessible_create)(HWND, const IID*, void**); + +extern HRESULT WINAPI OLEACC_DllGetClassObject(REFCLSID, REFIID, void**) DECLSPEC_HIDDEN; +extern BOOL WINAPI OLEACC_DllMain(HINSTANCE, DWORD, void*) DECLSPEC_HIDDEN; +extern HRESULT WINAPI OLEACC_DllRegisterServer(void) DECLSPEC_HIDDEN; +extern HRESULT WINAPI OLEACC_DllUnregisterServer(void) DECLSPEC_HIDDEN;
static struct { const WCHAR *name; @@ -397,25 +402,45 @@ DisableThreadLibraryCalls(hinstDLL); break; } - return TRUE; + + return OLEACC_DllMain(hinstDLL, fdwReason, lpvReserved); }
HRESULT WINAPI DllRegisterServer(void) { - TRACE("()\n"); - return __wine_register_resources(oleacc_handle); + return OLEACC_DllRegisterServer(); }
HRESULT WINAPI DllUnregisterServer(void) { - TRACE("()\n"); - return __wine_unregister_resources(oleacc_handle); + return OLEACC_DllUnregisterServer(); +} + +HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, void **ppv) +{ + if(IsEqualGUID(&CLSID_CAccPropServices, rclsid)) { + TRACE("(CLSID_CAccPropServices %s %p)\n", debugstr_guid(iid), ppv); + return get_accpropservices_factory(iid, ppv); + } + + if(IsEqualGUID(&CLSID_PSFactoryBuffer, rclsid)) { + TRACE("(CLSID_PSFactoryBuffer %s %p)\n", debugstr_guid(iid), ppv); + return OLEACC_DllGetClassObject(rclsid, iid, ppv); + } + + FIXME("%s %s %p: stub\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv); + return E_NOTIMPL; }
void WINAPI GetOleaccVersionInfo(DWORD* pVersion, DWORD* pBuild) { +#ifdef __REACTOS__ *pVersion = MAKELONG(2,4); /* Windows XP version of oleacc: 4.2.5406.0 */ *pBuild = MAKELONG(0,5406); +#else + *pVersion = MAKELONG(0,7); /* Windows 7 version of oleacc: 7.0.0.0 */ + *pBuild = MAKELONG(0,0); +#endif }
HANDLE WINAPI GetProcessHandleFromHwnd(HWND hwnd) @@ -559,3 +584,50 @@ return LoadStringA(oleacc_handle, state_id, tmp, sizeof(tmp)); } } + +HRESULT WINAPI AccessibleChildren(IAccessible *container, + LONG start, LONG count, VARIANT *children, LONG *children_cnt) +{ + IEnumVARIANT *ev; + LONG i, child_no; + HRESULT hr; + + TRACE("%p %d %d %p %p\n", container, start, count, children, children_cnt); + + if(!container || !children || !children_cnt) + return E_INVALIDARG; + + for(i=0; i<count; i++) + VariantInit(children+i); + + hr = IAccessible_QueryInterface(container, &IID_IEnumVARIANT, (void**)&ev); + if(SUCCEEDED(hr)) { + hr = IEnumVARIANT_Reset(ev); + if(SUCCEEDED(hr)) + hr = IEnumVARIANT_Skip(ev, start); + if(SUCCEEDED(hr)) + hr = IEnumVARIANT_Next(ev, count, children, (ULONG*)children_cnt); + IEnumVARIANT_Release(ev); + return hr; + } + + hr = IAccessible_get_accChildCount(container, &child_no); + if(FAILED(hr)) + return hr; + + for(i=0; i<count && start+i+1<=child_no; i++) { + IDispatch *disp; + + V_VT(children+i) = VT_I4; + V_I4(children+i) = start+i+1; + + hr = IAccessible_get_accChild(container, children[i], &disp); + if(SUCCEEDED(hr) && disp) { + V_VT(children+i) = VT_DISPATCH; + V_DISPATCH(children+i) = disp; + } + } + + *children_cnt = i; + return i==count ? S_OK : S_FALSE; +}
Modified: trunk/reactos/dll/win32/oleacc/oleacc.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc.rc?... ============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc.rc [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -24,7 +24,8 @@ #include "resource.h"
1 TYPELIB "oleacc_classes.tlb" -1 WINE_REGISTRY "oleacc_classes.rgs" +1 WINE_REGISTRY "oleacc_classes_r.rgs" +2 WINE_REGISTRY "oleacc_classes_t.rgs"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
Modified: trunk/reactos/dll/win32/oleacc/oleacc.spec URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc.spe... ============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc.spec [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc.spec [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -1,4 +1,4 @@ -@ stub AccessibleChildren +@ stdcall AccessibleChildren(ptr long long ptr ptr) @ stub AccessibleObjectFromEvent @ stdcall AccessibleObjectFromPoint(int64 ptr ptr) @ stdcall AccessibleObjectFromWindow(ptr long ptr ptr)
Modified: trunk/reactos/dll/win32/oleacc/oleacc_classes.idl URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_cla... ============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_classes.idl [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_classes.idl [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -17,5 +17,13 @@ */
#pragma makedep regtypelib +#pragma makedep proxy +#pragma makedep register
#include "oleacc.idl" + +[ + threading(both), + uuid(03022430-abc4-11d0-bde2-00aa001a1953) /* IAccessibleHandler */ +] +coclass PSFactoryBuffer { interface IFactoryBuffer; }
Removed: trunk/reactos/dll/win32/oleacc/oleacc_classes.rgs URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_cla... ============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_classes.rgs [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_classes.rgs (removed) @@ -1,20 +0,0 @@ -HKCR -{ - NoRemove Typelib - { - NoRemove '{1EA4DBF0-3C3B-11CF-810C-00AA00389B71}' - { - '1.1' = s 'Accessibility' - { - '0' { win32 = s '%MODULE%' } - FLAGS = s '4' - } - } - } - NoRemove Interface - { - } - NoRemove CLSID - { - } -}
Copied: trunk/reactos/dll/win32/oleacc/oleacc_classes_r.rgs (from r68415, trunk/reactos/dll/win32/oleacc/oleacc_classes.rgs) URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_cla... ============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_classes.rgs [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_classes_r.rgs [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -1,20 +1,38 @@ HKCR { - NoRemove Typelib - { - NoRemove '{1EA4DBF0-3C3B-11CF-810C-00AA00389B71}' - { - '1.1' = s 'Accessibility' - { - '0' { win32 = s '%MODULE%' } - FLAGS = s '4' - } - } - } NoRemove Interface { + '{618736E0-3C3D-11CF-810C-00AA00389B71}' = s 'IAccessible' + { + NumMethods = s 28 + ProxyStubClsid32 = s '{03022430-ABC4-11D0-BDE2-00AA001A1953}' + } + '{03022430-ABC4-11D0-BDE2-00AA001A1953}' = s 'IAccessibleHandler' + { + NumMethods = s 4 + ProxyStubClsid32 = s '{03022430-ABC4-11D0-BDE2-00AA001A1953}' + } + '{7852B78D-1CFD-41C1-A615-9C0C85960B5F}' = s 'IAccIdentity' + { + NumMethods = s 4 + ProxyStubClsid32 = s '{03022430-ABC4-11D0-BDE2-00AA001A1953}' + } + '{76C0DBBB-15E0-4E7B-B61B-20EEEA2001E0}' = s 'IAccPropServer' + { + NumMethods = s 4 + ProxyStubClsid32 = s '{03022430-ABC4-11D0-BDE2-00AA001A1953}' + } + '{6E26E776-04F0-495D-80E4-3330352E3169}' = s 'IAccPropServices' + { + NumMethods = s 18 + ProxyStubClsid32 = s '{03022430-ABC4-11D0-BDE2-00AA001A1953}' + } } NoRemove CLSID { + '{03022430-ABC4-11D0-BDE2-00AA001A1953}' = s 'PSFactoryBuffer' + { + InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } + } } }
Added: trunk/reactos/dll/win32/oleacc/oleacc_classes_t.rgs URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_cla... ============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_classes_t.rgs (added) +++ trunk/reactos/dll/win32/oleacc/oleacc_classes_t.rgs [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -0,0 +1,26 @@ +HKCR +{ + NoRemove Typelib + { + NoRemove '{1EA4DBF0-3C3B-11CF-810C-00AA00389B71}' + { + '1.1' = s 'Accessibility' + { + '0' { win32 = s '%MODULE%' } + FLAGS = s '4' + } + } + } + NoRemove Interface + { + } + NoRemove CLSID + { + '{B5F8350B-0548-48B1-A6EE-88BD00B4A5E7}' = s 'CAccPropServices' + { + InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } + TypeLib = s '{1EA4DBF0-3C3B-11CF-810C-00AA00389B71}' + Version = s '1.1' + } + } +}
Propchange: trunk/reactos/dll/win32/oleacc/oleacc_classes_t.rgs ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/dll/win32/oleacc/oleacc_private.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_pri... ============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_private.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_private.h [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -28,13 +28,14 @@ #include <windef.h> #include <winbase.h> #include <ole2.h> -#include <oleacc.h> +#include <oleacc_classes.h>
#include <wine/debug.h> WINE_DEFAULT_DEBUG_CHANNEL(oleacc);
HRESULT create_client_object(HWND, const IID*, void**) DECLSPEC_HIDDEN; HRESULT create_window_object(HWND, const IID*, void**) DECLSPEC_HIDDEN; +HRESULT get_accpropservices_factory(REFIID, void**) DECLSPEC_HIDDEN;
int convert_child_id(VARIANT *v) DECLSPEC_HIDDEN;
Modified: trunk/reactos/dll/win32/oleacc/propservice.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/propservic... ============================================================================== --- trunk/reactos/dll/win32/oleacc/propservice.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/propservice.c [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -236,13 +236,7 @@
static IClassFactory CAccPropServicesFactory = { &CAccPropServicesFactoryVtbl };
-HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, void **ppv) -{ - if(IsEqualGUID(&CLSID_CAccPropServices, rclsid)) { - TRACE("(CLSID_CAccPropServices %s %p)\n", debugstr_guid(iid), ppv); - return IClassFactory_QueryInterface(&CAccPropServicesFactory, iid, ppv); - } - - FIXME("%s %s %p: stub\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv); - return E_NOTIMPL; -} +HRESULT get_accpropservices_factory(REFIID riid, void **ppv) +{ + return IClassFactory_QueryInterface(&CAccPropServicesFactory, riid, ppv); +}
Modified: trunk/reactos/dll/win32/oleacc/window.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/window.c?r... ============================================================================== --- trunk/reactos/dll/win32/oleacc/window.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/window.c [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -21,6 +21,7 @@ typedef struct { IAccessible IAccessible_iface; IOleWindow IOleWindow_iface; + IEnumVARIANT IEnumVARIANT_iface;
LONG ref; } Window; @@ -42,6 +43,8 @@ *ppv = iface; }else if(IsEqualIID(riid, &IID_IOleWindow)) { *ppv = &This->IOleWindow_iface; + }else if(IsEqualIID(riid, &IID_IEnumVARIANT)) { + *ppv = &This->IEnumVARIANT_iface; }else { WARN("no interface: %s\n", debugstr_guid(riid)); *ppv = NULL; @@ -339,6 +342,68 @@ Window_OleWindow_ContextSensitiveHelp };
+static inline Window* impl_from_Window_EnumVARIANT(IEnumVARIANT *iface) +{ + return CONTAINING_RECORD(iface, Window, IEnumVARIANT_iface); +} + +static HRESULT WINAPI Window_EnumVARIANT_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppv) +{ + Window *This = impl_from_Window_EnumVARIANT(iface); + return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv); +} + +static ULONG WINAPI Window_EnumVARIANT_AddRef(IEnumVARIANT *iface) +{ + Window *This = impl_from_Window_EnumVARIANT(iface); + return IAccessible_AddRef(&This->IAccessible_iface); +} + +static ULONG WINAPI Window_EnumVARIANT_Release(IEnumVARIANT *iface) +{ + Window *This = impl_from_Window_EnumVARIANT(iface); + return IAccessible_Release(&This->IAccessible_iface); +} + +static HRESULT WINAPI Window_EnumVARIANT_Next(IEnumVARIANT *iface, + ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched) +{ + Window *This = impl_from_Window_EnumVARIANT(iface); + FIXME("(%p)->(%u %p %p)\n", This, celt, rgVar, pCeltFetched); + return E_NOTIMPL; +} + +static HRESULT WINAPI Window_EnumVARIANT_Skip(IEnumVARIANT *iface, ULONG celt) +{ + Window *This = impl_from_Window_EnumVARIANT(iface); + FIXME("(%p)->(%u)\n", This, celt); + return E_NOTIMPL; +} + +static HRESULT WINAPI Window_EnumVARIANT_Reset(IEnumVARIANT *iface) +{ + Window *This = impl_from_Window_EnumVARIANT(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI Window_EnumVARIANT_Clone(IEnumVARIANT *iface, IEnumVARIANT **ppEnum) +{ + Window *This = impl_from_Window_EnumVARIANT(iface); + FIXME("(%p)->(%p)\n", This, ppEnum); + return E_NOTIMPL; +} + +static const IEnumVARIANTVtbl WindowEnumVARIANTVtbl = { + Window_EnumVARIANT_QueryInterface, + Window_EnumVARIANT_AddRef, + Window_EnumVARIANT_Release, + Window_EnumVARIANT_Next, + Window_EnumVARIANT_Skip, + Window_EnumVARIANT_Reset, + Window_EnumVARIANT_Clone +}; + HRESULT create_window_object(HWND hwnd, const IID *iid, void **obj) { Window *window; @@ -353,6 +418,7 @@
window->IAccessible_iface.lpVtbl = &WindowVtbl; window->IOleWindow_iface.lpVtbl = &WindowOleWindowVtbl; + window->IEnumVARIANT_iface.lpVtbl = &WindowEnumVARIANTVtbl; window->ref = 1;
hres = IAccessible_QueryInterface(&window->IAccessible_iface, iid, obj);
Modified: trunk/reactos/media/doc/README.WINE URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=6... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Mon Jul 20 21:52:13 2015 @@ -146,7 +146,7 @@ reactos/dll/win32/odbc32 # Synced to WineStaging-1.7.37. Depends on port of Linux ODBC. reactos/dll/win32/odbccp32 # Synced to WineStaging-1.7.47 reactos/dll/win32/ole32 # Synced to WineStaging-1.7.47 -reactos/dll/win32/oleacc # Synced to WineStaging-1.7.37 +reactos/dll/win32/oleacc # Synced to WineStaging-1.7.47 reactos/dll/win32/oleaut32 # Synced to WineStaging-1.7.37 reactos/dll/win32/olecli32 # Synced to WineStaging-1.7.37 reactos/dll/win32/oledlg # Synced to WineStaging-1.7.37