Piotr Caban : oleacc: Add IOleWindow interface stub to default window accessible object.
Module: wine Branch: master Commit: 69ab9da0da71e880bf8f7908f575009d0cd65cf2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=69ab9da0da71e880bf8f7908f5... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Thu May 15 17:53:24 2014 +0200 oleacc: Add IOleWindow interface stub to default window accessible object. --- dlls/oleacc/window.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/dlls/oleacc/window.c b/dlls/oleacc/window.c index 45c53fc..f8090b5 100644 --- a/dlls/oleacc/window.c +++ b/dlls/oleacc/window.c @@ -27,6 +27,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(oleacc); typedef struct { IAccessible IAccessible_iface; + IOleWindow IOleWindow_iface; LONG ref; } Window; @@ -46,11 +47,16 @@ static HRESULT WINAPI Window_QueryInterface(IAccessible *iface, REFIID riid, voi IsEqualIID(riid, &IID_IDispatch) || IsEqualIID(riid, &IID_IUnknown)) { *ppv = iface; - IAccessible_AddRef(iface); - return S_OK; + }else if(IsEqualIID(riid, &IID_IOleWindow)) { + *ppv = &This->IOleWindow_iface; + }else { + WARN("no interface: %s\n", debugstr_guid(riid)); + *ppv = NULL; + return E_NOINTERFACE; } - return E_NOINTERFACE; + IAccessible_AddRef(iface); + return S_OK; } static ULONG WINAPI Window_AddRef(IAccessible *iface) @@ -295,6 +301,51 @@ static const IAccessibleVtbl WindowVtbl = { Window_put_accValue }; +static inline Window* impl_from_Window_OleWindow(IOleWindow *iface) +{ + return CONTAINING_RECORD(iface, Window, IOleWindow_iface); +} + +static HRESULT WINAPI Window_OleWindow_QueryInterface(IOleWindow *iface, REFIID riid, void **ppv) +{ + Window *This = impl_from_Window_OleWindow(iface); + return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv); +} + +static ULONG WINAPI Window_OleWindow_AddRef(IOleWindow *iface) +{ + Window *This = impl_from_Window_OleWindow(iface); + return IAccessible_AddRef(&This->IAccessible_iface); +} + +static ULONG WINAPI Window_OleWindow_Release(IOleWindow *iface) +{ + Window *This = impl_from_Window_OleWindow(iface); + return IAccessible_Release(&This->IAccessible_iface); +} + +static HRESULT WINAPI Window_OleWindow_GetWindow(IOleWindow *iface, HWND *phwnd) +{ + Window *This = impl_from_Window_OleWindow(iface); + FIXME("(%p)->(%p)\n", This, phwnd); + return E_NOTIMPL; +} + +static HRESULT WINAPI Window_OleWindow_ContextSensitiveHelp(IOleWindow *iface, BOOL fEnterMode) +{ + Window *This = impl_from_Window_OleWindow(iface); + FIXME("(%p)->(%x)\n", This, fEnterMode); + return E_NOTIMPL; +} + +static const IOleWindowVtbl WindowOleWindowVtbl = { + Window_OleWindow_QueryInterface, + Window_OleWindow_AddRef, + Window_OleWindow_Release, + Window_OleWindow_GetWindow, + Window_OleWindow_ContextSensitiveHelp +}; + HRESULT create_window_object(HWND hwnd, const IID *iid, void **obj) { Window *window; @@ -308,6 +359,7 @@ HRESULT create_window_object(HWND hwnd, const IID *iid, void **obj) return E_OUTOFMEMORY; window->IAccessible_iface.lpVtbl = &WindowVtbl; + window->IOleWindow_iface.lpVtbl = &WindowOleWindowVtbl; window->ref = 1; hres = IAccessible_QueryInterface(&window->IAccessible_iface, iid, obj);
participants (1)
-
Alexandre Julliard