msctf: Add ITfContextOwnerCompositionServices stub.
Fix crash at launch for games that use Unreal Engine 4. Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f131795b30
commit
ef542fc797
|
@ -41,7 +41,7 @@ typedef struct tagContext {
|
||||||
ITfContext ITfContext_iface;
|
ITfContext ITfContext_iface;
|
||||||
ITfSource ITfSource_iface;
|
ITfSource ITfSource_iface;
|
||||||
/* const ITfContextCompositionVtbl *ContextCompositionVtbl; */
|
/* const ITfContextCompositionVtbl *ContextCompositionVtbl; */
|
||||||
/* const ITfContextOwnerCompositionServicesVtbl *ContextOwnerCompositionServicesVtbl; */
|
ITfContextOwnerCompositionServices ITfContextOwnerCompositionServices_iface;
|
||||||
/* const ITfContextOwnerServicesVtbl *ContextOwnerServicesVtbl; */
|
/* const ITfContextOwnerServicesVtbl *ContextOwnerServicesVtbl; */
|
||||||
ITfInsertAtSelection ITfInsertAtSelection_iface;
|
ITfInsertAtSelection ITfInsertAtSelection_iface;
|
||||||
/* const ITfMouseTrackerVtbl *MouseTrackerVtbl; */
|
/* const ITfMouseTrackerVtbl *MouseTrackerVtbl; */
|
||||||
|
@ -89,6 +89,11 @@ static inline Context *impl_from_ITfSource(ITfSource *iface)
|
||||||
return CONTAINING_RECORD(iface, Context, ITfSource_iface);
|
return CONTAINING_RECORD(iface, Context, ITfSource_iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline Context *impl_from_ITfContextOwnerCompositionServices(ITfContextOwnerCompositionServices *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, Context, ITfContextOwnerCompositionServices_iface);
|
||||||
|
}
|
||||||
|
|
||||||
static inline Context *impl_from_ITfInsertAtSelection(ITfInsertAtSelection *iface)
|
static inline Context *impl_from_ITfInsertAtSelection(ITfInsertAtSelection *iface)
|
||||||
{
|
{
|
||||||
return CONTAINING_RECORD(iface, Context, ITfInsertAtSelection_iface);
|
return CONTAINING_RECORD(iface, Context, ITfInsertAtSelection_iface);
|
||||||
|
@ -150,6 +155,10 @@ static HRESULT WINAPI Context_QueryInterface(ITfContext *iface, REFIID iid, LPVO
|
||||||
{
|
{
|
||||||
*ppvOut = &This->ITfSource_iface;
|
*ppvOut = &This->ITfSource_iface;
|
||||||
}
|
}
|
||||||
|
else if (IsEqualIID(iid, &IID_ITfContextOwnerCompositionServices))
|
||||||
|
{
|
||||||
|
*ppvOut = &This->ITfContextOwnerCompositionServices_iface;
|
||||||
|
}
|
||||||
else if (IsEqualIID(iid, &IID_ITfInsertAtSelection))
|
else if (IsEqualIID(iid, &IID_ITfInsertAtSelection))
|
||||||
{
|
{
|
||||||
*ppvOut = &This->ITfInsertAtSelection_iface;
|
*ppvOut = &This->ITfInsertAtSelection_iface;
|
||||||
|
@ -526,6 +535,9 @@ static const ITfContextVtbl ContextVtbl =
|
||||||
Context_CreateRangeBackup
|
Context_CreateRangeBackup
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*****************************************************
|
||||||
|
* ITfSource functions
|
||||||
|
*****************************************************/
|
||||||
static HRESULT WINAPI ContextSource_QueryInterface(ITfSource *iface, REFIID iid, LPVOID *ppvOut)
|
static HRESULT WINAPI ContextSource_QueryInterface(ITfSource *iface, REFIID iid, LPVOID *ppvOut)
|
||||||
{
|
{
|
||||||
Context *This = impl_from_ITfSource(iface);
|
Context *This = impl_from_ITfSource(iface);
|
||||||
|
@ -544,9 +556,6 @@ static ULONG WINAPI ContextSource_Release(ITfSource *iface)
|
||||||
return ITfContext_Release(&This->ITfContext_iface);
|
return ITfContext_Release(&This->ITfContext_iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************
|
|
||||||
* ITfSource functions
|
|
||||||
*****************************************************/
|
|
||||||
static HRESULT WINAPI ContextSource_AdviseSink(ITfSource *iface,
|
static HRESULT WINAPI ContextSource_AdviseSink(ITfSource *iface,
|
||||||
REFIID riid, IUnknown *punk, DWORD *pdwCookie)
|
REFIID riid, IUnknown *punk, DWORD *pdwCookie)
|
||||||
{
|
{
|
||||||
|
@ -585,6 +594,80 @@ static const ITfSourceVtbl ContextSourceVtbl =
|
||||||
ContextSource_UnadviseSink
|
ContextSource_UnadviseSink
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*****************************************************
|
||||||
|
* ITfContextOwnerCompositionServices functions
|
||||||
|
*****************************************************/
|
||||||
|
static HRESULT WINAPI ContextOwnerCompositionServices_QueryInterface(ITfContextOwnerCompositionServices *iface,
|
||||||
|
REFIID iid, LPVOID *ppvOut)
|
||||||
|
{
|
||||||
|
Context *This = impl_from_ITfContextOwnerCompositionServices(iface);
|
||||||
|
return ITfContext_QueryInterface(&This->ITfContext_iface, iid, ppvOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI ContextOwnerCompositionServices_AddRef(ITfContextOwnerCompositionServices *iface)
|
||||||
|
{
|
||||||
|
Context *This = impl_from_ITfContextOwnerCompositionServices(iface);
|
||||||
|
return ITfContext_AddRef(&This->ITfContext_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI ContextOwnerCompositionServices_Release(ITfContextOwnerCompositionServices *iface)
|
||||||
|
{
|
||||||
|
Context *This = impl_from_ITfContextOwnerCompositionServices(iface);
|
||||||
|
return ITfContext_Release(&This->ITfContext_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ContextOwnerCompositionServices_StartComposition(ITfContextOwnerCompositionServices *iface,
|
||||||
|
TfEditCookie ecWrite, ITfRange *pCompositionRange, ITfCompositionSink *pSink, ITfComposition **ppComposition)
|
||||||
|
{
|
||||||
|
Context *This = impl_from_ITfContextOwnerCompositionServices(iface);
|
||||||
|
FIXME("STUB:(%p) %#x %p %p %p\n", This, ecWrite, pCompositionRange, pSink, ppComposition);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ContextOwnerCompositionServices_EnumCompositions(ITfContextOwnerCompositionServices *iface,
|
||||||
|
IEnumITfCompositionView **ppEnum)
|
||||||
|
{
|
||||||
|
Context *This = impl_from_ITfContextOwnerCompositionServices(iface);
|
||||||
|
FIXME("STUB:(%p) %p\n", This, ppEnum);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ContextOwnerCompositionServices_FindComposition(ITfContextOwnerCompositionServices *iface,
|
||||||
|
TfEditCookie ecRead, ITfRange *pTestRange, IEnumITfCompositionView **ppEnum)
|
||||||
|
{
|
||||||
|
Context *This = impl_from_ITfContextOwnerCompositionServices(iface);
|
||||||
|
FIXME("STUB:(%p) %#x %p %p\n", This, ecRead, pTestRange, ppEnum);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ContextOwnerCompositionServices_TakeOwnership(ITfContextOwnerCompositionServices *iface,
|
||||||
|
TfEditCookie ecWrite, ITfCompositionView *pComposition, ITfCompositionSink *pSink, ITfComposition **ppComposition)
|
||||||
|
{
|
||||||
|
Context *This = impl_from_ITfContextOwnerCompositionServices(iface);
|
||||||
|
FIXME("STUB:(%p) %#x %p %p %p\n", This, ecWrite, pComposition, pSink, ppComposition);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ContextOwnerCompositionServices_TerminateComposition(ITfContextOwnerCompositionServices *iface,
|
||||||
|
ITfCompositionView *pComposition)
|
||||||
|
{
|
||||||
|
Context *This = impl_from_ITfContextOwnerCompositionServices(iface);
|
||||||
|
FIXME("STUB:(%p) %p\n", This, pComposition);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const ITfContextOwnerCompositionServicesVtbl ContextOwnerCompositionServicesVtbl =
|
||||||
|
{
|
||||||
|
ContextOwnerCompositionServices_QueryInterface,
|
||||||
|
ContextOwnerCompositionServices_AddRef,
|
||||||
|
ContextOwnerCompositionServices_Release,
|
||||||
|
ContextOwnerCompositionServices_StartComposition,
|
||||||
|
ContextOwnerCompositionServices_EnumCompositions,
|
||||||
|
ContextOwnerCompositionServices_FindComposition,
|
||||||
|
ContextOwnerCompositionServices_TakeOwnership,
|
||||||
|
ContextOwnerCompositionServices_TerminateComposition
|
||||||
|
};
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
* ITfInsertAtSelection functions
|
* ITfInsertAtSelection functions
|
||||||
*****************************************************/
|
*****************************************************/
|
||||||
|
@ -981,6 +1064,7 @@ HRESULT Context_Constructor(TfClientId tidOwner, IUnknown *punk, ITfDocumentMgr
|
||||||
|
|
||||||
This->ITfContext_iface.lpVtbl= &ContextVtbl;
|
This->ITfContext_iface.lpVtbl= &ContextVtbl;
|
||||||
This->ITfSource_iface.lpVtbl = &ContextSourceVtbl;
|
This->ITfSource_iface.lpVtbl = &ContextSourceVtbl;
|
||||||
|
This->ITfContextOwnerCompositionServices_iface.lpVtbl = &ContextOwnerCompositionServicesVtbl;
|
||||||
This->ITfInsertAtSelection_iface.lpVtbl = &InsertAtSelectionVtbl;
|
This->ITfInsertAtSelection_iface.lpVtbl = &InsertAtSelectionVtbl;
|
||||||
This->ITfSourceSingle_iface.lpVtbl = &ContextSourceSingleVtbl;
|
This->ITfSourceSingle_iface.lpVtbl = &ContextSourceSingleVtbl;
|
||||||
This->ITextStoreACPSink_iface.lpVtbl = &TextStoreACPSinkVtbl;
|
This->ITextStoreACPSink_iface.lpVtbl = &TextStoreACPSinkVtbl;
|
||||||
|
|
Loading…
Reference in New Issue