msctf: Add ITfSource interface to DocumentMgr.

This commit is contained in:
Aric Stewart 2009-02-02 10:25:59 -06:00 committed by Alexandre Julliard
parent bc7dd32e67
commit aacbe97ae5
1 changed files with 58 additions and 0 deletions

View File

@ -42,11 +42,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(msctf);
typedef struct tagDocumentMgr {
const ITfDocumentMgrVtbl *DocumentMgrVtbl;
const ITfSourceVtbl *SourceVtbl;
LONG refCount;
ITfContext* contextStack[2]; /* limit of 2 contexts */
} DocumentMgr;
static inline DocumentMgr *impl_from_ITfSourceVtbl(ITfSource *iface)
{
return (DocumentMgr *)((char *)iface - FIELD_OFFSET(DocumentMgr,SourceVtbl));
}
static void DocumentMgr_Destructor(DocumentMgr *This)
{
TRACE("destroying %p\n", This);
@ -66,6 +72,10 @@ static HRESULT WINAPI DocumentMgr_QueryInterface(ITfDocumentMgr *iface, REFIID i
{
*ppvOut = This;
}
else if (IsEqualIID(iid, &IID_ITfSource))
{
*ppvOut = &This->SourceVtbl;
}
if (*ppvOut)
{
@ -205,6 +215,53 @@ static const ITfDocumentMgrVtbl DocumentMgr_DocumentMgrVtbl =
DocumentMgr_EnumContexts
};
static HRESULT WINAPI Source_QueryInterface(ITfSource *iface, REFIID iid, LPVOID *ppvOut)
{
DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
return DocumentMgr_QueryInterface((ITfDocumentMgr*)This, iid, *ppvOut);
}
static ULONG WINAPI Source_AddRef(ITfSource *iface)
{
DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
return DocumentMgr_AddRef((ITfDocumentMgr*)This);
}
static ULONG WINAPI Source_Release(ITfSource *iface)
{
DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
return DocumentMgr_Release((ITfDocumentMgr*)This);
}
/*****************************************************
* ITfSource functions
*****************************************************/
static WINAPI HRESULT DocumentMgrSource_AdviseSink(ITfSource *iface,
REFIID riid, IUnknown *punk, DWORD *pdwCookie)
{
DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
FIXME("STUB:(%p)\n",This);
return E_NOTIMPL;
}
static WINAPI HRESULT DocumentMgrSource_UnadviseSink(ITfSource *iface, DWORD pdwCookie)
{
DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
FIXME("STUB:(%p)\n",This);
return E_NOTIMPL;
}
static const ITfSourceVtbl DocumentMgr_SourceVtbl =
{
Source_QueryInterface,
Source_AddRef,
Source_Release,
DocumentMgrSource_AdviseSink,
DocumentMgrSource_UnadviseSink,
};
HRESULT DocumentMgr_Constructor(ITfDocumentMgr **ppOut)
{
DocumentMgr *This;
@ -214,6 +271,7 @@ HRESULT DocumentMgr_Constructor(ITfDocumentMgr **ppOut)
return E_OUTOFMEMORY;
This->DocumentMgrVtbl= &DocumentMgr_DocumentMgrVtbl;
This->SourceVtbl = &DocumentMgr_SourceVtbl;
This->refCount = 1;
TRACE("returning %p\n", This);