From 4e1c8767f914ba30a91c44ca00b2e4a67f8c89f0 Mon Sep 17 00:00:00 2001 From: Justin Chevrier Date: Tue, 16 Feb 2010 21:31:05 -0500 Subject: [PATCH] msctf: Implement stubbed out TF_CreateLangBarMgr. --- dlls/msctf/Makefile.in | 1 + dlls/msctf/langbarmgr.c | 193 ++++++++++++++++++++++++++++++++++++++++++++ dlls/msctf/msctf.c | 10 +++ dlls/msctf/msctf.spec | 2 +- dlls/msctf/msctf_internal.h | 1 + 5 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 dlls/msctf/langbarmgr.c diff --git a/dlls/msctf/Makefile.in b/dlls/msctf/Makefile.in index 2c319f130e0..22b17304c0e 100644 --- a/dlls/msctf/Makefile.in +++ b/dlls/msctf/Makefile.in @@ -11,6 +11,7 @@ C_SRCS = \ context.c \ documentmgr.c \ inputprocessor.c \ + langbarmgr.c \ msctf.c \ range.c \ regsvr.c \ diff --git a/dlls/msctf/langbarmgr.c b/dlls/msctf/langbarmgr.c new file mode 100644 index 00000000000..272a8168727 --- /dev/null +++ b/dlls/msctf/langbarmgr.c @@ -0,0 +1,193 @@ +/* + * ITfLangBarMgr implementation + * + * Copyright 2010 Justin Chevrier + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS + +#include "wine/debug.h" +#include "winbase.h" +#include "winreg.h" +#include "shlwapi.h" + +#include "msctf.h" +#include "msctf_internal.h" + +WINE_DEFAULT_DEBUG_CHANNEL(msctf); + +typedef struct tagLangBarMgr { + const ITfLangBarMgrVtbl *LangBarMgrVtbl; + + LONG refCount; + +} LangBarMgr; + +static void LangBarMgr_Destructor(LangBarMgr *This) +{ + TRACE("destroying %p\n", This); + + HeapFree(GetProcessHeap(),0,This); +} + +static HRESULT WINAPI LangBarMgr_QueryInterface(ITfLangBarMgr *iface, REFIID iid, LPVOID *ppvOut) +{ + LangBarMgr *This = (LangBarMgr *)iface; + *ppvOut = NULL; + + if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfLangBarMgr)) + { + *ppvOut = This; + } + + if (*ppvOut) + { + IUnknown_AddRef(iface); + return S_OK; + } + + WARN("unsupported interface: %s\n", debugstr_guid(iid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI LangBarMgr_AddRef(ITfLangBarMgr *iface) +{ + LangBarMgr *This = (LangBarMgr *)iface; + return InterlockedIncrement(&This->refCount); +} + +static ULONG WINAPI LangBarMgr_Release(ITfLangBarMgr *iface) +{ + LangBarMgr *This = (LangBarMgr *)iface; + ULONG ret; + + ret = InterlockedDecrement(&This->refCount); + if (ret == 0) + LangBarMgr_Destructor(This); + return ret; +} + +/***************************************************** + * ITfLangBarMgr functions + *****************************************************/ + +static HRESULT WINAPI LangBarMgr_AdviseEventSink( ITfLangBarMgr* iface, ITfLangBarEventSink *pSink, HWND hwnd, DWORD dwflags, DWORD *pdwCookie) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static HRESULT WINAPI LangBarMgr_UnAdviseEventSink( ITfLangBarMgr* iface, DWORD dwCookie) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static HRESULT WINAPI LangBarMgr_GetThreadMarshalInterface( ITfLangBarMgr* iface, DWORD dwThreadId, DWORD dwType, REFIID riid, IUnknown **ppunk) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static HRESULT WINAPI LangBarMgr_GetThreadLangBarItemMgr( ITfLangBarMgr* iface, DWORD dwThreadId, ITfLangBarItemMgr **pplbi, DWORD *pdwThreadid) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static HRESULT WINAPI LangBarMgr_GetInputProcessorProfiles( ITfLangBarMgr* iface, DWORD dwThreadId, ITfInputProcessorProfiles **ppaip, DWORD *pdwThreadid) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static HRESULT WINAPI LangBarMgr_RestoreLastFocus( ITfLangBarMgr* iface, DWORD *dwThreadId, BOOL fPrev) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static HRESULT WINAPI LangBarMgr_SetModalInput( ITfLangBarMgr* iface, ITfLangBarEventSink *pSink, DWORD dwThreadId, DWORD dwFlags) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static HRESULT WINAPI LangBarMgr_ShowFloating( ITfLangBarMgr* iface, DWORD dwFlags) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static HRESULT WINAPI LangBarMgr_GetShowFloatingStatus( ITfLangBarMgr* iface, DWORD *pdwFlags) +{ + LangBarMgr *This = (LangBarMgr *)iface; + + FIXME("STUB:(%p)\n",This); + return E_NOTIMPL; +} + +static const ITfLangBarMgrVtbl LangBarMgr_LangBarMgrVtbl = +{ + LangBarMgr_QueryInterface, + LangBarMgr_AddRef, + LangBarMgr_Release, + + LangBarMgr_AdviseEventSink, + LangBarMgr_UnAdviseEventSink, + LangBarMgr_GetThreadMarshalInterface, + LangBarMgr_GetThreadLangBarItemMgr, + LangBarMgr_GetInputProcessorProfiles, + LangBarMgr_RestoreLastFocus, + LangBarMgr_SetModalInput, + LangBarMgr_ShowFloating, + LangBarMgr_GetShowFloatingStatus +}; + +HRESULT LangBarMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut) +{ + LangBarMgr *This; + if (pUnkOuter) + return CLASS_E_NOAGGREGATION; + + This = HeapAlloc(GetProcessHeap(),0,sizeof(LangBarMgr)); + if (This == NULL) + return E_OUTOFMEMORY; + + This->LangBarMgrVtbl= &LangBarMgr_LangBarMgrVtbl; + This->refCount = 1; + + TRACE("returning %p\n", This); + *ppOut = (IUnknown *)This; + return S_OK; +} diff --git a/dlls/msctf/msctf.c b/dlls/msctf/msctf.c index 24b3b647ed7..62d1ff2abd8 100644 --- a/dlls/msctf/msctf.c +++ b/dlls/msctf/msctf.c @@ -87,6 +87,7 @@ static const struct { {&CLSID_TF_ThreadMgr, ThreadMgr_Constructor}, {&CLSID_TF_InputProcessorProfiles, InputProcessorProfiles_Constructor}, {&CLSID_TF_CategoryMgr, CategoryMgr_Constructor}, + {&CLSID_TF_LangBarMgr, LangBarMgr_Constructor}, {NULL, NULL} }; @@ -617,3 +618,12 @@ HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(void) FIXME("Stub\n"); return S_OK; } + +/*********************************************************************** + * TF_CreateLangBarMgr (MSCTF.@) + */ +HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm) +{ + TRACE("\n"); + return LangBarMgr_Constructor(NULL,(IUnknown**)pppbm); +} diff --git a/dlls/msctf/msctf.spec b/dlls/msctf/msctf.spec index c0cb829cfc6..387af570021 100644 --- a/dlls/msctf/msctf.spec +++ b/dlls/msctf/msctf.spec @@ -13,7 +13,7 @@ @ stub TF_CreateDisplayAttributeMgr @ stdcall TF_CreateInputProcessorProfiles(ptr) @ stub TF_CreateLangBarItemMgr -@ stub TF_CreateLangBarMgr +@ stdcall TF_CreateLangBarMgr(ptr) @ stdcall TF_CreateThreadMgr(ptr) @ stub TF_DllDetachInOther @ stub TF_GetGlobalCompartment diff --git a/dlls/msctf/msctf_internal.h b/dlls/msctf/msctf_internal.h index 3bb0baa6ee7..57423e996fc 100644 --- a/dlls/msctf/msctf_internal.h +++ b/dlls/msctf/msctf_internal.h @@ -40,6 +40,7 @@ extern HRESULT CategoryMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut); extern HRESULT Range_Constructor(ITfContext *context, ITextStoreACP *textstore, DWORD lockType, DWORD anchorStart, DWORD anchorEnd, ITfRange **ppOut); extern HRESULT CompartmentMgr_Constructor(IUnknown *pUnkOuter, REFIID riid, IUnknown **ppOut); extern HRESULT CompartmentMgr_Destructor(ITfCompartmentMgr *This); +extern HRESULT LangBarMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut); extern HRESULT Context_Initialize(ITfContext *cxt, ITfDocumentMgr *manager); extern HRESULT Context_Uninitialize(ITfContext *cxt); -- 2.11.4.GIT