ReactOS 0.4.16-dev-1401-gf1332c7
langbarmgr.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS CTF
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: ITfLangBarMgr implementation
5 * COPYRIGHT: Copyright 2010 Justin Chevrier
6 * Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#include <initguid.h>
10#include <windef.h>
11#include <winbase.h>
12#include <winreg.h>
13#include <msctf.h>
14#include <msctf_undoc.h>
15
16// Cicero
17#include <cicbase.h>
18#include <cicreg.h>
19#include <cicutb.h>
20
21#include "msctf_internal.h"
22
23#include <wine/debug.h>
25
26//*****************************************************************************************
27
29{
30public:
32 virtual ~CLangBarMgr();
33
34 // ** IUnknown interface **
38
39 // ** ITfLangBarMgr interface **
44 _In_ DWORD *pdwCookie) override;
45 STDMETHODIMP UnAdviseEventSink(_In_ DWORD dwCookie) override;
48 _In_ DWORD dwType,
50 _Out_ IUnknown **ppunk) override;
53 _Out_ ITfLangBarItemMgr **pplbie,
54 _Out_ DWORD *pdwThreadid) override;
57 _Out_ ITfInputProcessorProfiles **ppaip,
58 _Out_ DWORD *pdwThreadid) override;
63 _In_ DWORD dwFlags) override;
66
67 // ** ITfLangBarMgr_P interface **
69
70protected:
72
73 static BOOL CheckFloatingBits(_In_ DWORD dwBits);
76};
77
78// The groups of mutually exclusive TF_SFT_... bits
79#define TF_SFT_VISIBILITY_GROUP \
80 (TF_SFT_SHOWNORMAL | TF_SFT_DOCK | TF_SFT_MINIMIZED | TF_SFT_HIDDEN | TF_SFT_DESKBAND)
81#define TF_SFT_TRANSPARENCY_GROUP \
82 (TF_SFT_NOTRANSPARENCY | TF_SFT_LOWTRANSPARENCY | TF_SFT_HIGHTRANSPARENCY)
83#define TF_SFT_LABEL_GROUP (TF_SFT_LABELS | TF_SFT_NOLABELS)
84#define TF_SFT_EXTRA_ICON_GROUP (TF_SFT_EXTRAICONSONMINIMIZED | TF_SFT_NOEXTRAICONSONMINIMIZED)
85
86static inline BOOL
88{
89 return (dwValue != 0) && ((dwValue & (dwValue - 1)) == 0);
90}
91
92//*****************************************************************************************
93
95{
96}
97
99{
100}
101
103{
104 return IsSingleBitSet(dwBits & TF_SFT_VISIBILITY_GROUP) &&
108}
109
111{
112 return E_NOTIMPL;
113}
114
116{
117 return E_NOTIMPL;
118}
119
120//*****************************************************************************************
121// ** IUnknown interface **
122
126 _Out_ PVOID *ppvObj)
127{
128 if (!ppvObj)
129 return E_INVALIDARG;
130
132 !IsEqualIID(riid, IID_ITfLangBarMgr) &&
133 !IsEqualIID(riid, IID_ITfLangBarMgr_P))
134 {
135 *ppvObj = NULL;
136 return E_NOINTERFACE;
137 }
138
139 *ppvObj = this;
140 AddRef();
141 return S_OK;
142}
143
145{
146 return ++m_cRefs;
147}
148
150{
151 if (!--m_cRefs)
152 {
153 delete this;
154 return 0;
155 }
156 return m_cRefs;
157}
158
159//*****************************************************************************************
160// ** ITfLangBarMgr interface **
161
165 _In_ HWND hwnd,
167 _In_ DWORD *pdwCookie)
168{
169 FIXME("(%p, %p, 0x%X, %p)\n", pSink, hwnd, dwflags, pdwCookie);
170 if (!pSink)
171 return E_INVALIDARG;
172 return E_NOTIMPL;
173}
174
177 _In_ DWORD dwCookie)
178{
179 FIXME("(0x%lX)\n", dwCookie);
180 return E_NOTIMPL;
181}
182
186 _In_ DWORD dwType,
188 _Out_ IUnknown **ppunk)
189{
190 FIXME("(%lu, %lu, %s, %p)\n", dwThreadId, dwType, wine_dbgstr_guid(&riid), ppunk);
191 return E_NOTIMPL;
192}
193
197 _Out_ ITfLangBarItemMgr **pplbie,
198 _Out_ DWORD *pdwThreadid)
199{
200 FIXME("(%lu, %p, %p)\n", dwThreadId, pplbie, pdwThreadid);
201 return E_NOTIMPL;
202}
203
207 _Out_ ITfInputProcessorProfiles **ppaip,
208 _Out_ DWORD *pdwThreadid)
209{
210 FIXME("(%lu, %p, %p)\n", dwThreadId, ppaip, pdwThreadid);
211 return E_NOTIMPL;
212}
213
217 _In_ BOOL fPrev)
218{
219 FIXME("(%p, %d)\n", dwThreadId, fPrev);
220 return E_NOTIMPL;
221}
222
228{
229 FIXME("(%p, %lu, 0x%lX)\n", pSink, dwThreadId, dwFlags);
230 return E_NOTIMPL;
231}
232
236{
237 FIXME("(0x%lX)\n", dwFlags);
239 return E_INVALIDARG;
240 return s_ShowFloating(dwFlags);
241}
242
245 _Out_ DWORD *pdwFlags)
246{
247 FIXME("(%p)\n", pdwFlags);
248
249 if (!pdwFlags)
250 return E_INVALIDARG;
251
252 return s_GetShowFloatingStatus(pdwFlags);
253}
254
255//*****************************************************************************************
256// ** ITfLangBarMgr_P interface **
257
260{
261 FIXME("(%p)\n", pdwStatus);
262 if (!pdwStatus)
263 return E_INVALIDARG;
264 return E_NOTIMPL;
265}
266
267//*****************************************************************************************
268
271{
272 if (pUnkOuter)
274
275 CLangBarMgr *pLangBarMgr = new(cicNoThrow) CLangBarMgr();
276 if (!pLangBarMgr)
277 return E_OUTOFMEMORY;
278
279 HRESULT hr = pLangBarMgr->QueryInterface(IID_ITfLangBarMgr, (PVOID *)ppOut);
280 TRACE("returning %p\n", *ppOut);
281 pLangBarMgr->Release();
282 return hr;
283}
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHODIMP_(t)
Definition: basetyps.h:44
const GUID IID_IUnknown
#define cicNoThrow
Definition: cicbase.h:34
virtual ~CLangBarMgr()
Definition: langbarmgr.cpp:98
STDMETHODIMP RestoreLastFocus(_Out_ DWORD *dwThreadId, _In_ BOOL fPrev) override
Definition: langbarmgr.cpp:215
static HRESULT s_GetShowFloatingStatus(_Out_ DWORD *pdwFlags)
Definition: langbarmgr.cpp:110
STDMETHODIMP GetThreadMarshalInterface(_In_ DWORD dwThreadId, _In_ DWORD dwType, _In_ REFIID riid, _Out_ IUnknown **ppunk) override
Definition: langbarmgr.cpp:184
static BOOL CheckFloatingBits(_In_ DWORD dwBits)
Definition: langbarmgr.cpp:102
STDMETHODIMP ShowFloating(_In_ DWORD dwFlags) override
Definition: langbarmgr.cpp:234
STDMETHODIMP QueryInterface(_In_ REFIID riid, _Out_ PVOID *ppvObj) override
Definition: langbarmgr.cpp:124
STDMETHODIMP GetShowFloatingStatus(_Out_ DWORD *pdwFlags) override
Definition: langbarmgr.cpp:244
static HRESULT s_ShowFloating(_In_ DWORD dwFlags)
Definition: langbarmgr.cpp:115
STDMETHODIMP GetThreadLangBarItemMgr(_In_ DWORD dwThreadId, _Out_ ITfLangBarItemMgr **pplbie, _Out_ DWORD *pdwThreadid) override
Definition: langbarmgr.cpp:195
STDMETHODIMP UnAdviseEventSink(_In_ DWORD dwCookie) override
Definition: langbarmgr.cpp:176
STDMETHODIMP SetModalInput(_In_ ITfLangBarEventSink *pSink, _In_ DWORD dwThreadId, _In_ DWORD dwFlags) override
Definition: langbarmgr.cpp:224
STDMETHODIMP_(ULONG) AddRef() override
STDMETHODIMP GetPrevShowFloatingStatus(_Inout_ DWORD *pdwStatus) override
Definition: langbarmgr.cpp:259
STDMETHODIMP_(ULONG) Release() override
STDMETHODIMP GetInputProcessorProfiles(_In_ DWORD dwThreadId, _Out_ ITfInputProcessorProfiles **ppaip, _Out_ DWORD *pdwThreadid) override
Definition: langbarmgr.cpp:205
STDMETHODIMP AdviseEventSink(_In_ ITfLangBarEventSink *pSink, _In_ HWND hwnd, _In_ DWORD dwflags, _In_ DWORD *pdwCookie) override
Definition: langbarmgr.cpp:163
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define NULL
Definition: types.h:112
DWORD dwThreadId
Definition: fdebug.c:31
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
REFIID riid
Definition: atlbase.h:39
ULONG AddRef()
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define TF_SFT_TRANSPARENCY_GROUP
Definition: langbarmgr.cpp:81
EXTERN_C HRESULT LangBarMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
Definition: langbarmgr.cpp:270
#define TF_SFT_LABEL_GROUP
Definition: langbarmgr.cpp:83
static BOOL IsSingleBitSet(DWORD dwValue)
Definition: langbarmgr.cpp:87
#define TF_SFT_VISIBILITY_GROUP
Definition: langbarmgr.cpp:79
#define TF_SFT_EXTRA_ICON_GROUP
Definition: langbarmgr.cpp:84
static _In_ DWORD dwflags
Definition: dispmode.c:64
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
long LONG
Definition: pedump.c:60
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:197
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t ULONG
Definition: typedefs.h:59
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define E_NOINTERFACE
Definition: winerror.h:2364
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:2662