From c7b12c10d852045779502d503efd0a84727e9de7 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 20 Apr 2012 07:26:32 -0500 Subject: [PATCH] strmbase: Have BaseControlWindow use BaseDispatch. --- dlls/quartz/videorenderer.c | 2 +- dlls/strmbase/window.c | 36 ++++++++++++++++++++++-------------- include/wine/strmbase.h | 2 ++ 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c index a7b31cf03f4..5919ed14850 100644 --- a/dlls/quartz/videorenderer.c +++ b/dlls/quartz/videorenderer.c @@ -752,7 +752,7 @@ static ULONG WINAPI VideoRendererInner_Release(IUnknown * iface) if (!refCount) { - BaseWindowImpl_DoneWithWindow(&This->baseControlWindow.baseWindow); + BaseControlWindow_Destroy(&This->baseControlWindow); PostThreadMessageW(This->ThreadID, WM_QUIT, 0, 0); WaitForSingleObject(This->hThread, INFINITE); CloseHandle(This->hThread); diff --git a/dlls/strmbase/window.c b/dlls/strmbase/window.c index aa9214aaa32..ffb04251351 100644 --- a/dlls/strmbase/window.c +++ b/dlls/strmbase/window.c @@ -208,6 +208,7 @@ HRESULT WINAPI BaseControlWindow_Init(BaseControlWindow *pControlWindow, const I hr = BaseWindow_Init(&pControlWindow->baseWindow, pFuncsTable); if (SUCCEEDED(hr)) { + BaseDispatch_Init(&pControlWindow->baseDispatch, &IID_IVideoWindow); pControlWindow->IVideoWindow_iface.lpVtbl = lpVtbl; pControlWindow->AutoShow = TRUE; pControlWindow->hwndDrain = NULL; @@ -219,40 +220,47 @@ HRESULT WINAPI BaseControlWindow_Init(BaseControlWindow *pControlWindow, const I return hr; } -HRESULT WINAPI BaseControlWindowImpl_GetTypeInfoCount(IVideoWindow *iface, UINT*pctinfo) +HRESULT WINAPI BaseControlWindow_Destroy(BaseControlWindow *pControlWindow) +{ + BaseWindowImpl_DoneWithWindow(&pControlWindow->baseWindow); + return BaseDispatch_Destroy(&pControlWindow->baseDispatch); +} + +HRESULT WINAPI BaseControlWindowImpl_GetTypeInfoCount(IVideoWindow *iface, UINT *pctinfo) { BaseControlWindow* This = impl_from_IVideoWindow(iface); - FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pctinfo); - - return S_OK; + return BaseDispatchImpl_GetTypeInfoCount(&This->baseDispatch, pctinfo); } HRESULT WINAPI BaseControlWindowImpl_GetTypeInfo(IVideoWindow *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo) { BaseControlWindow* This = impl_from_IVideoWindow(iface); - FIXME("(%p/%p)->(%d, %d, %p): stub !!!\n", This, iface, iTInfo, lcid, ppTInfo); - - return S_OK; + return BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, &IID_NULL, iTInfo, lcid, ppTInfo); } -HRESULT WINAPI BaseControlWindowImpl_GetIDsOfNames(IVideoWindow *iface, REFIID riid, LPOLESTR*rgszNames, UINT cNames, LCID lcid, DISPID*rgDispId) +HRESULT WINAPI BaseControlWindowImpl_GetIDsOfNames(IVideoWindow *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { BaseControlWindow* This = impl_from_IVideoWindow(iface); - FIXME("(%p/%p)->(%s (%p), %p, %d, %d, %p): stub !!!\n", This, iface, debugstr_guid(riid), riid, rgszNames, cNames, lcid, rgDispId); - - return S_OK; + return BaseDispatchImpl_GetIDsOfNames(&This->baseDispatch, riid, rgszNames, cNames, lcid, rgDispId); } -HRESULT WINAPI BaseControlWindowImpl_Invoke(IVideoWindow *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS*pDispParams, VARIANT*pVarResult, EXCEPINFO*pExepInfo, UINT*puArgErr) +HRESULT WINAPI BaseControlWindowImpl_Invoke(IVideoWindow *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr) { BaseControlWindow* This = impl_from_IVideoWindow(iface); + HRESULT hr = S_OK; + ITypeInfo *pTypeInfo; - FIXME("(%p/%p)->(%d, %s (%p), %d, %04x, %p, %p, %p, %p): stub !!!\n", This, iface, dispIdMember, debugstr_guid(riid), riid, lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr); + hr = BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, riid, 1, lcid, &pTypeInfo); + if (SUCCEEDED(hr)) + { + hr = ITypeInfo_Invoke(pTypeInfo, &This->IVideoWindow_iface, dispIdMember, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr); + ITypeInfo_Release(pTypeInfo); + } - return S_OK; + return hr; } HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR strCaption) diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 4fa0e27857a..bff7d8fe8ae 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -418,6 +418,7 @@ typedef struct tagBaseControlWindow { BaseWindow baseWindow; IVideoWindow IVideoWindow_iface; + BaseDispatch baseDispatch; BOOL AutoShow; HWND hwndDrain; @@ -428,6 +429,7 @@ typedef struct tagBaseControlWindow } BaseControlWindow; HRESULT WINAPI BaseControlWindow_Init(BaseControlWindow *pControlWindow, const IVideoWindowVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin, const BaseWindowFuncTable* pFuncsTable); +HRESULT WINAPI BaseControlWindow_Destroy(BaseControlWindow *pControlWindow); BOOL WINAPI BaseControlWindowImpl_PossiblyEatMessage(BaseWindow *This, UINT uMsg, WPARAM wParam, LPARAM lParam); HRESULT WINAPI BaseControlWindowImpl_GetTypeInfoCount(IVideoWindow *iface, UINT*pctinfo);