ReactOS 0.4.16-dev-1946-g52006dd
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 "precomp.h"
10
11#include <wine/debug.h>
13
14//*****************************************************************************************
15
17{
18public:
20 virtual ~CLangBarMgr();
21
22 // ** IUnknown interface **
26
27 // ** ITfLangBarMgr interface **
32 _In_ DWORD *pdwCookie) override;
33 STDMETHODIMP UnAdviseEventSink(_In_ DWORD dwCookie) override;
36 _In_ DWORD dwType,
38 _Out_ IUnknown **ppunk) override;
41 _Out_ ITfLangBarItemMgr **pplbie,
42 _Out_ DWORD *pdwThreadid) override;
45 _Out_ ITfInputProcessorProfiles **ppaip,
46 _Out_ DWORD *pdwThreadid) override;
51 _In_ DWORD dwFlags) override;
54
55 // ** ITfLangBarMgr_P interface **
57
58protected:
60
61 static BOOL CheckFloatingBits(_In_ DWORD dwBits);
64};
65
66// The groups of mutually exclusive TF_SFT_... bits
67#define TF_SFT_VISIBILITY_GROUP \
68 (TF_SFT_SHOWNORMAL | TF_SFT_DOCK | TF_SFT_MINIMIZED | TF_SFT_HIDDEN | TF_SFT_DESKBAND)
69#define TF_SFT_TRANSPARENCY_GROUP \
70 (TF_SFT_NOTRANSPARENCY | TF_SFT_LOWTRANSPARENCY | TF_SFT_HIGHTRANSPARENCY)
71#define TF_SFT_LABEL_GROUP (TF_SFT_LABELS | TF_SFT_NOLABELS)
72#define TF_SFT_EXTRA_ICON_GROUP (TF_SFT_EXTRAICONSONMINIMIZED | TF_SFT_NOEXTRAICONSONMINIMIZED)
73
74static inline BOOL
76{
77 return (dwValue != 0) && ((dwValue & (dwValue - 1)) == 0);
78}
79
80//*****************************************************************************************
81
83{
84}
85
87{
88}
89
91{
92 return IsSingleBitSet(dwBits & TF_SFT_VISIBILITY_GROUP) &&
96}
97
99{
100 return E_NOTIMPL;
101}
102
104{
105 return E_NOTIMPL;
106}
107
111 _Out_ PVOID *ppvObj)
112{
113 if (!ppvObj)
114 return E_INVALIDARG;
115
116 *ppvObj = NULL;
117 if (riid == IID_IUnknown || riid == IID_ITfLangBarMgr || riid == IID_ITfLangBarMgr_P)
118 *ppvObj = static_cast<ITfLangBarMgr_P *>(this);
119
120 if (*ppvObj)
121 {
122 AddRef();
123 return S_OK;
124 }
125
126 WARN("unsupported interface: %s\n", debugstr_guid(&riid));
127 return E_NOINTERFACE;
128}
129
131{
132 return ::InterlockedIncrement(&m_cRefs);
133}
134
136{
138 if (!ret)
139 delete this;
140 return ret;
141}
142
146 _In_ HWND hwnd,
148 _In_ DWORD *pdwCookie)
149{
150 FIXME("(%p, %p, 0x%X, %p)\n", pSink, hwnd, dwflags, pdwCookie);
151 if (!pSink)
152 return E_INVALIDARG;
153 return E_NOTIMPL;
154}
155
158 _In_ DWORD dwCookie)
159{
160 FIXME("(0x%lX)\n", dwCookie);
161 return E_NOTIMPL;
162}
163
167 _In_ DWORD dwType,
169 _Out_ IUnknown **ppunk)
170{
171 FIXME("(%lu, %lu, %s, %p)\n", dwThreadId, dwType, wine_dbgstr_guid(&riid), ppunk);
172 return E_NOTIMPL;
173}
174
178 _Out_ ITfLangBarItemMgr **pplbie,
179 _Out_ DWORD *pdwThreadid)
180{
181 FIXME("(%lu, %p, %p)\n", dwThreadId, pplbie, pdwThreadid);
182 return E_NOTIMPL;
183}
184
188 _Out_ ITfInputProcessorProfiles **ppaip,
189 _Out_ DWORD *pdwThreadid)
190{
191 FIXME("(%lu, %p, %p)\n", dwThreadId, ppaip, pdwThreadid);
192 return E_NOTIMPL;
193}
194
198 _In_ BOOL fPrev)
199{
200 FIXME("(%p, %d)\n", dwThreadId, fPrev);
201 return E_NOTIMPL;
202}
203
209{
210 FIXME("(%p, %lu, 0x%lX)\n", pSink, dwThreadId, dwFlags);
211 return E_NOTIMPL;
212}
213
217{
218 FIXME("(0x%lX)\n", dwFlags);
220 return E_INVALIDARG;
221 return s_ShowFloating(dwFlags);
222}
223
226 _Out_ DWORD *pdwFlags)
227{
228 FIXME("(%p)\n", pdwFlags);
229
230 if (!pdwFlags)
231 return E_INVALIDARG;
232
233 return s_GetShowFloatingStatus(pdwFlags);
234}
235
238{
239 FIXME("(%p)\n", pdwStatus);
240 if (!pdwStatus)
241 return E_INVALIDARG;
242 return E_NOTIMPL;
243}
244
245//*****************************************************************************************
246
249{
250 if (pUnkOuter)
252
253 CLangBarMgr *pLangBarMgr = new(cicNoThrow) CLangBarMgr();
254 if (!pLangBarMgr)
255 return E_OUTOFMEMORY;
256
257 HRESULT hr = pLangBarMgr->QueryInterface(IID_ITfLangBarMgr, (PVOID *)ppOut);
258 TRACE("returning %p\n", *ppOut);
259 pLangBarMgr->Release();
260 return hr;
261}
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#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:46
virtual ~CLangBarMgr()
Definition: langbarmgr.cpp:86
STDMETHODIMP RestoreLastFocus(_Out_ DWORD *dwThreadId, _In_ BOOL fPrev) override
Definition: langbarmgr.cpp:196
static HRESULT s_GetShowFloatingStatus(_Out_ DWORD *pdwFlags)
Definition: langbarmgr.cpp:98
STDMETHODIMP GetThreadMarshalInterface(_In_ DWORD dwThreadId, _In_ DWORD dwType, _In_ REFIID riid, _Out_ IUnknown **ppunk) override
Definition: langbarmgr.cpp:165
static BOOL CheckFloatingBits(_In_ DWORD dwBits)
Definition: langbarmgr.cpp:90
STDMETHODIMP ShowFloating(_In_ DWORD dwFlags) override
Definition: langbarmgr.cpp:215
STDMETHODIMP QueryInterface(_In_ REFIID riid, _Out_ PVOID *ppvObj) override
Definition: langbarmgr.cpp:109
STDMETHODIMP GetShowFloatingStatus(_Out_ DWORD *pdwFlags) override
Definition: langbarmgr.cpp:225
static HRESULT s_ShowFloating(_In_ DWORD dwFlags)
Definition: langbarmgr.cpp:103
STDMETHODIMP GetThreadLangBarItemMgr(_In_ DWORD dwThreadId, _Out_ ITfLangBarItemMgr **pplbie, _Out_ DWORD *pdwThreadid) override
Definition: langbarmgr.cpp:176
STDMETHODIMP UnAdviseEventSink(_In_ DWORD dwCookie) override
Definition: langbarmgr.cpp:157
STDMETHODIMP SetModalInput(_In_ ITfLangBarEventSink *pSink, _In_ DWORD dwThreadId, _In_ DWORD dwFlags) override
Definition: langbarmgr.cpp:205
STDMETHODIMP_(ULONG) AddRef() override
STDMETHODIMP GetPrevShowFloatingStatus(_Inout_ DWORD *pdwStatus) override
Definition: langbarmgr.cpp:237
STDMETHODIMP_(ULONG) Release() override
STDMETHODIMP GetInputProcessorProfiles(_In_ DWORD dwThreadId, _Out_ ITfInputProcessorProfiles **ppaip, _Out_ DWORD *pdwThreadid) override
Definition: langbarmgr.cpp:186
STDMETHODIMP AdviseEventSink(_In_ ITfLangBarEventSink *pSink, _In_ HWND hwnd, _In_ DWORD dwflags, _In_ DWORD *pdwCookie) override
Definition: langbarmgr.cpp:144
#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
return ret
Definition: mutex.c:146
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 debugstr_guid
Definition: kernel32.h:35
#define TF_SFT_TRANSPARENCY_GROUP
Definition: langbarmgr.cpp:69
EXTERN_C HRESULT LangBarMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
Definition: langbarmgr.cpp:248
#define TF_SFT_LABEL_GROUP
Definition: langbarmgr.cpp:71
static BOOL IsSingleBitSet(DWORD dwValue)
Definition: langbarmgr.cpp:75
#define TF_SFT_VISIBILITY_GROUP
Definition: langbarmgr.cpp:67
#define TF_SFT_EXTRA_ICON_GROUP
Definition: langbarmgr.cpp:72
static _In_ DWORD dwflags
Definition: dispmode.c:64
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#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 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_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771