xref: /reactos/dll/win32/msutb/msutb.cpp (revision 293aa53c)
1 /*
2  * PROJECT:     ReactOS msutb.dll
3  * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4  * PURPOSE:     Language Bar (Tipbar)
5  * COPYRIGHT:   Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6  */
7 
8 #include "precomp.h"
9 
10 WINE_DEFAULT_DEBUG_CHANNEL(msutb);
11 
12 HINSTANCE g_hInst = NULL;
13 UINT g_wmTaskbarCreated = 0;
14 UINT g_uACP = CP_ACP;
15 DWORD g_dwOSInfo = 0;
16 CRITICAL_SECTION g_cs;
17 
18 EXTERN_C void __cxa_pure_virtual(void)
19 {
20     ERR("__cxa_pure_virtual\n");
21 }
22 
23 class CMsUtbModule : public CComModule
24 {
25 };
26 
27 BEGIN_OBJECT_MAP(ObjectMap)
28     //OBJECT_ENTRY(CLSID_MSUTBDeskBand, CDeskBand) // FIXME: Implement this
29 END_OBJECT_MAP()
30 
31 CMsUtbModule gModule;
32 
33 /***********************************************************************
34  *              GetLibTls (MSUTB.@)
35  *
36  * @unimplemented
37  */
38 EXTERN_C LPVOID WINAPI
39 GetLibTls(VOID)
40 {
41     FIXME("stub:()\n");
42     return NULL;
43 }
44 
45 /***********************************************************************
46  *              GetPopupTipbar (MSUTB.@)
47  *
48  * @unimplemented
49  */
50 EXTERN_C BOOL WINAPI
51 GetPopupTipbar(HWND hWnd, BOOL fWinLogon)
52 {
53     FIXME("stub:(%p, %d)\n", hWnd, fWinLogon);
54     return FALSE;
55 }
56 
57 /***********************************************************************
58  *              SetRegisterLangBand (MSUTB.@)
59  *
60  * @unimplemented
61  */
62 EXTERN_C HRESULT WINAPI
63 SetRegisterLangBand(BOOL bRegister)
64 {
65     FIXME("stub:(%d)\n", bRegister);
66     return E_NOTIMPL;
67 }
68 
69 /***********************************************************************
70  *              ClosePopupTipbar (MSUTB.@)
71  *
72  * @unimplemented
73  */
74 EXTERN_C VOID WINAPI
75 ClosePopupTipbar(VOID)
76 {
77     FIXME("stub:()\n");
78 }
79 
80 /***********************************************************************
81  *              DllRegisterServer (MSUTB.@)
82  *
83  * @implemented
84  */
85 STDAPI DllRegisterServer(VOID)
86 {
87     TRACE("()\n");
88     return gModule.DllRegisterServer(FALSE);
89 }
90 
91 /***********************************************************************
92  *              DllUnregisterServer (MSUTB.@)
93  *
94  * @implemented
95  */
96 STDAPI DllUnregisterServer(VOID)
97 {
98     TRACE("()\n");
99     return gModule.DllUnregisterServer(FALSE);
100 }
101 
102 /***********************************************************************
103  *              DllCanUnloadNow (MSUTB.@)
104  *
105  * @implemented
106  */
107 STDAPI DllCanUnloadNow(VOID)
108 {
109     TRACE("()\n");
110     return gModule.DllCanUnloadNow();
111 }
112 
113 /***********************************************************************
114  *              DllGetClassObject (MSUTB.@)
115  *
116  * @implemented
117  */
118 STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
119 {
120     TRACE("()\n");
121     return gModule.DllGetClassObject(rclsid, riid, ppv);
122 }
123 
124 /**
125  * @implemented
126  */
127 HRESULT APIENTRY
128 MsUtbCoCreateInstance(
129     REFCLSID rclsid,
130     LPUNKNOWN pUnkOuter,
131     DWORD dwClsContext,
132     REFIID iid,
133     LPVOID *ppv)
134 {
135     if (IsEqualCLSID(rclsid, CLSID_TF_CategoryMgr))
136         return TF_CreateCategoryMgr((ITfCategoryMgr**)ppv);
137     if (IsEqualCLSID(rclsid, CLSID_TF_DisplayAttributeMgr))
138         return TF_CreateDisplayAttributeMgr((ITfDisplayAttributeMgr **)ppv);
139     return cicRealCoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, ppv);
140 }
141 
142 /**
143  * @unimplemented
144  */
145 BOOL ProcessAttach(HINSTANCE hinstDLL)
146 {
147     ::InitializeCriticalSectionAndSpinCount(&g_cs, 0);
148 
149     g_hInst = hinstDLL;
150 
151     cicGetOSInfo(&g_uACP, &g_dwOSInfo);
152 
153     TFInitLib(MsUtbCoCreateInstance);
154     cicInitUIFLib();
155 
156     //CTrayIconWnd::RegisterClassW(); //FIXME
157 
158     g_wmTaskbarCreated = RegisterWindowMessageW(L"TaskbarCreated");
159 
160     gModule.Init(ObjectMap, hinstDLL, NULL);
161     ::DisableThreadLibraryCalls(hinstDLL);
162 
163     return TRUE;
164 }
165 
166 /**
167  * @implemented
168  */
169 VOID ProcessDetach(HINSTANCE hinstDLL)
170 {
171     cicDoneUIFLib();
172     TFUninitLib();
173     ::DeleteCriticalSection(&g_cs);
174     gModule.Term();
175 }
176 
177 /**
178  * @implemented
179  */
180 EXTERN_C BOOL WINAPI
181 DllMain(
182     _In_ HINSTANCE hinstDLL,
183     _In_ DWORD dwReason,
184     _Inout_opt_ LPVOID lpvReserved)
185 {
186     switch (dwReason)
187     {
188         case DLL_PROCESS_ATTACH:
189         {
190             TRACE("(%p, %lu, %p)\n", hinstDLL, dwReason, lpvReserved);
191             if (!ProcessAttach(hinstDLL))
192             {
193                 ProcessDetach(hinstDLL);
194                 return FALSE;
195             }
196             break;
197         }
198         case DLL_PROCESS_DETACH:
199         {
200             ProcessDetach(hinstDLL);
201             break;
202         }
203     }
204     return TRUE;
205 }
206