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