ReactOS 0.4.15-dev-7961-gdcf9eb0
msutb.cpp
Go to the documentation of this file.
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-2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8#include "precomp.h"
9
11
12//#define ENABLE_DESKBAND
13
14typedef struct LANGBARITEMSTATE
15{
22
24 {
25 return m_dwDemoteLevel < 2;
26 }
28
39#ifdef ENABLE_DESKBAND
41#else
43#endif
44
51UINT g_uTimeOutIntentional = 10 * 60 * 1000;
52UINT g_uTimeOutMax = 60 * 60 * 1000;
54POINT g_ptTipbar = { -1, -1 };
81
82#define TIMER_ID_DOACCDEFAULTACTION 11
83
85{
86 ERR("__cxa_pure_virtual\n");
87}
88
89class CMsUtbModule : public CComModule
90{
91};
92
94
95class CCicLibMenuItem;
96class CTipbarAccItem;
97class CUTBMenuItem;
98class CMainIconItem;
99class CTrayIconItem;
100class CTipbarWnd;
101class CButtonIconItem;
102class CTrayIconWnd;
103
106
108
110{
112 return FALSE; // Japanese HKL will be skipped
114 return FALSE;
115
116 for (size_t iItem = 0; iItem < g_prghklSkipRedrawing->size(); ++iItem)
117 {
118 if ((*g_prghklSkipRedrawing)[iItem] == hSkipKL)
119 return TRUE; // To be skipped
120 }
121
122 return FALSE; // To be not skipped
123}
124
126{
127 LOCALESIGNATURE Sig;
129 if (!LangID)
130 return FALSE;
131
132 INT size = sizeof(Sig) / sizeof(WCHAR);
134 return FALSE;
135 return (Sig.lsUsb[3] & 0x8000000) != 0;
136}
137
139{
140 LOCALESIGNATURE Sig;
141 INT size = sizeof(Sig) / sizeof(WCHAR);
143 return FALSE;
144
145 HDC hDC = ::GetDC(hWnd);
147 CHARSETINFO CharSetInfo;
150
151 return !!(CharSetInfo.fs.fsCsb[0] & Sig.lsCsbSupported[0]);
152}
153
155{
158 return;
159
161 {
162 // Japanese IME will be skipped
163 g_prghklSkipRedrawing->Add((HKL)UlongToHandle(0xE0010411));
164 }
165
166 CicRegKey regKey;
168 TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\SkipRedrawHKL"));
169 if (error != ERROR_SUCCESS)
170 return;
171
172 TCHAR szValueName[256];
173 for (DWORD dwIndex = 0; ; ++dwIndex)
174 {
175 error = regKey.EnumValue(dwIndex, szValueName, _countof(szValueName));
176 if (error != ERROR_SUCCESS)
177 break;
178
179 if (szValueName[0] == TEXT('0') &&
180 (szValueName[1] == TEXT('x') || szValueName[1] == TEXT('X')))
181 {
182 HKL hKL = (HKL)UlongToHandle(_tcstoul(szValueName, NULL, 16));
183 g_prghklSkipRedrawing->Add(hKL); // This hKL will be skipped
184 }
185 }
186}
187
189{
191 {
194 }
195}
196
198{
201 if (FAILED(hr))
202 return hr;
203
204 if (!pCompMgr)
205 return E_FAIL;
206
207 hr = pCompMgr->GetCompartment(rguid, ppComp);
208 pCompMgr->Release();
209 return hr;
210}
211
213{
214 *pdwValue = 0;
215 ITfCompartment *pComp;
216 HRESULT hr = GetGlobalCompartment(rguid, &pComp);
217 if (SUCCEEDED(hr))
218 {
219 VARIANT vari;
220 hr = pComp->GetValue(&vari);
221 if (hr == S_OK)
222 *pdwValue = V_I4(&vari);
223 pComp->Release();
224 }
225 return hr;
226}
227
229{
230 VARIANT vari;
231 ITfCompartment *pComp;
232 HRESULT hr = GetGlobalCompartment(rguid, &pComp);
233 if (SUCCEEDED(hr))
234 {
235 V_VT(&vari) = VT_I4;
236 V_I4(&vari) = dwValue;
237 hr = pComp->SetValue(0, &vari);
238 pComp->Release();
239 }
240 return hr;
241}
242
244{
245 DWORD dwValue = 0;
247 if (SUCCEEDED(hr) && dwValue)
249}
250
252{
253 ITfLangBarMgr *pLangBarMgr = NULL;
254 HRESULT hr = TF_CreateLangBarMgr(&pLangBarMgr);
255 if (FAILED(hr))
256 return;
257
258 if (pLangBarMgr)
259 {
260 hr = pLangBarMgr->ShowFloating(TF_SFT_HIDDEN);
261 pLangBarMgr->Release();
262 }
263
264 if (SUCCEEDED(hr))
266
267 CicRegKey regKey;
269 TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
271 if (error == ERROR_SUCCESS)
272 ::RegDeleteValue(regKey, TEXT("ctfmon.exe"));
273}
274
276{
277 HKL hGotKL;
278
279 INT iKL, cKLs = TF_MlngInfoCount();
280 for (iKL = 0; iKL < cKLs; ++iKL)
281 {
282 if (TF_GetMlngHKL(iKL, &hGotKL, NULL, 0) && hKL == hGotKL)
283 return TF_GetMlngIconIndex(iKL);
284 }
285
286 if (!TF_GetMlngHKL(0, &hGotKL, NULL, 0))
287 return -1;
288
289 return TF_GetMlngIconIndex(0);
290}
291
292BOOL GethKLDesc(_In_ HKL hKL, _Out_ LPWSTR pszDesc, _In_ UINT cchDesc)
293{
294 HKL hGotKL;
295
296 INT iKL, cKLs = TF_MlngInfoCount();
297 for (iKL = 0; iKL < cKLs; ++iKL)
298 {
299 if (TF_GetMlngHKL(iKL, &hGotKL, pszDesc, cchDesc) && hKL == hGotKL)
300 return TRUE;
301 }
302
303 return TF_GetMlngHKL(0, &hGotKL, pszDesc, cchDesc);
304}
305
308 _In_ ITfMenu *pMenu,
309 _In_ UINT uId,
310 _In_ LPCWSTR pszText,
311 _In_ BOOL bChecked,
313{
314 HBITMAP hbmp = NULL, hbmpMask = NULL;
315 if (hIcon)
316 {
318 SIZE iconSize = { 16, 16 };
319 if (!hIconNew)
320 hIconNew = hIcon;
321 if (!cicGetIconBitmaps(hIconNew, &hbmp, &hbmpMask, &iconSize))
322 return E_FAIL;
323 if (hIconNew)
324 ::DestroyIcon(hIconNew);
326 }
327
328 INT cchText = lstrlenW(pszText);
329 DWORD dwFlags = (bChecked ? TF_LBMENUF_CHECKED : 0);
330 return pMenu->AddMenuItem(uId, dwFlags, hbmp, hbmpMask, pszText, cchText, NULL);
331}
332
334{
335 return pMenu->AddMenuItem(-1, TF_LBMENUF_SEPARATOR, NULL, NULL, NULL, 0, NULL);
336}
337
338// Is it a Far-East language ID?
340{
341 switch (LangID)
342 {
343 case MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED): // Chinese (Simplified)
344 case MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL): // Chinese (Traditional)
345 case MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT): // Japanese
346 case MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT): // Korean
347 return TRUE;
348 default:
349 return FALSE;
350 }
351}
352
354{
355 BOOL ret = FALSE;
356 ITfInputProcessorProfiles *pProfiles = NULL;
357 LANGID *pLangIds = NULL;
358 ULONG iItem, cItems;
359
361 return FALSE;
362
364 return TRUE;
365
367 SUCCEEDED(pProfiles->GetLanguageList(&pLangIds, &cItems)))
368 {
369 for (iItem = 0; iItem < cItems; ++iItem)
370 {
371 if (IsFELangId(pLangIds[iItem]))
372 break;
373 }
374
375 ret = (iItem == cItems);
376 }
377
378 if (pLangIds)
379 CoTaskMemFree(pLangIds);
380 if (pProfiles)
381 pProfiles->Release();
382
383 return ret;
384}
385
388{
389 return FALSE;
390}
391
392static INT CALLBACK
394{
395 if ((nFontType != TRUETYPE_FONTTYPE) || (pLF->elfLogFont.lfFaceName[0] != '@'))
396 return TRUE;
397 *(BOOL*)lParam = TRUE;
398 return FALSE;
399}
400
403{
404 BOOL bHasVertical = FALSE;
405 HDC hDC = ::GetDC(NULL);
408 return bHasVertical;
409}
410
412{
413 if (!g_bEnableDeskBand || !(g_dwOSInfo & CIC_OSINFO_XPPLUS)) // Desk band is for XP+
414 return FALSE;
415
416 CicRegKey regKey;
417 if (regKey.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\")))
418 {
419 DWORD dwValue = 0;
420 regKey.QueryDword(TEXT("ShowDeskBand"), &dwValue);
421 return !!dwValue;
422 }
423
424 return FALSE;
425}
426
428{
429 CicRegKey regKey;
430 if (regKey.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"), KEY_ALL_ACCESS))
431 regKey.SetDword(TEXT("ShowDeskBand"), bShow);
432}
433
434BOOL RegisterComCat(REFCLSID rclsid, REFCATID rcatid, BOOL bRegister)
435{
437 return FALSE;
438
439 ICatRegister *pCat;
440 HRESULT hr = ::CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER,
441 IID_ICatRegister, (void**)&pCat);
442 if (SUCCEEDED(hr))
443 {
444 if (bRegister)
445 hr = pCat->RegisterClassImplCategories(rclsid, 1, const_cast<CATID*>(&rcatid));
446 else
447 hr = pCat->UnRegisterClassImplCategories(rclsid, 1, const_cast<CATID*>(&rcatid));
448
449 pCat->Release();
450 }
451
453
454 //if (IsIE5())
455 // ::RegDeleteKey(HKEY_CLASSES_ROOT, TEXT("Component Categories\\{00021492-0000-0000-C000-000000000046}\\Enum"));
456
457 return SUCCEEDED(hr);
458}
459
461{
462 DWORD dwValue;
464
465 CicRegKey regKey1;
466 error = regKey1.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\"));
467 if (error == ERROR_SUCCESS)
468 {
469 error = regKey1.QueryDword(TEXT("ShowTipbar"), &dwValue);
470 if (error == ERROR_SUCCESS)
471 g_bShowTipbar = !!dwValue;
472 }
473
474 CicRegKey regKey2;
475 error = regKey2.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
476 if (error == ERROR_SUCCESS)
477 {
478 error = regKey2.QueryDword(TEXT("ShowDebugMenu"), &dwValue);
479 if (error == ERROR_SUCCESS)
480 g_bShowDebugMenu = !!dwValue;
481 error = regKey2.QueryDword(TEXT("NewLook"), &dwValue);
482 if (error == ERROR_SUCCESS)
483 g_bNewLook = !!dwValue;
484 error = regKey2.QueryDword(TEXT("IntelliSense"), &dwValue);
485 if (error == ERROR_SUCCESS)
486 g_bIntelliSense = !!dwValue;
487 error = regKey2.QueryDword(TEXT("ShowCloseMenu"), &dwValue);
488 if (error == ERROR_SUCCESS)
489 g_bShowCloseMenu = !!dwValue;
490 error = regKey2.QueryDword(TEXT("TimeOutNonIntentional"), &dwValue);
491 if (error == ERROR_SUCCESS)
492 g_uTimeOutNonIntentional = 1000 * dwValue;
493 error = regKey2.QueryDword(TEXT("TimeOutIntentional"), &dwValue);
494 if (error == ERROR_SUCCESS)
495 {
496 g_uTimeOutIntentional = 1000 * dwValue;
497 g_uTimeOutMax = 6000 * dwValue;
498 }
499 error = regKey2.QueryDword(TEXT("ShowMinimizedBalloon"), &dwValue);
500 if (error == ERROR_SUCCESS)
501 g_bShowMinimizedBalloon = !!dwValue;
502 error = regKey2.QueryDword(TEXT("Left"), &dwValue);
503 if (error == ERROR_SUCCESS)
504 g_ptTipbar.x = dwValue;
505 error = regKey2.QueryDword(TEXT("Top"), &dwValue);
506 if (error == ERROR_SUCCESS)
507 g_ptTipbar.y = dwValue;
508 error = regKey2.QueryDword(TEXT("ExcludeCaptionButtons"), &dwValue);
509 if (error == ERROR_SUCCESS)
510 g_bExcludeCaptionButtons = !!dwValue;
511 error = regKey2.QueryDword(TEXT("ShowShadow"), &dwValue);
512 if (error == ERROR_SUCCESS)
513 g_bShowShadow = !!dwValue;
514 error = regKey2.QueryDword(TEXT("TaskbarTheme"), &dwValue);
515 if (error == ERROR_SUCCESS)
516 g_fTaskbarTheme = !!dwValue;
517 error = regKey2.QueryDword(TEXT("Vertical"), &dwValue);
518 if (error == ERROR_SUCCESS)
519 g_fVertical = !!dwValue;
520 error = regKey2.QueryDword(TEXT("TimerElapseSTUBSTART"), &dwValue);
521 if (error == ERROR_SUCCESS)
522 g_uTimerElapseSTUBSTART = dwValue;
523 error = regKey2.QueryDword(TEXT("TimerElapseSTUBEND"), &dwValue);
524 if (error == ERROR_SUCCESS)
525 g_uTimerElapseSTUBEND = dwValue;
526 error = regKey2.QueryDword(TEXT("TimerElapseBACKTOALPHA"), &dwValue);
527 if (error == ERROR_SUCCESS)
529 error = regKey2.QueryDword(TEXT("TimerElapseONTHREADITEMCHANGE"), &dwValue);
530 if (error == ERROR_SUCCESS)
532 error = regKey2.QueryDword(TEXT("TimerElapseSETWINDOWPOS"), &dwValue);
533 if (error == ERROR_SUCCESS)
535 error = regKey2.QueryDword(TEXT("TimerElapseONUPDATECALLED"), &dwValue);
536 if (error == ERROR_SUCCESS)
538 error = regKey2.QueryDword(TEXT("TimerElapseSYSCOLORCHANGED"), &dwValue);
539 if (error == ERROR_SUCCESS)
541 error = regKey2.QueryDword(TEXT("TimerElapseDISPLAYCHANGE"), &dwValue);
542 if (error == ERROR_SUCCESS)
544 error = regKey2.QueryDword(TEXT("TimerElapseUPDATEUI"), &dwValue);
545 if (error == ERROR_SUCCESS)
546 g_uTimerElapseUPDATEUI = dwValue;
547 error = regKey2.QueryDword(TEXT("TimerElapseSHOWWINDOW"), &dwValue);
548 if (error == ERROR_SUCCESS)
549 g_uTimerElapseSHOWWINDOW = dwValue;
550 error = regKey2.QueryDword(TEXT("TimerElapseMOVETOTRAY"), &dwValue);
551 if (error == ERROR_SUCCESS)
552 g_uTimerElapseMOVETOTRAY = dwValue;
553 error = regKey2.QueryDword(TEXT("TimerElapseTRAYWNDONDELAYMSG"), &dwValue);
554 if (error == ERROR_SUCCESS)
556 error = regKey2.QueryDword(TEXT("TimerElapseDOACCDEFAULTACTION"), &dwValue);
557 if (error == ERROR_SUCCESS)
559 error = regKey2.QueryDword(TEXT("TimerElapseENSUREFOCUS"), &dwValue);
560 if (error == ERROR_SUCCESS)
563 {
564 error = regKey2.QueryDword(TEXT("ShowDeskBand"), &dwValue);
565 if (error == ERROR_SUCCESS)
566 g_bShowDeskBand = !!dwValue;
567 error = regKey2.QueryDword(TEXT("TimerElapseSHOWWDESKBAND"), &dwValue);
568 if (error == ERROR_SUCCESS)
570 }
571 }
572
573 CicRegKey regKey3;
574 error = regKey3.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Policies\\Microsoft\\MSCTF"));
575 if (error == ERROR_SUCCESS)
576 {
577 error = regKey3.QueryDword(TEXT("DisableCloseButton"), &dwValue);
578 if (error == ERROR_SUCCESS)
579 g_fPolicyDisableCloseButton = !!dwValue;
580 }
581
582 CicRegKey regKey4;
583 error = regKey4.Open(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Policies\\Microsoft\\MSCTF"));
584 if (error == ERROR_SUCCESS)
585 {
586 error = regKey4.QueryDword(TEXT("EnableLanguagebarInFullscreen"), &dwValue);
587 if (error == ERROR_SUCCESS)
589 }
590
592
593 if (g_bNewLook)
594 {
597 if (g_bShowShadow)
601 }
602 else
603 {
607 }
608
611
613 {
617 g_fRTL = TRUE;
618 }
619
620 return TRUE;
621}
622
623/***********************************************************************/
624
626{
629
631 {
633 m_hTrayWnd = ::FindWindowW(L"Shell_TrayWnd", NULL);
634 return m_hTrayWnd;
635 }
636
638 {
640 m_hProgmanWnd = ::FindWindowW(L"Progman", NULL);
641 return m_hProgmanWnd;
642 }
643
644 void clear()
645 {
647 }
648};
649
650/***********************************************************************/
651
653{
654protected:
657
658public:
660 virtual ~CUTBLangBarDlg() { }
661
662 static CUTBLangBarDlg *GetThis(HWND hDlg);
663 static void SetThis(HWND hDlg, CUTBLangBarDlg *pThis);
664 static DWORD WINAPI s_ThreadProc(LPVOID pParam);
666
668 LONG _Release();
669
670 STDMETHOD_(BOOL, DoModal)(HWND hDlg) = 0;
672 STDMETHOD_(BOOL, IsDlgShown)() = 0;
673 STDMETHOD_(void, SetDlgShown)(BOOL bShown) = 0;
675};
676
677/***********************************************************************/
678
680{
681public:
683
685
686 STDMETHOD_(BOOL, DoModal)(HWND hDlg) override;
688 STDMETHOD_(BOOL, IsDlgShown)() override;
689 STDMETHOD_(void, SetDlgShown)(BOOL bShown) override;
690};
691
693
694/***********************************************************************/
695
697{
698public:
700
702
703 STDMETHOD_(BOOL, DoModal)(HWND hDlg) override;
705 STDMETHOD_(BOOL, IsDlgShown)() override;
706 STDMETHOD_(void, SetDlgShown)(BOOL bShown) override;
708};
709
711
712/***********************************************************************/
713
714class CCicLibMenu : public ITfMenu
715{
716protected:
719
720public:
721 CCicLibMenu();
722 virtual ~CCicLibMenu();
723
724 STDMETHOD(QueryInterface)(REFIID riid, LPVOID *ppvObj) override;
725 STDMETHOD_(ULONG, AddRef)() override;
728 UINT uId,
731 HBITMAP hbmpMask,
732 const WCHAR *pch,
733 ULONG cch,
734 ITfMenu **ppSubMenu) override;
735 STDMETHOD_(CCicLibMenu*, CreateSubMenu)();
736 STDMETHOD_(CCicLibMenuItem*, CreateMenuItem)();
737};
738
739/***********************************************************************/
740
742{
743protected:
750
751public:
753 virtual ~CCicLibMenuItem();
754
755 BOOL Init(
756 UINT uId,
759 HBITMAP hbmpMask,
760 const WCHAR *pch,
761 ULONG cch,
762 ITfMenu *pMenu);
764};
765
766/***********************************************************************/
767
769{
770protected:
778 friend class CUTBMenuWnd;
779 friend class CTipbarWnd;
780
781public:
783 virtual ~CTipbarAccessible();
784
786
789 void ClearAccItems();
792
796 void SetWindow(HWND hWnd);
797
798 // IUnknown methods
802
803 // IDispatch methods
806 UINT iTInfo,
807 LCID lcid,
808 ITypeInfo **ppTInfo);
810 REFIID riid,
811 LPOLESTR *rgszNames,
812 UINT cNames,
813 LCID lcid,
814 DISPID *rgDispId);
816 DISPID dispIdMember,
817 REFIID riid,
818 LCID lcid,
819 WORD wFlags,
820 DISPPARAMS *pDispParams,
821 VARIANT *pVarResult,
822 EXCEPINFO *pExcepInfo,
823 UINT *puArgErr);
824
825 // IAccessible methods
826 STDMETHOD(get_accParent)(IDispatch **ppdispParent);
827 STDMETHOD(get_accChildCount)(LONG *pcountChildren);
828 STDMETHOD(get_accChild)(VARIANT varChildID, IDispatch **ppdispChild);
829 STDMETHOD(get_accName)(VARIANT varID, BSTR *pszName);
830 STDMETHOD(get_accValue)(VARIANT varID, BSTR *pszValue);
832 STDMETHOD(get_accRole)(VARIANT varID, VARIANT *role);
835 STDMETHOD(get_accHelpTopic)(BSTR *helpfile, VARIANT varID, LONG *pidTopic);
840 STDMETHOD(accSelect)(LONG flagsSelect, VARIANT varID);
842 LONG *left,
843 LONG *top,
844 LONG *width,
845 LONG *height,
846 VARIANT varID);
847 STDMETHOD(accNavigate)(LONG dir, VARIANT varStart, VARIANT *pvarEnd);
852};
853
854/***********************************************************************/
855
857{
858public:
860 virtual ~CTipbarAccItem() { }
861
862 STDMETHOD_(BSTR, GetAccName)()
863 {
864 return SysAllocString(L"");
865 }
866 STDMETHOD_(BSTR, GetAccValue)()
867 {
868 return NULL;
869 }
870 STDMETHOD_(INT, GetAccRole)()
871 {
872 return 10;
873 }
874 STDMETHOD_(INT, GetAccState)()
875 {
876 return 256;
877 }
878 STDMETHOD_(void, GetAccLocation)(LPRECT lprc)
879 {
880 *lprc = { 0, 0, 0, 0 };
881 }
882 STDMETHOD_(BSTR, GetAccDefaultAction)()
883 {
884 return NULL;
885 }
886 STDMETHOD_(BOOL, DoAccDefaultAction)()
887 {
888 return FALSE;
889 }
890 STDMETHOD_(BOOL, DoAccDefaultActionReal)()
891 {
892 return FALSE;
893 }
894};
895
896/***********************************************************************/
897
899{
900public:
902
905
907 {
908 if (m_bCoInit)
909 return S_OK;
911 if (FAILED(hr))
912 return hr;
913 m_bCoInit = TRUE;
914 return S_OK;
915 }
916
917 void CoUninit()
918 {
919 if (m_bCoInit)
920 {
923 }
924 }
925};
926
927/***********************************************************************/
928
929class CUTBMenuWnd : public CTipbarAccItem, public CUIFMenu
930{
931protected:
935 friend class CUTBMenuItem;
936
937public:
939
941
943 {
944 return static_cast<CTipbarAccItem*>(this);
945 }
947 {
948 return static_cast<CUIFMenu*>(this);
949 }
950
951 STDMETHOD_(BSTR, GetAccName)() override;
952 STDMETHOD_(INT, GetAccRole)() override;
954 STDMETHOD_(void, OnCreate)(HWND hWnd) override;
955 STDMETHOD_(void, OnDestroy)(HWND hWnd) override;
958 STDMETHOD_(void, OnTimer)(WPARAM wParam) override;
959};
960
961/***********************************************************************/
962
964{
965protected:
967 friend class CUTBMenuWnd;
968
969public:
970 CUTBMenuItem(CUTBMenuWnd *pMenuUI);
971 ~CUTBMenuItem() override;
972
974 {
975 return static_cast<CUIFMenuItem*>(this);
976 }
977
978 STDMETHOD_(BOOL, DoAccDefaultAction)() override;
979 STDMETHOD_(BOOL, DoAccDefaultActionReal)() override;
980 STDMETHOD_(BSTR, GetAccDefaultAction)() override;
981 STDMETHOD_(void, GetAccLocation)(LPRECT lprc) override;
982 STDMETHOD_(BSTR, GetAccName)() override;
983 STDMETHOD_(INT, GetAccRole)() override;
984};
985
986/***********************************************************************/
987
989{
990public:
993
994public:
996 virtual ~CModalMenu() { }
997
998 CUTBMenuItem *InsertItem(CUTBMenuWnd *pMenuUI, INT nCommandId, INT nStringID);
1000 void CancelMenu();
1001};
1002
1003/***********************************************************************/
1004
1005class CTipbarThread;
1006
1008{
1009public:
1012
1013public:
1014 CUTBContextMenu(CTipbarWnd *pTipbarWnd);
1015
1016 BOOL Init();
1018
1020 CUIFWindow *pWindow,
1021 POINT pt,
1022 LPCRECT prc,
1023 BOOL bFlag);
1024
1025 BOOL SelectMenuItem(UINT nCommandId);
1026};
1027
1028/***********************************************************************/
1029
1030class CUTBLBarMenuItem;
1031
1033{
1034protected:
1037
1038public:
1040 ~CUTBLBarMenu() override;
1041
1043 INT ShowPopup(CUIFWindow *pWindow, POINT pt, LPCRECT prcExclude);
1044
1045 STDMETHOD_(CCicLibMenuItem*, CreateMenuItem)() override;
1046 STDMETHOD_(CCicLibMenu*, CreateSubMenu)() override;
1047};
1048
1049/***********************************************************************/
1050
1052{
1053public:
1055
1056public:
1058 BOOL InsertToUI(CUTBMenuWnd *pMenuUI);
1059};
1060
1061/***********************************************************************/
1062
1064{
1065protected:
1068 friend class CTipbarWnd;
1069
1070public:
1072
1073 STDMETHOD_(void, OnLButtonUp)(LONG x, LONG y) override;
1074 STDMETHOD_(void, OnRButtonUp)(LONG x, LONG y) override;
1075 STDMETHOD_(BOOL, OnSetCursor)(UINT uMsg, LONG x, LONG y) override;
1076};
1077
1078/***********************************************************************/
1079
1080class CLangBarItemList : public CicArray<LANGBARITEMSTATE>
1081{
1082public:
1084
1086 void Clear();
1087 BOOL SetDemoteLevel(REFCLSID rclsid, DWORD dwDemoteLevel);
1088
1091
1092 void Load();
1093 void SaveItem(CicRegKey *pRegKey, const LANGBARITEMSTATE *pState);
1094
1095 void StartDemotingTimer(REFCLSID rclsid, BOOL bIntentional);
1097};
1098
1099/***********************************************************************/
1100
1102{
1103protected:
1120 friend class CTipbarWnd;
1121
1124
1125public:
1126 CTrayIconWnd();
1127 ~CTrayIconWnd();
1128
1129 static BOOL RegisterClass();
1130 static CTrayIconWnd *GetThis(HWND hWnd);
1131 static void SetThis(HWND hWnd, LPCREATESTRUCT pCS);
1132
1133 HWND CreateWnd();
1134 void DestroyWnd();
1135
1136 BOOL SetMainIcon(HKL hKL);
1137 BOOL SetIcon(REFGUID rguid, DWORD dwUnknown24, HICON hIcon, LPCWSTR psz);
1138
1140 void RemoveUnusedIcons(int unknown);
1141
1143 BOOL FindTrayEtc();
1146
1147 void CallOnDelayMsg();
1148};
1149
1150/***********************************************************************/
1151
1153{
1154protected:
1165 friend class CTrayIconWnd;
1166
1167public:
1168 CTrayIconItem(CTrayIconWnd *pTrayIconWnd);
1169 virtual ~CTrayIconItem() { }
1170
1171 BOOL _Init(HWND hWnd, UINT uCallbackMessage, UINT uNotifyIconID, const GUID& rguid);
1173 BOOL RemoveIcon();
1174
1177 STDMETHOD_(BOOL, OnDelayMsg)(UINT uMsg) { return 0; };
1178};
1179
1180/***********************************************************************/
1181
1183{
1184protected:
1187 friend class CTrayIconWnd;
1188
1189public:
1190 CButtonIconItem(CTrayIconWnd *pWnd, DWORD dwUnknown24);
1191
1193 STDMETHOD_(BOOL, OnDelayMsg)(UINT uMsg) override;
1194};
1195
1196/***********************************************************************/
1197
1199{
1200public:
1202
1203 BOOL Init(HWND hWnd);
1204 STDMETHOD_(BOOL, OnDelayMsg)(UINT uMsg) override;
1205};
1206
1207/***********************************************************************/
1208
1210{
1211protected:
1217
1218public:
1219 CLBarItemBase();
1220 virtual ~CLBarItemBase();
1221
1222 HRESULT ShowInternal(BOOL bShow, BOOL bUpdate);
1223
1224 void InitNuiInfo(
1225 REFIID clsidService,
1226 REFGUID guidItem,
1227 DWORD dwStyle,
1228 DWORD ulSort,
1229 LPCWSTR Source);
1230
1232 HRESULT GetStatus(DWORD *pdwStatus);
1233 HRESULT Show(BOOL fShow);
1234 HRESULT GetTooltipString(BSTR *pbstrToolTip);
1235
1236 HRESULT AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie);
1237 HRESULT UnadviseSink(DWORD dwCookie);
1238};
1239
1240/***********************************************************************/
1241
1243 : public CLBarItemBase
1244 , public ITfLangBarItem
1245 , public ITfLangBarItemButton
1246 , public ITfSource
1247{
1248public:
1250
1251public:
1253 ~CLBarItemButtonBase() override;
1254
1255 // IUnknown methods
1256 STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject) override;
1259
1260 // ITfLangBarItem methods
1261 STDMETHOD(GetInfo)(TF_LANGBARITEMINFO *pInfo) override;
1262 STDMETHOD(GetStatus)(DWORD *pdwStatus) override;
1263 STDMETHOD(Show)(BOOL fShow) override;
1264 STDMETHOD(GetTooltipString)(BSTR *pbstrToolTip) override;
1265
1266 // ITfLangBarItemButton methods
1267 STDMETHOD(OnClick)(TfLBIClick click, POINT pt, LPCRECT prc) override;
1268 STDMETHOD(InitMenu)(ITfMenu *pMenu) override;
1269 STDMETHOD(OnMenuSelect)(UINT wID) override;
1270 STDMETHOD(GetIcon)(HICON *phIcon) override;
1271 STDMETHOD(GetText)(BSTR *pbstr) override;
1272
1273 // ITfSource methods
1274 STDMETHOD(AdviseSink)(REFIID riid, IUnknown *punk, DWORD *pdwCookie) override;
1275 STDMETHOD(UnadviseSink)(DWORD dwCookie) override;
1276};
1277
1278/***********************************************************************/
1279
1282{
1283protected:
1286
1287public:
1289
1290 STDMETHOD(InitMenu)(ITfMenu *pMenu) override;
1291 STDMETHOD(OnMenuSelect)(INT nCommandId);
1292 STDMETHOD(GetIcon)(HICON *phIcon) override;
1293 STDMETHOD(GetText)(BSTR *pbstr) override;
1294};
1295
1296/***********************************************************************/
1297
1298class CTipbarItem;
1299class CTipbarBalloonItem;
1300
1302{
1303protected:
1317 friend class CTipbarWnd;
1318 friend class CTipbarItem;
1319
1320public:
1321 CTipbarThread(CTipbarWnd *pTipbarWnd);
1322 virtual ~CTipbarThread();
1323
1325
1327 HRESULT _UninitItemList(BOOL bUnAdvise);
1328
1331 BOOL IsVertical();
1332
1333 void AddAllSeparators();
1334 void RemoveAllSeparators();
1335
1336 void AddUIObjs();
1337 void RemoveUIObjs();
1338
1339 CTipbarItem *GetItem(REFCLSID rclsid);
1340 void GetTextSize(BSTR bstr, LPSIZE pSize);
1341 void LocateItems();
1342 void MyMoveWnd(LONG xDelta, LONG yDelta);
1343
1345 LONG _AddRef() { return ++m_cRefs; }
1346 LONG _Release();
1347
1349 BOOL SetFocus(CTipbarBalloonItem *pTarget)
1350 {
1351 return FALSE;
1352 }
1353
1356 {
1357 return E_NOTIMPL;
1358 }
1359
1360 //FIXME
1361};
1362
1363/***********************************************************************/
1364
1366{
1367protected:
1378 friend class CTipbarThread;
1379 friend class CTipbarWnd;
1380
1381public:
1383 CTipbarThread *pThread,
1384 ITfLangBarItem *pLangBarItem,
1385 TF_LANGBARITEMINFO *pItemInfo,
1386 DWORD dwUnknown16);
1387 ~CTipbarItem() override;
1388
1389 void _AddedToUI();
1390 void _RemovedToUI();
1391 void AddRemoveMeToUI(BOOL bFlag);
1392
1393 BOOL IsConnected();
1394 void ClearConnections();
1395
1396 void StartDemotingTimer(BOOL bStarted);
1397
1400
1401 STDMETHOD_(BSTR, GetAccName)() override;
1402 STDMETHOD_(void, GetAccLocation)(LPRECT prc) override;
1403 STDMETHOD_(BOOL, DoAccDefaultAction)() override;
1408 STDMETHOD(OnUpdate)(DWORD dwDirty);
1410 STDMETHOD_(void, OnUnknown45)(DWORD dwDirty, DWORD dwStatus) { }
1411 STDMETHOD_(void, OnUpdateHandler)(ULONG, ULONG);
1412 STDMETHOD(OnUnknown46)(CUIFWindow *pWindow) { return S_OK; }
1413 STDMETHOD(OnUnknown47)(CUIFWindow *pWindow) { return S_OK; }
1419 STDMETHOD(OnUnknown53)(BSTR bstr) { return S_OK; }
1420 STDMETHOD_(LPCWSTR, OnUnknown55)() { return NULL; }
1422 STDMETHOD_(LPCWSTR, GetToolTip)();
1425 STDMETHOD_(void, OnUnknown59)() { }
1426 STDMETHOD_(void, OnUnknown60)() { }
1427 STDMETHOD_(void, OnUnknown61)(HWND) { }
1428 STDMETHOD_(void, OnUnknown62)(HWND) { }
1430};
1431
1432/***********************************************************************/
1433
1434class CTipbarCtrlButtonHolder;
1435class CDeskBand;
1436
1437// Flags for m_dwTipbarWndFlags
1438enum
1439{
1449 TIPBAR_TOPFIT = 0x40000,
1452 TIPBAR_LEFTFIT = 0x200000,
1453};
1454
1456 : public ITfLangBarEventSink
1457 , public ITfLangBarEventSink_P
1458 , public CTipbarAccItem
1459 , public CUIFWindow
1460{
1485 CTipbarCtrlButtonHolder *m_pTipbarCtrlButtonHolder;
1499 CDeskBand *m_pDeskBand;
1502 friend class CUTBContextMenu;
1503 friend class CTipbarGripper;
1504 friend class CTipbarThread;
1505 friend class CTipbarItem;
1506 friend class CLBarInatItem;
1507 friend class CMainIconItem;
1509 friend BOOL GetTipbarInternal(HWND hWnd, DWORD dwFlags, CDeskBand *pDeskBand);
1510 friend LONG MyWaitForInputIdle(DWORD dwThreadId, DWORD dwMilliseconds);
1511
1512public:
1514 ~CTipbarWnd() override;
1515
1517 {
1518 return static_cast<CUIFWindow*>(this);
1519 }
1520
1522 {
1523 return static_cast<CTipbarAccItem*>(this);
1524 }
1525
1526 void Init(BOOL bChild, CDeskBand *pDeskBand);
1527 void InitHighContrast();
1528 void InitMetrics();
1529 void InitThemeMargins();
1530 void UnInit();
1531
1535
1538
1539 void MoveToStub(BOOL bFlag);
1540 void RestoreFromStub();
1541
1547 void LocateCtrlButtons();
1549 void SetVertical(BOOL bVertical);
1550 void UpdatePosFlags();
1551
1552 void CancelMenu();
1554 void ClearLBItemList();
1555
1557 void UpdateVerticalFont();
1558
1561 void DestroyWnd();
1562
1565
1566 UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT uElapse);
1567 BOOL KillTimer(UINT_PTR uIDEvent);
1568
1569 void MoveToTray();
1570 void MyClientToScreen(LPPOINT lpPoint, LPRECT prc);
1571 void SavePosition();
1572 void SetAlpha(BYTE bAlpha, BOOL bFlag);
1573 BOOL SetLangBand(BOOL bDeskBand, BOOL bFlag2);
1575 void SetShowText(BOOL bShow);
1576 void SetShowTrayIcon(BOOL bShow);
1577
1578 void ShowContextMenu(POINT pt, LPCRECT prc, BOOL bFlag);
1579 void StartBackToAlphaTimer();
1581
1584
1587 void EnsureFocusThread();
1588 HRESULT SetFocusThread(CTipbarThread *pFocusThread);
1590 void RestoreLastFocus(DWORD *pdwThreadId, BOOL fPrev);
1591 void CleanUpThreadPointer(CTipbarThread *pThread, BOOL bRemove);
1592 void TerminateAllThreads(BOOL bFlag);
1593 void OnTerminateToolbar();
1595
1598 {
1599 return E_NOTIMPL;
1600 }
1601
1602 // IUnknown methods
1603 STDMETHOD(QueryInterface)(REFIID riid, void **ppvObj);
1606
1607 // ITfLangBarEventSink methods
1614
1615 // ITfLangBarEventSink_P methods
1616 STDMETHOD(OnLangBarUpdate)(TfLBIClick click, BOOL bFlag) override;
1617
1618 // CTipbarAccItem methods
1619 STDMETHOD_(BSTR, GetAccName)() override;
1620 STDMETHOD_(void, GetAccLocation)(LPRECT lprc) override;
1621
1622 // CUIFWindow methods
1623 STDMETHOD_(void, PaintObject)(HDC hDC, LPCRECT prc) override;
1624 STDMETHOD_(DWORD, GetWndStyle)() override;
1625 STDMETHOD_(void, Move)(INT x, INT y, INT nWidth, INT nHeight) override;
1626 STDMETHOD_(void, OnMouseOutFromWindow)(LONG x, LONG y) override;
1627 STDMETHOD_(void, OnCreate)(HWND hWnd) override;
1628 STDMETHOD_(void, OnDestroy)(HWND hWnd) override;
1630 STDMETHOD_(void, OnSysColorChange)() override;
1631 STDMETHOD_(void, OnEndSession)(HWND hWnd, WPARAM wParam, LPARAM lParam) override;
1633 STDMETHOD_(LRESULT, OnWindowPosChanged)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
1634 STDMETHOD_(LRESULT, OnWindowPosChanging)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
1637 STDMETHOD_(LRESULT, OnDisplayChange)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
1640 STDMETHOD_(void, OnThemeChanged)(HWND hWnd, WPARAM wParam, LPARAM lParam) override;
1641 STDMETHOD_(void, UpdateUI)(LPCRECT prc) override;
1642 STDMETHOD_(void, HandleMouseMsg)(UINT uMsg, LONG x, LONG y) override;
1643};
1644
1645/***********************************************************************/
1646
1647#ifdef ENABLE_DESKBAND
1648class CDeskBand
1649{
1650public:
1651 // FIXME: Implement this
1652};
1653#endif
1654
1655/***********************************************************************
1656 * CUTBLangBarDlg
1657 */
1658
1660{
1662}
1663
1665{
1666 ::SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pThis);
1667}
1668
1670{
1671 return ((CUTBLangBarDlg *)pParam)->ThreadProc();
1672}
1673
1675{
1676 if (IsDlgShown())
1677 return FALSE;
1678
1679 SetDlgShown(TRUE);
1680
1683 if (!hThread)
1684 {
1685 SetDlgShown(FALSE);
1686 return TRUE;
1687 }
1688
1689 ++m_cRefs;
1691 return TRUE;
1692}
1693
1695{
1696 if (--m_cRefs == 0)
1697 {
1698 delete this;
1699 return 0;
1700 }
1701 return m_cRefs;
1702}
1703
1704STDMETHODIMP_(BOOL) CUTBLangBarDlg::ThreadProc()
1705{
1706 extern HINSTANCE g_hInst;
1708 SetDlgShown(FALSE);
1709 _Release();
1710 return TRUE;
1711}
1712
1715{
1716 if (uMsg == WM_INITDIALOG)
1717 {
1718 SetThis(hDlg, (CUTBLangBarDlg *)lParam);
1719 ::ShowWindow(hDlg, SW_RESTORE);
1720 ::UpdateWindow(hDlg);
1721 return TRUE;
1722 }
1723
1724 if (uMsg == WM_COMMAND)
1725 {
1727 pThis->OnCommand(hDlg, wParam, lParam);
1728 return TRUE;
1729 }
1730
1731 return FALSE;
1732}
1733
1734/***********************************************************************
1735 * CUTBCloseLangBarDlg
1736 */
1737
1739{
1740 m_cRefs = 1;
1741
1744 else
1746}
1747
1748STDMETHODIMP_(BOOL) CUTBCloseLangBarDlg::DoModal(HWND hDlg)
1749{
1750 CicRegKey regKey;
1751 LSTATUS error;
1752 DWORD dwValue = FALSE;
1753 error = regKey.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
1754 if (error == ERROR_SUCCESS)
1755 regKey.QueryDword(TEXT("DontShowCloseLangBarDlg"), &dwValue);
1756
1757 if (dwValue)
1758 return FALSE;
1759
1760 StartThread();
1761 return TRUE;
1762}
1763
1764STDMETHODIMP_(BOOL) CUTBCloseLangBarDlg::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
1765{
1766 switch (LOWORD(wParam))
1767 {
1768 case IDOK:
1771 {
1772 CicRegKey regKey;
1773 LSTATUS error;
1774 error = regKey.Create(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
1775 if (error == ERROR_SUCCESS)
1776 regKey.SetDword(TEXT("DontShowCloseLangBarDlg"), TRUE);
1777 }
1778 ::EndDialog(hDlg, TRUE);
1779 break;
1780
1781 case IDCANCEL:
1782 ::EndDialog(hDlg, FALSE);
1783 break;
1784
1785 default:
1786 return FALSE;
1787 }
1788 return TRUE;
1789}
1790
1791STDMETHODIMP_(BOOL) CUTBCloseLangBarDlg::IsDlgShown()
1792{
1793 return s_bIsDlgShown;
1794}
1795
1796STDMETHODIMP_(void) CUTBCloseLangBarDlg::SetDlgShown(BOOL bShown)
1797{
1798 s_bIsDlgShown = bShown;
1799}
1800
1801/***********************************************************************
1802 * CUTBMinimizeLangBarDlg
1803 */
1804
1806{
1807 m_cRefs = 1;
1810 else
1812}
1813
1814STDMETHODIMP_(BOOL) CUTBMinimizeLangBarDlg::DoModal(HWND hDlg)
1815{
1816 CicRegKey regKey;
1817 LSTATUS error;
1818
1819 DWORD dwValue = FALSE;
1820 error = regKey.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
1821 if (error == ERROR_SUCCESS)
1822 regKey.QueryDword(TEXT("DontShowMinimizeLangBarDlg"), &dwValue);
1823
1824 if (dwValue)
1825 return FALSE;
1826
1827 StartThread();
1828 return TRUE;
1829}
1830
1831STDMETHODIMP_(BOOL) CUTBMinimizeLangBarDlg::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
1832{
1833 switch (LOWORD(wParam))
1834 {
1835 case IDOK:
1837 {
1838 LSTATUS error;
1839 CicRegKey regKey;
1840 error = regKey.Create(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
1841 if (error == ERROR_SUCCESS)
1842 regKey.SetDword(TEXT("DontShowMinimizeLangBarDlg"), TRUE);
1843 }
1844 ::EndDialog(hDlg, TRUE);
1845 break;
1846 case IDCANCEL:
1847 ::EndDialog(hDlg, FALSE);
1848 break;
1849 default:
1850 return FALSE;
1851 }
1852 return TRUE;
1853}
1854
1855STDMETHODIMP_(BOOL) CUTBMinimizeLangBarDlg::IsDlgShown()
1856{
1857 return s_bIsDlgShown;
1858}
1859
1860STDMETHODIMP_(void) CUTBMinimizeLangBarDlg::SetDlgShown(BOOL bShown)
1861{
1862 s_bIsDlgShown = bShown;
1863}
1864
1865STDMETHODIMP_(BOOL) CUTBMinimizeLangBarDlg::ThreadProc()
1866{
1867 ::Sleep(700);
1868 return CUTBLangBarDlg::ThreadProc();
1869}
1870
1871/***********************************************************************
1872 * CCicLibMenu
1873 */
1874
1876{
1877}
1878
1880{
1881 for (size_t iItem = 0; iItem < m_MenuItems.size(); ++iItem)
1882 {
1883 delete m_MenuItems[iItem];
1884 m_MenuItems[iItem] = NULL;
1885 }
1886}
1887
1889{
1890 static const QITAB c_tab[] =
1891 {
1893 { NULL }
1894 };
1895 return ::QISearch(this, c_tab, riid, ppvObj);
1896}
1897
1899{
1900 return ++m_cRefs;
1901}
1902
1904{
1905 if (--m_cRefs == 0)
1906 {
1907 delete this;
1908 return 0;
1909 }
1910 return m_cRefs;
1911}
1912
1913STDMETHODIMP_(CCicLibMenu*) CCicLibMenu::CreateSubMenu()
1914{
1915 return new(cicNoThrow) CCicLibMenu();
1916}
1917
1918STDMETHODIMP_(CCicLibMenuItem*) CCicLibMenu::CreateMenuItem()
1919{
1920 return new(cicNoThrow) CCicLibMenuItem();
1921}
1922
1924 UINT uId,
1925 DWORD dwFlags,
1926 HBITMAP hbmp,
1927 HBITMAP hbmpMask,
1928 const WCHAR *pch,
1929 ULONG cch,
1930 ITfMenu **ppSubMenu)
1931{
1932 if (ppSubMenu)
1933 *ppSubMenu = NULL;
1934
1935 CCicLibMenu *pSubMenu = NULL;
1937 {
1938 if (!ppSubMenu)
1939 return E_INVALIDARG;
1940 pSubMenu = CreateSubMenu();
1941 }
1942
1943 CCicLibMenuItem *pMenuItem = CreateMenuItem();
1944 if (!pMenuItem)
1945 return E_OUTOFMEMORY;
1946
1947 if (!pMenuItem->Init(uId, dwFlags, hbmp, hbmpMask, pch, cch, pSubMenu))
1948 return E_FAIL;
1949
1950 if (ppSubMenu && pSubMenu)
1951 {
1952 *ppSubMenu = pSubMenu;
1953 pSubMenu->AddRef();
1954 }
1955
1956 m_MenuItems.Add(pMenuItem);
1957 return S_OK;
1958}
1959
1960/***********************************************************************
1961 * CCicLibMenuItem
1962 */
1963
1965{
1966 m_uId = 0;
1967 m_dwFlags = 0;
1968 m_hbmp = NULL;
1969 m_hbmpMask = NULL;
1970 m_bstrText = NULL;
1971 m_pMenu = NULL;
1972}
1973
1975{
1976 if (m_pMenu)
1977 {
1978 m_pMenu->Release();
1979 m_pMenu = NULL;
1980 }
1981
1982 if (m_hbmp)
1983 {
1985 m_hbmp = NULL;
1986 }
1987
1988 if (m_hbmpMask)
1989 {
1991 m_hbmpMask = NULL;
1992 }
1993
1995 m_bstrText = NULL;
1996}
1997
1999 UINT uId,
2000 DWORD dwFlags,
2001 HBITMAP hbmp,
2002 HBITMAP hbmpMask,
2003 const WCHAR *pch,
2004 ULONG cch,
2005 ITfMenu *pMenu)
2006{
2007 m_uId = uId;
2010 if (!m_bstrText && cch)
2011 return FALSE;
2012
2013 m_pMenu = pMenu;
2015 m_hbmpMask = CreateBitmap(hbmpMask);
2016 if (hbmp)
2018 if (hbmpMask)
2019 ::DeleteObject(hbmpMask);
2020
2021 return TRUE;
2022}
2023
2025{
2026 if (!hBitmap)
2027 return NULL;
2028
2029 HDC hDC = ::CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
2030 if (!hDC)
2031 return NULL;
2032
2033 HBITMAP hbmMem = NULL;
2034
2035 BITMAP bm;
2036 ::GetObject(hBitmap, sizeof(bm), &bm);
2037
2038 HGDIOBJ hbmOld1 = NULL;
2039 HDC hdcMem1 = ::CreateCompatibleDC(hDC);
2040 if (hdcMem1)
2041 hbmOld1 = ::SelectObject(hdcMem1, hBitmap);
2042
2043 HGDIOBJ hbmOld2 = NULL;
2044 HDC hdcMem2 = ::CreateCompatibleDC(hDC);
2045 if (hdcMem2)
2046 {
2047 hbmMem = ::CreateCompatibleBitmap(hDC, bm.bmWidth, bm.bmHeight);
2048 hbmOld2 = ::SelectObject(hdcMem2, hbmMem);
2049 }
2050
2051 ::BitBlt(hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem1, 0, 0, SRCCOPY);
2052
2053 if (hbmOld1)
2054 ::SelectObject(hdcMem1, hbmOld1);
2055 if (hbmOld2)
2056 ::SelectObject(hdcMem2, hbmOld2);
2057
2058 ::DeleteDC(hDC);
2059 if (hdcMem1)
2060 ::DeleteDC(hdcMem1);
2061 if (hdcMem2)
2062 ::DeleteDC(hdcMem2);
2063
2064 return hbmMem;
2065}
2066
2067/***********************************************************************
2068 * CTipbarAccessible
2069 */
2070
2072{
2073 m_cRefs = 1;
2074 m_hWnd = NULL;
2075 m_pTypeInfo = NULL;
2078 m_cSelection = 1;
2079 m_AccItems.Add(pItem);
2080 ++g_DllRefCount;
2081}
2082
2084{
2086 if (m_pTypeInfo)
2087 {
2089 m_pTypeInfo = NULL;
2090 }
2091 if (m_pStdAccessible)
2092 {
2095 }
2096 --g_DllRefCount;
2097}
2098
2100{
2102
2104 (void **)&m_pStdAccessible);
2105 if (FAILED(hr))
2106 return hr;
2107
2108 ITypeLib *pTypeLib;
2109 hr = ::LoadRegTypeLib(LIBID_Accessibility, 1, 0, 0, &pTypeLib);
2110 if (FAILED(hr))
2111 hr = ::LoadTypeLib(L"OLEACC.DLL", &pTypeLib);
2112
2113 if (SUCCEEDED(hr))
2114 {
2115 hr = pTypeLib->GetTypeInfoOfGuid(IID_IAccessible, &m_pTypeInfo);
2116 pTypeLib->Release();
2117 }
2118
2119 return hr;
2120}
2121
2123{
2124 return m_AccItems.Add(pItem);
2125}
2126
2128{
2129 for (size_t iItem = 0; iItem < m_AccItems.size(); ++iItem)
2130 {
2131 if (m_AccItems[iItem] == pItem)
2132 {
2133 m_AccItems.Remove(iItem, 1);
2134 break;
2135 }
2136 }
2137 return S_OK;
2138}
2139
2141{
2142 m_AccItems.clear();
2143}
2144
2146{
2147 if (iItem < 0 || (INT)m_AccItems.size() <= iItem)
2148 return NULL;
2149 return m_AccItems[iItem];
2150}
2151
2153{
2154 for (size_t iItem = 0; iItem < m_AccItems.size(); ++iItem)
2155 {
2156 if (pTarget == m_AccItems[iItem])
2157 return (INT)iItem;
2158 }
2159 return -1;
2160}
2161
2163{
2164 return ::LresultFromObject(IID_IAccessible, wParam, this);
2165}
2166
2168{
2169 CTipbarAccItem *pItem = AccItemFromID(nID);
2170 if (!pItem)
2171 return FALSE;
2172 return pItem->DoAccDefaultActionReal();
2173}
2174
2176{
2177 INT nID = GetIDOfItem(pItem);
2178 if (nID < 0)
2179 return;
2180
2181 ::NotifyWinEvent(event, m_hWnd, -4, nID);
2182}
2183
2185{
2186 m_hWnd = hWnd;
2187}
2188
2190 REFIID riid,
2191 void **ppvObject)
2192{
2193 static const QITAB c_tab[] =
2194 {
2197 { NULL }
2198 };
2199 return ::QISearch(this, c_tab, riid, ppvObject);
2200}
2201
2203{
2204 return ::InterlockedIncrement(&m_cRefs);
2205}
2206
2208{
2210 if (count == 0)
2211 {
2212 delete this;
2213 return 0;
2214 }
2215 return count;
2216}
2217
2219{
2220 if (!pctinfo)
2221 return E_INVALIDARG;
2222 *pctinfo = (m_pTypeInfo == NULL);
2223 return S_OK;
2224}
2225
2227 UINT iTInfo,
2228 LCID lcid,
2229 ITypeInfo **ppTInfo)
2230{
2231 if (!ppTInfo)
2232 return E_INVALIDARG;
2233 *ppTInfo = NULL;
2234 if (iTInfo != 0)
2236 if (!m_pTypeInfo)
2237 return E_NOTIMPL;
2238 *ppTInfo = m_pTypeInfo;
2240 return S_OK;
2241}
2242
2244 REFIID riid,
2245 LPOLESTR *rgszNames,
2246 UINT cNames,
2247 LCID lcid,
2248 DISPID *rgDispId)
2249{
2250 if (!m_pTypeInfo)
2251 return E_NOTIMPL;
2252 return m_pTypeInfo->GetIDsOfNames(rgszNames, cNames, rgDispId);
2253}
2254
2256 DISPID dispIdMember,
2257 REFIID riid,
2258 LCID lcid,
2259 WORD wFlags,
2260 DISPPARAMS *pDispParams,
2261 VARIANT *pVarResult,
2262 EXCEPINFO *pExcepInfo,
2263 UINT *puArgErr)
2264{
2265 if (!m_pTypeInfo)
2266 return E_NOTIMPL;
2267 return m_pTypeInfo->Invoke(this,
2268 dispIdMember,
2269 wFlags,
2270 pDispParams,
2271 pVarResult,
2272 pExcepInfo,
2273 puArgErr);
2274}
2275
2277{
2278 return m_pStdAccessible->get_accParent(ppdispParent);
2279}
2280
2282{
2283 if (!pcountChildren)
2284 return E_INVALIDARG;
2285 INT cItems = (INT)m_AccItems.size();
2286 if (!cItems)
2287 return E_FAIL;
2288 *pcountChildren = cItems - 1;
2289 return S_OK;
2290}
2291
2293 VARIANT varChildID,
2294 IDispatch **ppdispChild)
2295{
2296 if (!ppdispChild)
2297 return E_INVALIDARG;
2298 *ppdispChild = NULL;
2299 return S_FALSE;
2300}
2301
2303 VARIANT varID,
2304 BSTR *pszName)
2305{
2306 if (!pszName)
2307 return E_INVALIDARG;
2308 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2309 if (!pItem)
2310 return E_INVALIDARG;
2311 *pszName = pItem->GetAccName();
2312 if (!*pszName)
2313 return DISP_E_MEMBERNOTFOUND;
2314 return S_OK;
2315}
2316
2318 VARIANT varID,
2319 BSTR *pszValue)
2320{
2321 if (!pszValue)
2322 return E_INVALIDARG;
2323 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2324 if (!pItem)
2325 return E_INVALIDARG;
2326 *pszValue = pItem->GetAccValue();
2327 if (!*pszValue)
2328 return DISP_E_MEMBERNOTFOUND;
2329 return S_OK;
2330}
2331
2333 VARIANT varID,
2335{
2336 if (!description)
2337 return E_INVALIDARG;
2338 return m_pStdAccessible->get_accDescription(varID, description);
2339}
2340
2342 VARIANT varID,
2343 VARIANT *role)
2344{
2345 if (!role)
2346 return E_INVALIDARG;
2347 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2348 if (!pItem)
2349 return E_INVALIDARG;
2350 V_VT(role) = VT_I4;
2351 V_I4(role) = pItem->GetAccRole();
2352 return S_OK;
2353}
2354
2356 VARIANT varID,
2357 VARIANT *state)
2358{
2359 if (!state)
2360 return E_INVALIDARG;
2361 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2362 if (!pItem)
2363 return E_INVALIDARG;
2364 V_VT(state) = VT_I4;
2365 V_I4(state) = pItem->GetAccState();
2366 return S_OK;
2367}
2368
2370{
2371 return DISP_E_MEMBERNOTFOUND;
2372}
2373
2375 BSTR *helpfile,
2376 VARIANT varID,
2377 LONG *pidTopic)
2378{
2379 return DISP_E_MEMBERNOTFOUND;
2380}
2381
2383{
2384 return DISP_E_MEMBERNOTFOUND;
2385}
2386
2388{
2389 if (!pvarID)
2390 return E_INVALIDARG;
2391 V_VT(pvarID) = VT_EMPTY;
2392 return S_FALSE;
2393}
2394
2396{
2397 if (!pvarID)
2398 return E_INVALIDARG;
2399
2400 V_VT(pvarID) = VT_EMPTY;
2401
2402 INT cItems = (INT)m_AccItems.size();
2403 if (cItems < m_cSelection)
2404 return S_FALSE;
2405
2406 if (cItems > m_cSelection)
2407 {
2408 V_VT(pvarID) = VT_I4;
2409 V_I4(pvarID) = m_cSelection;
2410 }
2411
2412 return S_OK;
2413}
2414
2416 VARIANT varID,
2417 BSTR *action)
2418{
2419 if (!action)
2420 return E_INVALIDARG;
2421 *action = NULL;
2422
2423 if (V_VT(&varID) != VT_I4)
2424 return E_INVALIDARG;
2425
2426 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2427 if (!pItem)
2428 return DISP_E_MEMBERNOTFOUND;
2429 *action = pItem->GetAccDefaultAction();
2430 if (!*action)
2431 return S_FALSE;
2432 return S_OK;
2433}
2434
2436 LONG flagsSelect,
2437 VARIANT varID)
2438{
2439 if ((flagsSelect & SELFLAG_ADDSELECTION) && (flagsSelect & SELFLAG_REMOVESELECTION))
2440 return E_INVALIDARG;
2441 if (flagsSelect & (SELFLAG_TAKEFOCUS | SELFLAG_ADDSELECTION | SELFLAG_EXTENDSELECTION))
2442 return S_FALSE;
2443 if (flagsSelect & SELFLAG_REMOVESELECTION)
2444 return S_OK;
2445 if (V_VT(&varID) != VT_I4)
2446 return E_INVALIDARG;
2447 if (flagsSelect & SELFLAG_TAKESELECTION)
2448 {
2449 m_cSelection = V_I4(&varID);
2450 return S_OK;
2451 }
2452 return S_FALSE;
2453}
2454
2456 LONG *left,
2457 LONG *top,
2458 LONG *width,
2459 LONG *height,
2460 VARIANT varID)
2461{
2462 if (!left || !top || !width || !height)
2463 return E_INVALIDARG;
2464
2465 if (!V_I4(&varID))
2466 return m_pStdAccessible->accLocation(left, top, width, height, varID);
2467
2468 RECT rc;
2469 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2470 pItem->GetAccLocation(&rc);
2471
2472 *left = rc.left;
2473 *top = rc.top;
2474 *width = rc.right - rc.left;
2475 *height = rc.bottom - rc.top;
2476 return S_OK;
2477}
2478
2480 LONG dir,
2481 VARIANT varStart,
2482 VARIANT *pvarEnd)
2483{
2484 if (m_AccItems.size() <= 1)
2485 {
2486 V_VT(pvarEnd) = VT_EMPTY;
2487 return S_OK;
2488 }
2489
2490 switch (dir)
2491 {
2492 case NAVDIR_UP:
2493 case NAVDIR_LEFT:
2494 case NAVDIR_PREVIOUS:
2495 V_VT(pvarEnd) = VT_I4;
2496 V_I4(pvarEnd) = V_I4(&varStart) - 1;
2497 if (V_I4(&varStart) - 1 <= 0)
2498 V_I4(pvarEnd) = (INT)(m_AccItems.size() - 1);
2499 return S_OK;
2500
2501 case NAVDIR_DOWN:
2502 case NAVDIR_RIGHT:
2503 case NAVDIR_NEXT:
2504 V_VT(pvarEnd) = VT_I4;
2505 V_I4(pvarEnd) = V_I4(&varStart) + 1;
2506 if ((INT)m_AccItems.size() <= V_I4(&varStart) + 1)
2507 V_I4(pvarEnd) = 1;
2508 return S_OK;
2509
2510 case NAVDIR_FIRSTCHILD:
2511 V_VT(pvarEnd) = VT_I4;
2512 V_I4(pvarEnd) = 1;
2513 return S_OK;
2514
2515 case NAVDIR_LASTCHILD:
2516 V_VT(pvarEnd) = VT_I4;
2517 V_I4(pvarEnd) = (INT)(m_AccItems.size() - 1);
2518 return S_OK;
2519
2520 default:
2521 break;
2522 }
2523
2524 V_VT(pvarEnd) = VT_EMPTY;
2525 return S_OK;
2526}
2527
2529{
2530 if (!pvarID)
2531 return E_INVALIDARG;
2532 POINT Point = { left, top };
2533 RECT Rect;
2536
2537 if (!::PtInRect(&Rect, Point))
2538 {
2539 V_VT(pvarID) = VT_EMPTY;
2540 return S_OK;
2541 }
2542
2543 V_VT(pvarID) = VT_I4;
2544 V_I4(pvarID) = 0;
2545
2546 for (size_t iItem = 1; iItem < m_AccItems.size(); ++iItem)
2547 {
2548 CTipbarAccItem *pItem = m_AccItems[iItem];
2549 if (pItem)
2550 {
2551 pItem->GetAccLocation(&Rect);
2552 if (::PtInRect(&Rect, Point))
2553 {
2554 V_I4(pvarID) = iItem;
2555 break;
2556 }
2557 }
2558 }
2559
2560 return S_OK;
2561}
2562
2564{
2565 if (V_VT(&varID) != VT_I4)
2566 return E_INVALIDARG;
2567 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2568 if (!pItem)
2569 return DISP_E_MEMBERNOTFOUND;
2570 return (pItem->DoAccDefaultAction() ? S_OK : S_FALSE);
2571}
2572
2574{
2575 return S_FALSE;
2576}
2577
2579{
2580 return S_FALSE;
2581}
2582
2583/***********************************************************************
2584 * CUTBMenuWnd
2585 */
2586
2588 : CUIFMenu(hInst, style, dwUnknown14)
2589{
2590}
2591
2593{
2594 if (!m_pAccessible)
2595 return FALSE;
2596
2598 if (!m_nMenuWndID || m_nMenuWndID == (UINT)-1)
2599 return FALSE;
2600
2601 if (::IsWindow(m_hWnd))
2602 {
2605 }
2606
2607 return TRUE;
2608}
2609
2610STDMETHODIMP_(BSTR) CUTBMenuWnd::GetAccName()
2611{
2612 WCHAR szText[64];
2613 LoadStringW(g_hInst, IDS_MENUWND, szText, _countof(szText));
2614 return ::SysAllocString(szText);
2615}
2616
2617STDMETHODIMP_(INT) CUTBMenuWnd::GetAccRole()
2618{
2619 return 9;
2620}
2621
2622STDMETHODIMP_(BOOL) CUTBMenuWnd::Initialize()
2623{
2625 if (pAccessible)
2626 m_pAccessible = pAccessible;
2627
2628 return CUIFObject::Initialize();
2629}
2630
2631STDMETHODIMP_(void) CUTBMenuWnd::OnCreate(HWND hWnd)
2632{
2633 if (m_pAccessible)
2635}
2636
2637STDMETHODIMP_(void) CUTBMenuWnd::OnDestroy(HWND hWnd)
2638{
2639 if (m_pAccessible)
2640 {
2641 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_DESTROY, GetAccItem());
2645 }
2647}
2648
2650CUTBMenuWnd::OnGetObject(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
2651{
2652 if (lParam != -4)
2653 return S_OK;
2654
2655 if (!m_pAccessible)
2656 return E_OUTOFMEMORY;
2657
2660
2662 {
2664 if (FAILED(hr))
2665 {
2668 return hr;
2669 }
2670
2671 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_CREATE, GetAccItem());
2673 }
2674
2675 return S_OK;
2676}
2677
2679CUTBMenuWnd::OnShowWindow(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
2680{
2681 if (m_pAccessible)
2682 {
2683 if (wParam)
2684 {
2685 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_SHOW, GetAccItem());
2686 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_FOCUS, GetAccItem());
2687 }
2688 else
2689 {
2690 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_HIDE, GetAccItem());
2691 }
2692 }
2693
2694 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
2695}
2696
2697STDMETHODIMP_(void) CUTBMenuWnd::OnTimer(WPARAM wParam)
2698{
2700 {
2703 {
2705 m_nMenuWndID = 0;
2706 }
2707 }
2708}
2709
2710/***********************************************************************
2711 * CUTBMenuItem
2712 */
2713
2715 : CUIFMenuItem(pMenuUI ? pMenuUI->GetMenu() : NULL)
2716{
2717 m_pMenuUI = pMenuUI;
2718}
2719
2721{
2722 if (m_hbmColor)
2723 {
2725 m_hbmColor = NULL;
2726 }
2727 if (m_hbmMask)
2728 {
2730 m_hbmMask = NULL;
2731 }
2732}
2733
2734STDMETHODIMP_(BOOL) CUTBMenuItem::DoAccDefaultAction()
2735{
2736 if (!m_pMenuUI)
2737 return FALSE;
2738
2740 return TRUE;
2741}
2742
2743STDMETHODIMP_(BOOL) CUTBMenuItem::DoAccDefaultActionReal()
2744{
2745 if (!m_pSubMenu)
2746 OnLButtonUp(0, 0);
2747 else
2748 ShowSubPopup();
2749 return TRUE;
2750}
2751
2752STDMETHODIMP_(BSTR) CUTBMenuItem::GetAccDefaultAction()
2753{
2754 WCHAR szText[64];
2755 ::LoadStringW(g_hInst, IDS_LEFTCLICK, szText, _countof(szText));
2756 return ::SysAllocString(szText);
2757}
2758
2759STDMETHODIMP_(void) CUTBMenuItem::GetAccLocation(LPRECT lprc)
2760{
2761 GetRect(lprc);
2764}
2765
2766STDMETHODIMP_(BSTR) CUTBMenuItem::GetAccName()
2767{
2768 return ::SysAllocString(m_pszMenuItemLeft);
2769}
2770
2772STDMETHODIMP_(INT) CUTBMenuItem::GetAccRole()
2773{
2774 if (FALSE) //FIXME
2775 return 21;
2776 return 12;
2777}
2778
2779/***********************************************************************
2780 * CModalMenu
2781 */
2782
2784CModalMenu::InsertItem(CUTBMenuWnd *pMenuUI, INT nCommandId, INT nStringID)
2785{
2786 CUTBMenuItem *pMenuItem = new(cicNoThrow) CUTBMenuItem(pMenuUI);
2787 if (!pMenuItem)
2788 return NULL;
2789
2790 WCHAR szText[256];
2791 ::LoadStringW(g_hInst, nStringID, szText, _countof(szText));
2792
2793 if (pMenuItem->Initialize() &&
2794 pMenuItem->Init(nCommandId, szText) &&
2795 pMenuUI->InsertItem(pMenuItem))
2796 {
2797 return pMenuItem;
2798 }
2799
2800 delete pMenuItem;
2801 return NULL;
2802}
2803
2805{
2807}
2808
2810{
2811 if (m_pMenuUI)
2813}
2814
2815/***********************************************************************
2816 * CUTBContextMenu
2817 */
2818
2820{
2821 m_pTipbarWnd = pTipbarWnd;
2822}
2823
2826{
2828 return !!m_pTipbarThread;
2829}
2830
2833{
2834 DWORD dwStatus = 0;
2835
2837 return NULL;
2838
2840 if (!pMenuUI)
2841 return NULL;
2842
2843 pMenuUI->Initialize();
2844
2845 if (dwStatus & (TF_SFT_DESKBAND | TF_SFT_MINIMIZED))
2846 {
2847 CUTBMenuItem *pRestoreLangBar = InsertItem(pMenuUI, ID_RESTORELANGBAR, IDS_RESTORELANGBAR2);
2848 if (pRestoreLangBar && !m_pTipbarWnd->m_dwUnknown20)
2849 pRestoreLangBar->Gray(TRUE);
2850 }
2851 else
2852 {
2854
2855 if (bFlag)
2856 {
2858 {
2859 if (dwStatus & TF_LBI_BALLOON)
2860 {
2862 }
2863 else
2864 {
2865 CUTBMenuItem *pTransparency = InsertItem(pMenuUI, ID_NOTRANS, IDS_TRANSPARENCY);
2866 if (pTransparency)
2867 pTransparency->Check(TRUE);
2868 }
2869 }
2870
2871 if (!(dwStatus & TF_SFT_LABELS))
2872 {
2874 }
2875 else
2876 {
2877 CUTBMenuItem *pTextLabels = InsertItem(pMenuUI, ID_NOLABELS, IDS_TEXTLABELS);
2878 if (pTextLabels)
2879 pTextLabels->Check(TRUE);
2880 }
2881
2882 CUTBMenuItem *pVertical = InsertItem(pMenuUI, ID_VERTICAL, IDS_VERTICAL);
2883 if (pVertical)
2885 }
2886 }
2887
2888 if (bFlag)
2889 {
2890 CUTBMenuItem *pExtraIcons = NULL;
2891
2892 if (dwStatus & TF_SFT_EXTRAICONSONMINIMIZED)
2893 {
2894 pExtraIcons = InsertItem(pMenuUI, ID_NOEXTRAICONS, IDS_EXTRAICONS);
2895 if (pExtraIcons)
2896 pExtraIcons->Check(TRUE);
2897 }
2898 else
2899 {
2900 pExtraIcons = CModalMenu::InsertItem(pMenuUI, ID_EXTRAICONS, IDS_EXTRAICONS);
2901 }
2902
2903 if (pExtraIcons)
2904 {
2905 if (::GetKeyboardLayoutList(0, NULL) == 1)
2906 {
2907 pExtraIcons->Check(TRUE);
2908 pExtraIcons->Gray(TRUE);
2909 }
2910 else
2911 {
2912 pExtraIcons->Gray(FALSE);
2913 }
2914 }
2915
2916 if (dwStatus & TF_SFT_DESKBAND)
2918
2920
2923 }
2924
2925 return pMenuUI;
2926}
2927
2928UINT
2930 CUIFWindow *pWindow,
2931 POINT pt,
2932 LPCRECT prc,
2933 BOOL bFlag)
2934{
2935 if (g_bWinLogon)
2936 return 0;
2937
2938 if (m_pMenuUI)
2939 return -1;
2940
2941 m_pMenuUI = CreateMenuUI(bFlag);
2942 if (!m_pMenuUI)
2943 return 0;
2944
2945 UINT nCommandId = m_pMenuUI->ShowModalPopup(pWindow, prc, TRUE);
2946
2947 if (m_pMenuUI)
2948 {
2949 delete m_pMenuUI;
2950 m_pMenuUI = NULL;
2951 }
2952
2953 return nCommandId;
2954}
2955
2958{
2959 switch (nCommandId)
2960 {
2961 case ID_TRANS:
2962 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_LOWTRANSPARENCY);
2963 break;
2964
2965 case ID_NOTRANS:
2966 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_NOTRANSPARENCY);
2967 break;
2968
2969 case ID_LABELS:
2970 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_LABELS);
2971 break;
2972
2973 case ID_NOLABELS:
2974 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_NOLABELS);
2975 break;
2976
2977 case ID_DESKBAND:
2978 {
2980 {
2981 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_MINIMIZED);
2982 }
2983 else
2984 {
2987
2988 if (dwStatus & TF_SFT_DESKBAND)
2989 break;
2990
2991 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_DESKBAND);
2992 }
2993
2995 if (pDialog)
2996 {
2997 pDialog->DoModal(*m_pTipbarWnd->GetWindow());
2998 pDialog->_Release();
2999 }
3000 break;
3001 }
3002
3003 case ID_CLOSELANGBAR:
3004 {
3006 if (pDialog)
3007 {
3008 BOOL bOK = pDialog->DoModal(*m_pTipbarWnd->GetWindow());
3009 pDialog->_Release();
3010 if (!bOK)
3012 }
3013 break;
3014 }
3015
3016 case ID_EXTRAICONS:
3017 m_pTipbarWnd->m_dwTipbarWndFlags &= ~TIPBAR_NODESKBAND;
3018 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_EXTRAICONSONMINIMIZED);
3019 break;
3020
3021 case ID_NOEXTRAICONS:
3022 m_pTipbarWnd->m_dwTipbarWndFlags &= ~TIPBAR_NODESKBAND;
3023 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_NOEXTRAICONSONMINIMIZED);
3024 break;
3025
3026 case ID_RESTORELANGBAR:
3028 break;
3029
3030 case ID_VERTICAL:
3032 break;
3033
3034 case ID_ADJUSTDESKBAND:
3036 break;
3037
3038 case ID_SETTINGS:
3040 break;
3041
3042 default:
3043 break;
3044 }
3045
3046 return TRUE;
3047}
3048
3049/***********************************************************************
3050 * CTrayIconItem
3051 */
3052
3054{
3056 m_pTrayIconWnd = pTrayIconWnd;
3057}
3058
3059BOOL
3061 HWND hWnd,
3062 UINT uCallbackMessage,
3063 UINT uNotifyIconID,
3064 const GUID& rguid)
3065{
3066 m_hWnd = hWnd;
3067 m_uCallbackMessage = uCallbackMessage;
3068 m_uNotifyIconID = uNotifyIconID;
3069 m_guid = rguid;
3070 return TRUE;
3071}
3072
3074{
3076 {
3077 NOTIFYICONDATAW NotifyIcon = { sizeof(NotifyIcon), m_hWnd, m_uNotifyIconID };
3078 NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
3080 ::Shell_NotifyIconW(NIM_DELETE, &NotifyIcon);
3081 }
3082
3085 return TRUE;
3086}
3087
3088BOOL CTrayIconItem::SetIcon(HICON hIcon, LPCWSTR pszTip)
3089{
3090 if (!hIcon)
3091 return FALSE;
3092
3093 NOTIFYICONDATAW NotifyIcon = { sizeof(NotifyIcon), m_hWnd, m_uNotifyIconID };
3094 NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE;
3096 NotifyIcon.hIcon = hIcon;
3097 if (pszTip)
3098 {
3099 NotifyIcon.uFlags |= NIF_TIP;
3100 StringCchCopyW(NotifyIcon.szTip, _countof(NotifyIcon.szTip), pszTip);
3101 }
3102
3104
3107 return TRUE;
3108}
3109
3111{
3112 HWND hNotifyWnd = m_pTrayIconWnd->GetNotifyWnd();
3113 ::GetClientRect(hNotifyWnd, &m_rcMenu);
3114 ::ClientToScreen(hNotifyWnd, (LPPOINT)&m_rcMenu);
3115 ::ClientToScreen(hNotifyWnd, (LPPOINT)&m_rcMenu.right);
3117 return TRUE;
3118}
3119
3120/***********************************************************************
3121 * CButtonIconItem
3122 */
3123
3125 : CTrayIconItem(pWnd)
3126{
3127 m_dwUnknown24 = dwUnknown24;
3128}
3129
3131STDMETHODIMP_(BOOL) CButtonIconItem::OnMsg(WPARAM wParam, LPARAM lParam)
3132{
3133 switch (lParam)
3134 {
3135 case WM_LBUTTONDOWN:
3136 case WM_RBUTTONDOWN:
3137 case WM_LBUTTONDBLCLK:
3138 case WM_RBUTTONDBLCLK:
3139 break;
3140 default:
3141 return TRUE;
3142 }
3143
3144 //FIXME
3145 return TRUE;
3146}
3147
3149STDMETHODIMP_(BOOL) CButtonIconItem::OnDelayMsg(UINT uMsg)
3150{
3151 //FIXME
3152 return FALSE;
3153}
3154
3155/***********************************************************************
3156 * CMainIconItem
3157 */
3158
3161 : CButtonIconItem(pWnd, 1)
3162{
3163}
3164
3167{
3168 return CTrayIconItem::_Init(hWnd, WM_USER, 0, GUID_LBI_TRAYMAIN);
3169}
3170
3172STDMETHODIMP_(BOOL) CMainIconItem::OnDelayMsg(UINT uMsg)
3173{
3174 if (!CButtonIconItem::OnDelayMsg(uMsg))
3175 return 0;
3176
3177 if (uMsg == WM_LBUTTONDBLCLK)
3178 {
3180 g_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_SHOWNORMAL);
3181 }
3182 else if (uMsg == WM_LBUTTONDOWN || uMsg == WM_RBUTTONDOWN)
3183 {
3185 }
3186 return TRUE;
3187}
3188
3189/***********************************************************************
3190 * CTrayIconWnd
3191 */
3192
3194{
3195 m_uCallbackMsg = WM_USER + 0x1000;
3196 m_uNotifyIconID = 0x1000;
3197}
3198
3200{
3201 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3202 {
3203 auto& pItem = m_Items[iItem];
3204 if (pItem)
3205 {
3206 delete pItem;
3207 pItem = NULL;
3208 }
3209 }
3210}
3211
3213{
3214 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3215 {
3216 auto pItem = m_Items[iItem];
3217 if (pItem && m_uCallbackMessage == pItem->m_uCallbackMessage)
3218 {
3219 pItem->OnDelayMsg(m_uMsg);
3220 break;
3221 }
3222 }
3223}
3224
3226{
3227 m_hWnd = ::CreateWindowEx(0, TEXT("CTrayIconWndClass"), NULL, WS_DISABLED,
3228 0, 0, 0, 0, NULL, NULL, g_hInst, this);
3229 FindTrayEtc();
3230
3232 if (m_pMainIconItem)
3233 {
3236 }
3237
3238 return m_hWnd;
3239}
3240
3242{
3244 m_hWnd = NULL;
3245}
3246
3248{
3249 CTrayIconWnd *pWnd = (CTrayIconWnd *)lParam;
3250
3251 TCHAR ClassName[60];
3252 ::GetClassName(hWnd, ClassName, _countof(ClassName));
3253 if (lstrcmp(ClassName, TEXT("TrayNotifyWnd")) != 0)
3254 return TRUE;
3255
3256 pWnd->m_hNotifyWnd = hWnd;
3257 return FALSE;
3258}
3259
3261{
3262 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3263 {
3264 auto pItem = m_Items[iItem];
3265 if (IsEqualGUID(rguid, pItem->m_guid))
3266 return pItem;
3267 }
3268 return NULL;
3269}
3270
3272{
3273 m_hTrayWnd = ::FindWindow(TEXT("Shell_TrayWnd"), NULL);
3274 if (!m_hTrayWnd)
3275 return FALSE;
3276
3278 if (!m_hNotifyWnd)
3279 return FALSE;
3281 m_hwndProgman = FindWindow(TEXT("Progman"), NULL);
3283 return TRUE;
3284}
3285
3287{
3289 FindTrayEtc();
3290 return m_hNotifyWnd;
3291}
3292
3295{
3296 if (g_pTipbarWnd)
3298
3299 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3300 {
3301 auto *pItem = m_Items[iItem];
3302 if (pItem)
3303 {
3304 if (uMsg == pItem->m_uCallbackMessage)
3305 {
3306 pItem->OnMsg(wParam, lParam);
3307 return TRUE;
3308 }
3309 }
3310 }
3311 return FALSE;
3312}
3313
3315{
3316 WNDCLASSEX wc = { sizeof(wc) };
3318 wc.hInstance = g_hInst;
3321 wc.lpszClassName = TEXT("CTrayIconWndClass");
3322 ::RegisterClassEx(&wc);
3323 return TRUE;
3324}
3325
3327{
3328 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3329 {
3330 auto pItem = m_Items[iItem];
3331 if (dwFlags & 0x1)
3332 {
3333 if (IsEqualGUID(pItem->m_guid, GUID_LBI_INATITEM) ||
3334 IsEqualGUID(pItem->m_guid, GUID_LBI_CTRL))
3335 {
3336 continue;
3337 }
3338 }
3339
3340 if (dwFlags & 0x2)
3341 {
3342 if (IsEqualGUID(pItem->m_guid, GUID_TFCAT_TIP_KEYBOARD))
3343 continue;
3344 }
3345
3346 if (pItem->m_uNotifyIconID < 0x1000)
3347 continue;
3348
3349 pItem->RemoveIcon();
3350 }
3351}
3352
3355{
3356 //FIXME
3357}
3358
3360{
3361 CButtonIconItem *pItem = FindIconItem(rguid);
3362 if (!pItem)
3363 {
3364 if (!hIcon)
3365 return FALSE;
3366 pItem = new(cicNoThrow) CButtonIconItem(this, dwUnknown24);
3367 if (!pItem)
3368 return FALSE;
3369
3370 pItem->_Init(m_hWnd, m_uCallbackMsg, m_uNotifyIconID, rguid);
3371 m_uCallbackMsg += 2;
3373 m_Items.Add(pItem);
3374 }
3375
3376 if (!hIcon)
3377 return pItem->RemoveIcon();
3378
3379 return pItem->SetIcon(hIcon, psz);
3380}
3381
3383{
3384 if (!hKL)
3385 {
3388 return TRUE;
3389 }
3390
3391 if (hKL != m_pMainIconItem->m_hKL)
3392 {
3393 WCHAR szText[64];
3394 HICON hIcon = TF_GetLangIcon(LOWORD(hKL), szText, _countof(szText));
3395 if (hIcon)
3396 {
3397 m_pMainIconItem->SetIcon(hIcon, szText);
3399 }
3400 else
3401 {
3404 m_pMainIconItem->SetIcon(hIcon, szText);
3405 }
3406
3407 m_pMainIconItem->m_hKL = hKL;
3408 }
3409
3410 return TRUE;
3411}
3412
3414{
3416}
3417
3419{
3420 if (pCS)
3422 else
3423 ::SetWindowLongPtr(hWnd, GWL_USERDATA, 0);
3424}
3425
3428{
3429 CTrayIconWnd *pThis;
3430 switch (uMsg)
3431 {
3432 case WM_CREATE:
3434 break;
3435 case WM_DESTROY:
3437 break;
3438 case WM_TIMER:
3439 if (wParam == 100)
3440 {
3441 ::KillTimer(hWnd, 100);
3442 pThis = CTrayIconWnd::GetThis(hWnd);
3443 if (pThis)
3444 pThis->CallOnDelayMsg();
3445 }
3446 break;
3447 default:
3448 {
3449 if (uMsg < WM_USER)
3450 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
3451 pThis = CTrayIconWnd::GetThis(hWnd);
3452 if (pThis && pThis->OnIconMessage(uMsg, wParam, lParam))
3453 break;
3454 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
3455 }
3456 }
3457 return 0;
3458}
3459
3460/***********************************************************************
3461 * CLBarItemBase
3462 */
3463
3465{
3466 m_dwItemStatus = 0;
3467 m_szToolTipText[0] = 0;
3468 m_cRefs = 1;
3470}
3471
3473{
3476}
3477
3478HRESULT
3480 REFIID riid,
3481 IUnknown *punk,
3482 DWORD *pdwCookie)
3483{
3484 if (IsEqualIID(riid, IID_ITfLangBarItemSink) || m_pLangBarItemSink)
3485 return TF_E_NOOBJECT;
3486
3487 HRESULT hr = punk->QueryInterface(IID_ITfLangBarItemSink, (void **)&m_pLangBarItemSink);
3488 if (SUCCEEDED(hr))
3489 *pdwCookie = 0x80000001;
3490 return hr;
3491}
3492
3494{
3495 if (dwCookie != 0x80000001)
3496 return E_FAIL;
3497
3498 if (!m_pLangBarItemSink)
3499 return E_UNEXPECTED;
3500
3503 return S_OK;
3504}
3505
3506void
3508 REFIID clsidService,
3509 REFGUID guidItem,
3510 DWORD dwStyle,
3511 DWORD ulSort,
3513{
3514 m_NewUIInfo.clsidService = clsidService;
3515 m_NewUIInfo.guidItem = guidItem;
3516 m_NewUIInfo.dwStyle = dwStyle;
3517 m_NewUIInfo.ulSort = ulSort;
3519}
3520
3521HRESULT
3523{
3524 DWORD dwOldStatus = m_dwItemStatus;
3525
3526 if (bShow)
3527 m_dwItemStatus &= ~TF_LBI_STATUS_HIDDEN;
3528 else
3529 m_dwItemStatus |= TF_LBI_STATUS_HIDDEN;
3530
3531 if (bUpdate && (dwOldStatus != m_dwItemStatus))
3532 {
3534 m_pLangBarItemSink->OnUpdate(TF_LBI_STATUS);
3535 }
3536
3537 return S_OK;
3538}
3539
3541{
3542 CopyMemory(pInfo, &m_NewUIInfo, sizeof(*pInfo));
3543 return S_OK;
3544}
3545
3547{
3548 *pdwStatus = m_dwItemStatus;
3549 return S_OK;
3550}
3551
3553{
3554 return ShowInternal(fShow, TRUE);
3555}
3556
3558{
3559 if (!pbstrToolTip)
3560 return E_INVALIDARG;
3562 *pbstrToolTip = bstr;
3563 return bstr ? S_OK : E_OUTOFMEMORY;
3564}
3565
3566/***********************************************************************
3567 * CUTBLBarMenu
3568 */
3569
3571{
3572 m_hInst = hInst;
3573}
3574
3576{
3577}
3578
3579STDMETHODIMP_(CCicLibMenuItem*) CUTBLBarMenu::CreateMenuItem()
3580{
3582 if (!pItem)
3583 return NULL;
3584 pItem->m_pLBarMenu = this;
3585 return pItem;
3586}
3587
3589{
3591 if (!pMenuUI)
3592 return NULL;
3593
3594 pMenuUI->Initialize();
3595 for (size_t iItem = 0; iItem < m_MenuItems.size(); ++iItem)
3596 {
3598 pItem->InsertToUI(pMenuUI);
3599 }
3600
3601 return pMenuUI;
3602}
3603
3604STDMETHODIMP_(CCicLibMenu*) CUTBLBarMenu::CreateSubMenu()
3605{
3606 return new(cicNoThrow) CUTBLBarMenu(m_hInst);
3607}
3608
3610{
3611 if (m_pMenuUI)
3612 return 0;
3613
3615 if (!m_pMenuUI)
3616 return -1;
3617
3618 INT nCommandId = m_pMenuUI->ShowModalPopup(pWindow, prcExclude, TRUE);
3619
3620 if (m_pMenuUI)
3621 {
3622 delete m_pMenuUI;
3623 m_pMenuUI = NULL;
3624 }
3625
3626 return nCommandId;
3627}
3628
3629/***********************************************************************
3630 * CUTBLBarMenuItem
3631 */
3632
3635{
3636 if ((m_dwFlags & 4) != 0)
3637 {
3638 pMenuUI->InsertSeparator();
3639 return TRUE;
3640 }
3641 if (m_dwFlags & 2)
3642 {
3643 //FIXME
3644 }
3645 else
3646 {
3647 //FIXME
3648 }
3649 return FALSE;
3650}
3651
3652/***********************************************************************
3653 * CLBarItemButtonBase
3654 */
3655
3657{
3658 if (m_hIcon)
3659 {
3661 m_hIcon = NULL;
3662 }
3663}
3664
3666{
3667 static const QITAB c_tab[] =
3668 {
3672 { NULL }
3673 };
3674 return ::QISearch(this, c_tab, riid, ppvObject);
3675}
3676
3678{
3679 return ++m_cRefs;
3680}
3681
3683{
3684 if (--m_cRefs == 0)
3685 {
3686 delete this;
3687 return 0;
3688 }
3689 return m_cRefs;
3690}
3691
3694{
3695 if (click == TF_LBI_CLK_RIGHT)
3696 {
3697 return E_NOTIMPL; //FIXME
3698 }
3699 if (click == TF_LBI_CLK_LEFT)
3700 {
3701 return E_NOTIMPL; //FIXME
3702 }
3703 return E_NOTIMPL;
3704}
3705
3707{
3708 return E_NOTIMPL;
3709}
3710
3712{
3713 return E_NOTIMPL;
3714}
3715
3717{
3718 return E_NOTIMPL;
3719}
3720
3722{
3723 if (!pbstr)
3724 return E_INVALIDARG;
3726 return (*pbstr ? S_OK : E_OUTOFMEMORY);
3727}
3728
3730{
3731 return CLBarItemBase::GetInfo(pInfo);
3732}
3733
3735{
3736 return CLBarItemBase::GetStatus(pdwStatus);
3737}
3738
3740{
3741 return CLBarItemBase::Show(fShow);
3742}
3743
3745{
3746 return CLBarItemBase::GetTooltipString(pbstrToolTip);
3747}
3748
3750 REFIID riid,
3751 IUnknown *punk,
3752 DWORD *pdwCookie)
3753{
3754 return CLBarItemBase::AdviseSink(riid, punk, pdwCookie);
3755}
3756
3758{
3759 return CLBarItemBase::UnadviseSink(dwCookie);
3760}
3761
3762/***********************************************************************
3763 * CLBarInatItem
3764 */
3765
3767{
3768 WCHAR szText[256];
3769 ::LoadStringW(g_hInst, IDS_LANGUAGE, szText, _countof(szText));
3770 InitNuiInfo(CLSID_SYSTEMLANGBARITEM, GUID_LBI_INATITEM, 0x20001, 0, szText);
3771
3776
3779}
3780
3782{
3783 HICON hIcon = NULL;
3784 INT iIndex = GetIconIndexFromhKL(m_hKL);
3785 if (iIndex != -1)
3786 hIcon = TF_InatExtractIcon(iIndex);
3787 *phIcon = hIcon;
3788 return S_OK;
3789}
3790
3792{
3793 if (!pbstr)
3794 return E_INVALIDARG;
3795
3796 WCHAR szText[256];
3797 if (!GethKLDesc(m_hKL, szText, _countof(szText)))
3798 return GetText(pbstr);
3799
3800 *pbstr = ::SysAllocString(szText);
3801 return S_OK;
3802}
3803
3805{
3807
3808 INT iKL, cKLs = TF_MlngInfoCount();
3809 for (iKL = 0; iKL < cKLs; ++iKL)
3810 {
3811 HKL hKL;
3812 WCHAR szDesc[128];
3813 if (TF_GetMlngHKL(iKL, &hKL, szDesc, _countof(szDesc)))
3814 {
3815 HICON hIcon = NULL;
3816 INT iIndex = GetIconIndexFromhKL(hKL);
3817 if (iIndex != -1)
3818 hIcon = TF_InatExtractIcon(iIndex);
3819
3820 LangBarInsertMenu(pMenu, iKL, szDesc, (hKL == m_hKL), hIcon);
3821 }
3822 }
3823
3825 if (g_pTipbarWnd &&
3828 (dwStatus & (TF_SFT_DESKBAND | TF_SFT_MINIMIZED)))
3829 {
3831
3832 WCHAR szText[256];
3834 LangBarInsertMenu(pMenu, 2000, szText, FALSE, NULL);
3835 }
3836
3837 return S_OK;
3838}
3839
3841{
3842 HKL hKL;
3843
3844 if (nCommandId == 2000)
3845 {
3846 if (g_pTipbarWnd)
3847 {
3849 if (pLangBarMgr)
3850 pLangBarMgr->ShowFloating(TF_SFT_SHOWNORMAL);
3851 }
3852 }
3853 else if (TF_GetMlngHKL(nCommandId, &hKL, NULL, 0))
3854 {
3856 HWND hwndFore = ::GetForegroundWindow();
3858 {
3859 BOOL FontSig = GetFontSig(hwndFore, hKL);
3860 ::PostMessage(hwndFore, WM_INPUTLANGCHANGEREQUEST, FontSig, (LPARAM)hKL);
3861 }
3862 }
3863
3864 return S_OK;
3865}
3866
3867/***********************************************************************
3868 * CTipbarGripper
3869 */
3870
3872 : CUIFGripper((pTipbarWnd ? pTipbarWnd->GetWindow() : NULL), prc, style)
3873{
3875 m_pTipbarWnd = pTipbarWnd;
3876}
3877
3879STDMETHODIMP_(void) CTipbarGripper::OnLButtonUp(LONG x, LONG y)
3880{
3882
3884 {
3885 APPBARDATA AppBar = { sizeof(AppBar) };
3886 AppBar.hWnd = ::FindWindowW(L"Shell_TrayWnd", NULL);
3888 {
3889 RECT rc = AppBar.rc;
3890 POINT pt;
3892 if (g_pTipbarWnd && ::PtInRect(&rc, pt))
3893 g_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_DESKBAND |
3894 TF_SFT_EXTRAICONSONMINIMIZED);
3895 }
3896 }
3897
3898 CUIFGripper::OnLButtonUp(x, y);
3900}
3901
3903STDMETHODIMP_(void) CTipbarGripper::OnRButtonUp(LONG x, LONG y)
3904{
3905 if (g_bShowDebugMenu)
3906 {
3907 // FIXME: Debugging feature
3908 }
3909}
3910
3911STDMETHODIMP_(BOOL) CTipbarGripper::OnSetCursor(UINT uMsg, LONG x, LONG y)
3912{
3913 if (m_bInDebugMenu)
3914 return FALSE;
3915
3916 return CUIFGripper::OnSetCursor(uMsg, x, y);
3917}
3918
3919/***********************************************************************
3920 * CLangBarItemList
3921 */
3922
3924{
3925 auto *pItem = FindItem(rclsid);
3926 if (!pItem)
3927 return FALSE;
3928 return pItem->m_bStartedIntentionally;
3929}
3930
3932{
3933 auto *pItem = FindItem(rclsid);
3934 if (pItem)
3935 return pItem;
3936
3937 pItem = Append(1);
3938 if (!pItem)
3939 return NULL;
3940
3941 ZeroMemory(pItem, sizeof(*pItem));
3942 pItem->m_clsid = rclsid;
3943 pItem->m_dwDemoteLevel = 0;
3944 return pItem;
3945}
3946
3948{
3949 clear();
3950
3951 CicRegKey regKey;
3952 LSTATUS error;
3953 error = regKey.Open(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\CTF\\LangBar", KEY_ALL_ACCESS);
3954 if (error == ERROR_SUCCESS)
3955 regKey.RecurseDeleteKey(L"ItemState");
3956}
3957
3959{
3960 auto *pItem = AddItem(rclsid);
3961 if (!pItem)
3962 return TRUE;
3963
3964 pItem->m_dwDemoteLevel = dwDemoteLevel;
3965 if (!pItem->IsShown())
3966 {
3967 if (pItem->m_nTimerID)
3968 {
3969 if (g_pTipbarWnd)
3970 g_pTipbarWnd->KillTimer(pItem->m_nTimerID);
3971 pItem->m_nTimerID = 0;
3972 pItem->m_uTimeOut = 0;
3973 }
3974 pItem->m_bDisableDemoting = FALSE;
3975 }
3976
3977 SaveItem(0, pItem);
3978 return TRUE;
3979}
3980
3982{
3983 for (size_t iItem = 0; iItem < size(); ++iItem)
3984 {
3985 auto& item = (*this)[iItem];
3986 if (IsEqualCLSID(item.m_clsid, rclsid))
3987 return &item;
3988 }
3989 return NULL;
3990}
3991
3993{
3994 for (size_t iItem = 0; iItem < size(); ++iItem)
3995 {
3996 auto& item = (*this)[iItem];
3997 if (item.m_nTimerID == nTimerID)
3998 return &item;
3999 }
4000 return NULL;
4001}
4002
4004{
4005 CicRegKey regKey;
4006 LSTATUS error;
4007 error = regKey.Open(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\CTF\\LangBar\\ItemState");
4008 if (error != ERROR_SUCCESS)
4009 return;
4010
4011 WCHAR szKeyName[MAX_PATH];
4012 for (DWORD dwIndex = 0; ; ++dwIndex)
4013 {
4014 error = ::RegEnumKeyW(regKey, dwIndex, szKeyName, _countof(szKeyName));
4015 if (error != ERROR_SUCCESS)
4016 break;
4017
4018 CLSID clsid;
4019 if (::CLSIDFromString(szKeyName, &clsid) != S_OK)
4020 continue;
4021
4022 CicRegKey regKey2;
4023 error = regKey2.Open(regKey, szKeyName);
4024 if (error != ERROR_SUCCESS)
4025 continue;
4026
4027 auto *pItem = AddItem(clsid);
4028 if (!pItem)
4029 continue;
4030
4031 DWORD Data = 0;
4032 regKey2.QueryDword(L"DemoteLevel", &Data);
4033 pItem->m_dwDemoteLevel = Data;
4034 regKey2.QueryDword(L"DisableDemoting", &Data);
4035 pItem->m_bDisableDemoting = !!Data;
4036 }
4037}
4038
4040{
4041 LSTATUS error;
4042 CicRegKey regKey;
4043
4044 if (!pRegKey)
4045 {
4046 error = regKey.Create(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\CTF\\LangBar\\ItemState");
4047 if (error != ERROR_SUCCESS)
4048 return;
4049
4050 pRegKey = &regKey;
4051 }
4052
4053 WCHAR szSubKey[MAX_PATH];
4054 ::StringFromGUID2(pState->m_clsid, szSubKey, _countof(szSubKey));
4055
4056 if (pState->m_dwDemoteLevel || pState->m_bDisableDemoting)
4057 {
4058 CicRegKey regKey2;
4059 error = regKey2.Create(*pRegKey, szSubKey);
4060 if (error == ERROR_SUCCESS)
4061 {
4062 DWORD dwDemoteLevel = pState->m_dwDemoteLevel;
4063 if (dwDemoteLevel)
4064 regKey2.SetDword(L"DemoteLevel", dwDemoteLevel);
4065 else
4066 regKey2.DeleteValue(L"DemoteLevel");
4067
4068 regKey2.SetDword(L"DisableDemoting", pState->m_bDisableDemoting);
4069 }
4070 }
4071 else
4072 {
4073 pRegKey->RecurseDeleteKey(szSubKey);
4074 }
4075}
4076
4078{
4079 if (!g_bIntelliSense)
4080 return;
4081
4082 auto *pItem = AddItem(rclsid);
4083 if (!pItem || pItem->m_bDisableDemoting)
4084 return;
4085
4086 if (pItem->m_nTimerID)
4087 {
4088 if (!bIntentional)
4089 return;
4090
4091 if (g_pTipbarWnd)
4092 g_pTipbarWnd->KillTimer(pItem->m_nTimerID);
4093
4094 pItem->m_nTimerID = 0;
4095 }
4096
4097 pItem->m_bStartedIntentionally |= bIntentional;
4098
4099 UINT uTimeOut = (bIntentional ? g_uTimeOutIntentional : g_uTimeOutNonIntentional);
4100 pItem->m_uTimeOut += uTimeOut;
4101
4102 if (pItem->m_uTimeOut < g_uTimeOutMax)
4103 {
4104 UINT_PTR uDemotingTimerId = FindDemotingTimerId();
4105 pItem->m_nTimerID = uDemotingTimerId;
4106 if (uDemotingTimerId)
4107 {
4108 if (g_pTipbarWnd)
4109 g_pTipbarWnd->SetTimer(uDemotingTimerId, uTimeOut);
4110 }
4111 }
4112 else
4113 {
4114 pItem->m_bDisableDemoting = TRUE;
4115 }
4116}
4117
4119{
4120 UINT_PTR nTimerID = 10000;
4121
4122 if (empty())
4123 return nTimerID;
4124
4125 for (;;)
4126 {
4127 size_t iItem = 0;
4128
4129 while ((*this)[iItem].m_nTimerID != nTimerID)
4130 {
4131 ++iItem;
4132 if (iItem >= size())
4133 return nTimerID;
4134 }
4135
4136 ++nTimerID;
4137 if (nTimerID >= 10050)
4138 return 0;
4139 }
4140}
4141
4142/***********************************************************************
4143 * CTipbarWnd
4144 */
4145
4149{
4150 m_dwUnknown23_1[4] = 0;
4151 m_dwUnknown23_1[5] = 0;
4152 m_dwUnknown23_1[6] = 0;
4153 m_dwUnknown23_1[7] = 0;
4154
4155 RECT rc;
4157
4158 //FIXME: Fix g_ptTipbar
4159
4160 Move(g_ptTipbar.x, g_ptTipbar.y, 100, 24);
4162
4163 m_hMarlettFont = ::CreateFontW(8, 8, 0, 0, FW_NORMAL, 0, 0, 0,
4164 SYMBOL_CHARSET, 0, 0, 0, 0, L"Marlett");
4165
4166 ITfLangBarMgr *pLangBarMgr = NULL;
4167 if (SUCCEEDED(TF_CreateLangBarMgr(&pLangBarMgr)) && pLangBarMgr)
4168 {
4169 pLangBarMgr->QueryInterface(IID_ITfLangBarMgr_P, (void **)&m_pLangBarMgr);
4170 pLangBarMgr->Release();
4171 }
4172
4174 {
4175 if (g_fTaskbarTheme)
4176 {
4177 m_iPartId = 1;
4178 m_iStateId = 1;
4179 m_pszClassList = L"TASKBAR";
4180 }
4181 else
4182 {
4183 m_iPartId = 0;
4184 m_iStateId = 1;
4185 m_pszClassList = L"REBAR";
4186 }
4187 }
4188
4190
4191 m_cRefs = 1;
4192}
4193
4195{
4196 UnInit();
4197
4198 if (m_hMarlettFont)
4200 if (m_hTextFont)
4202
4204}
4205
4207void CTipbarWnd::Init(BOOL bChild, CDeskBand *pDeskBand)
4208{
4209 if (bChild)
4211 else
4212 m_dwTipbarWndFlags &= ~TIPBAR_CHILD;
4213
4216
4217 m_pDeskBand = pDeskBand;
4218
4219 RECT rc = { 0, 0, 0, 0 };
4220
4221 if (g_bNewLook && !m_pWndFrame && (m_style & 0x20000000))
4222 {
4223 CUIFWndFrame *pWndFrame = new(cicNoThrow) CUIFWndFrame(GetWindow(), &rc, 0);
4224 if (pWndFrame)
4225 {
4226 pWndFrame->Initialize();
4227 AddUIObj(m_pWndFrame);
4228 }
4229 }
4230
4232 {
4235 if (m_pTipbarGripper)
4236 {
4237 m_pTipbarGripper->Initialize();
4238 AddUIObj(m_pTipbarGripper);
4239 }
4240 }
4241
4242 //FIXME: CTipbarCtrlButtonHolder
4243
4245 {
4246 Move(m_nLeft, m_nTop, GetTipbarHeight(), 0);
4247 }
4248 else
4249 {
4250 Move(m_nLeft, m_nTop, 0, GetTipbarHeight());
4251 }
4252}
4253
4255{
4256 m_dwTipbarWndFlags &= ~TIPBAR_HIGHCONTRAST;
4257
4258 HIGHCONTRAST HiCon = { sizeof(HiCon) };
4259 if (::SystemParametersInfo(SPI_GETHIGHCONTRAST, sizeof(HiCon), &HiCon, 0))
4260 {
4261 if (HiCon.dwFlags & HCF_HIGHCONTRASTON)
4263 }
4264}
4265
4267{
4270
4272 if (style & WS_DLGFRAME)
4273 {
4276 }
4277 else if (style & WS_BORDER)
4278 {
4281 }
4282 else
4283 {
4285 }
4286}
4287
4289{
4290 ZeroMemory(&m_Margins, sizeof(m_Margins));
4291
4292 CUIFTheme theme;
4293 m_dwUnknown23_5[0] = 6;
4294 m_dwUnknown23_5[1] = 6;
4295 m_dwUnknown23_5[2] = 0;
4297
4298 theme.m_iPartId = 1;
4299 theme.m_iStateId = 0;
4300 theme.m_pszClassList = L"TOOLBAR";
4302 {
4303 ::GetThemeMargins(theme.m_hTheme, NULL, theme.m_iPartId, 1, 3602, NULL, &m_Margins);
4304 m_dwUnknown23_5[0] = 4;
4305 m_dwUnknown23_5[1] = 2;
4306 m_dwUnknown23_5[2] = 1;
4307 }
4308 theme.CloseThemeData();
4309
4310 theme.m_iPartId = 18;
4311 theme.m_iStateId = 0;
4312 theme.m_pszClassList = L"WINDOW";
4314 {
4315 SIZE partSize;
4316 ::GetThemePartSize(theme.m_hTheme, NULL, theme.m_iPartId, 1, 0, TS_TRUE, &partSize);
4317 INT size = ::GetThemeSysSize(theme.m_hTheme, 31);
4318 m_ButtonWidth = MulDiv(size, partSize.cx, partSize.cy);
4319 }
4320 theme.CloseThemeData();
4321}
4322
4324{
4326 for (size_t iItem = 0; iItem < m_Threads.size(); ++iItem)
4327 {
4328 CTipbarThread* pThread = m_Threads[iItem];
4329 if (pThread)
4330 {
4331 pThread->_UninitItemList(TRUE);
4332 pThread->m_pTipbarWnd = NULL;
4333 pThread->_Release();
4334 }
4335 }
4336 m_Threads.clear();
4337
4338 if (m_pLangBarMgr)
4340
4341 if (m_pLangBarMgr)
4342 {
4345 }
4346}
4347
4349{
4351 return FALSE;
4352
4354 if (!(style & WS_VISIBLE) || (style & WS_CAPTION))
4355 return FALSE;
4356
4358 if (exstyle & WS_EX_LAYERED)
4359 return FALSE;
4360
4361 if ((exstyle & WS_EX_TOOLWINDOW) && (hWnd == m_ShellWndThread.GetWndProgman()))
4362 return FALSE;
4363
4364 return !!cicIsFullScreenSize(hWnd);
4365}
4366
4368{
4370 return IsSkipRedrawHKL(hKL);
4371}
4372
4374{
4375 if (pTarget->m_dwThreadId == m_dwChangingThreadId)
4376 return TRUE;
4377 return pTarget->IsDirtyItem();
4378}
4379
4381{
4382 m_ThreadCreatingList.Add(pThread);
4383}
4384
4386{
4388 if (iItem >= 0)
4390}
4391
4393{
4394 m_dwTipbarWndFlags |= 0x40;
4395
4396 RECT rcWorkArea;
4397 ::SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
4398
4399 if (bFlag)
4400 {
4401 m_nLeft = rcWorkArea.right - 38;
4402 m_dwTipbarWndFlags &= ~0x80;
4403 }
4404 else
4405 {
4406 RECT Rect;
4408 m_nLeft = rcWorkArea.right + Rect.left - Rect.right;
4409 m_dwTipbarWndFlags |= 0x80;
4410 }
4411
4412 m_nTop = rcWorkArea.bottom - m_cyDlgFrameX2 - GetTipbarHeight();
4413
4414 if (m_pFocusThread)
4416}
4417
4419{
4420 m_dwTipbarWndFlags &= 0x3F;
4421 KillTimer(1);
4422 KillTimer(2);
4423}
4424
4427{
4428 return 0;
4429}
4430
4432{
4433 if (m_dwTipbarWndFlags & 2)
4434 return 0;
4435
4437 return 5;
4438
4439 INT width = -1;
4440 SIZE partSize;
4441 HDC hDC = ::GetDC(m_hWnd);
4442 if (SUCCEEDED(m_pTipbarGripper->GetThemePartSize(hDC, 1, 0, TS_TRUE, &partSize)))
4443 {
4444 INT cx = partSize.cx;
4445 if (m_dwTipbarWndFlags & 4)
4446 cx = partSize.cy;
4447 width = cx + 4;
4448 }
4450
4451 return ((width < 0) ? 5 : width);
4452}
4453
4455{
4456 SIZE size = { 0, 0 };
4457 if (m_pWndFrame)
4460 if (cy < 6)
4461 cy = 6;
4462 return m_cySmallIcon + cy + (2 * size.cy);
4463}
4464
4466{
4468 !m_pFocusThread ||
4469 (m_pFocusThread->m_dwFlags1 & 0x800))
4470 {
4471 return FALSE;
4472 }
4473
4474 DWORD dwOldWndFlags = m_dwTipbarWndFlags;
4475 m_dwTipbarWndFlags &= ~0x8000;
4476
4477 if (!AdjustDeskBandSize(!(dwOldWndFlags & 0x8000)))
4478 return FALSE;
4479
4481 return TRUE;
4482}
4483
4486{
4487 return 0;
4488}
4489
4492{
4493}
4494
4496{
4497 RECT rcWorkArea;
4499 if (!GetWorkArea(&rc, &rcWorkArea))
4500 return;
4501
4502 INT x = m_nLeft, y = m_nTop;
4504 x = rcWorkArea.left;
4506 y = rcWorkArea.top;
4508 x = rcWorkArea.right - m_nWidth;
4510 y = rcWorkArea.bottom - m_nHeight;
4511 if (x != m_nLeft || y != m_nTop)
4512 Move(x, y, m_nWidth, m_nHeight);
4513}
4514
4516{
4517 if (bVertical)
4519 else
4520 m_dwTipbarWndFlags &= ~TIPBAR_VERTICAL;
4521
4522 if (m_pTipbarGripper)
4523 {
4525 if (bVertical)
4526 style |= 0x1;
4527 else
4528 style &= 0x1;
4529 m_pTipbarGripper->SetStyle(style);
4530 }
4531
4532 if (g_fTaskbarTheme)
4533 SetActiveTheme(L"TASKBAR", !!(m_dwTipbarWndFlags & TIPBAR_VERTICAL), 1);
4534
4536 {
4538 {
4539 Move(m_nLeft, m_nTop, GetTipbarHeight(), 0);
4540 }
4541 else
4542 {
4543 Move(m_nLeft, m_nTop, 0, GetTipbarHeight());
4544 }
4545 }
4546
4547 if (m_hWnd)
4548 {
4549 KillTimer(7);
4551 }
4552}
4553
4555{
4557 return;
4558
4559 RECT rc = { m_nLeft, m_nTop, m_nLeft + m_nWidth, m_nTop + m_nHeight }, rcWorkArea;
4560 if (!GetWorkArea(&rc, &rcWorkArea))
4561 return;
4562
4563 if (rcWorkArea.left + 2 < m_nLeft)
4564 m_dwTipbarWndFlags &= ~TIPBAR_LEFTFIT;
4565 else
4567
4568 if (rcWorkArea.top + 2 < m_nTop)
4569 m_dwTipbarWndFlags &= ~TIPBAR_TOPFIT;
4570 else
4572
4573 if (m_nLeft + m_nWidth < rcWorkArea.right - 2)
4574 m_dwTipbarWndFlags &= ~TIPBAR_RIGHTFIT;
4575 else
4577
4578 if (m_nTop + m_nHeight < rcWorkArea.bottom - 2)
4579 m_dwTipbarWndFlags &= ~TIPBAR_BOTTOMFIT;
4580 else
4582}
4583
4585{
4586 if (!m_pThread)
4587 return;
4588
4589 CTipbarWnd *pTipbarWnd = m_pThread->m_pTipbarWnd;
4590 if (pTipbarWnd)
4591 {
4592 if (pTipbarWnd->m_pLangBarMgr)
4594 }
4595
4598}
4599
4601{
4602 return (prc1->top < prc2->top + 5) && (prc2->right <= prc1->right + (5 * m_ButtonWidth));
4603}
4604
4606{
4608 if (m_pFocusThread)
4610}
4611
4613{
4614 if (!m_hWnd)
4615 return NULL;
4616
4617 CUIFTheme theme;
4618 theme.m_iPartId = 1;
4619 theme.m_iStateId = 0;
4620 theme.m_pszClassList = L"TOOLBAR";
4621
4622 LOGFONTW lf;
4623 if (FAILED(theme.InternalOpenThemeData(m_hWnd)) ||
4624 FAILED(::GetThemeFont(theme.m_hTheme, NULL, theme.m_iPartId, 0, 210, &lf)))
4625 {
4627 }
4628
4629 lf.lfEscapement = lf.lfOrientation = 2700;
4631
4632 if (CheckEAFonts())
4633 {
4634 WCHAR szText[LF_FACESIZE];
4635 szText[0] = L'@';
4636 StringCchCopyW(&szText[1], _countof(szText) - 1, lf.lfFaceName);
4638 }
4639
4640 return ::CreateFontIndirectW(&lf);
4641}
4642
4644{
4646 {
4647 if (m_hTextFont)
4648 {
4650 SetFontToThis(NULL);
4651 m_hTextFont = NULL;
4652 }
4654 SetFontToThis(m_hTextFont);
4655 }
4656 else
4657 {
4658 SetFontToThis(NULL);
4659 }
4660}
4661
4664{
4665 //FIXME: CTipbarCtrlButtonHolder
4666}
4667
4669{
4670 if (m_pBalloon)
4671 {
4672 if (::IsWindow(*m_pBalloon))
4674 delete m_pBalloon;
4675 m_pBalloon = NULL;
4676 }
4677}
4678
4680{
4681 if (::IsWindow(m_hWnd))
4683}
4684
4686{
4687 DWORD dwThreadId = 0;
4688 if (m_pFocusThread)
4690 return ::GetKeyboardLayout(dwThreadId);
4691}
4692
4694{
4695 DWORD dwChangingThreadId = m_dwChangingThreadId;
4697 KillTimer(4);
4698
4699 if (dwChangingThreadId)
4700 {
4701 CTipbarThread *pThread = _FindThread(dwChangingThreadId);
4702 if (pThread)
4703 pThread->m_dwUnknown34 |= 0x1;
4704 }
4705}
4706
4708{
4709 if (::IsWindow(m_hWnd))
4710 return ::SetTimer(m_hWnd, nIDEvent, uElapse, NULL);
4711 return 0;
4712}
4713
4715{
4716 if (::IsWindow(m_hWnd))
4717 return ::KillTimer(m_hWnd, uIDEvent);
4718 return FALSE;
4719}
4720
4723{
4725 {
4726 //FIXME
4727 }
4728}
4729
4731{
4732 if (lpPoint)
4733 ::ClientToScreen(m_hWnd, lpPoint);
4734
4735 if (prc)
4736 {
4739 }
4740}
4741
4743{
4744 CicRegKey regKey;
4745 if (regKey.Create(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\")))
4746 {
4747 POINT pt = { 0, 0 };
4749 regKey.SetDword(TEXT("Left"), pt.x);
4750 regKey.SetDword(TEXT("Top"), pt.y);
4751 regKey.SetDword(TEXT("Vertical"), !!(m_dwTipbarWndFlags & TIPBAR_VERTICAL));
4752 }
4753}
4754
4756void CTipbarWnd::SetAlpha(BYTE bAlpha, BOOL bFlag)
4757{
4758}
4759
4761{
4762 if (bDeskBand == !!(m_dwShowType & TF_SFT_DESKBAND))
4763 return TRUE;
4764
4765 BOOL ret = TRUE;
4766 HWND hwndTray = m_ShellWndThread.GetWndTray();
4767 if (bFlag2 && hwndTray)
4768 {
4769 DWORD_PTR dwResult;
4770 HWND hImeWnd = ::ImmGetDefaultIMEWnd(hwndTray);
4771 if (hImeWnd)
4772 ::SendMessageTimeout(hImeWnd, WM_IME_SYSTEM, 0x24 - bDeskBand, (LPARAM)hwndTray,
4773 (SMTO_BLOCK | SMTO_ABORTIFHUNG), 5000, &dwResult);
4774 else
4775 ::SendMessageTimeout(hwndTray, 0x505, 0, bDeskBand,
4776 (SMTO_BLOCK | SMTO_ABORTIFHUNG), 5000, &dwResult);
4777 }
4778 else
4779 {
4780 ret = FALSE;
4781 }
4782
4783 if (!(m_dwTipbarWndFlags & TIPBAR_CHILD) && bDeskBand)
4784 {
4785 KillTimer(7);
4787 }
4788
4789 return ret;
4790}
4791
4792void CTipbarWnd::SetMoveRect(INT X, INT Y, INT nWidth, INT nHeight)
4793{
4795 {
4796 m_nWidth = nWidth;
4798 return;
4799 }
4800
4801 ++m_bInCallOn;
4802
4804
4805 m_X = X;
4806 m_Y = Y;
4807 m_CX = nWidth;
4808 m_CY = nHeight;
4809
4810 RECT rc;
4811 SIZE size = { 0, 0 };
4812 if (m_pWndFrame)
4813 {
4815 m_pWndFrame->SetRect(&rc);
4817 }
4818
4819 if (m_pTipbarGripper)
4820 {
4822 {
4823 INT GripperWidth = GetGripperWidth();
4824 ::SetRect(&rc, size.cx, size.cy, nWidth - m_cxDlgFrameX2 - size.cx, size.cy + GripperWidth);
4825 }
4826 else
4827 {
4828 INT GripperWidth = GetGripperWidth();
4829 INT y1 = nHeight - m_cyDlgFrameX2 - size.cy;
4830 ::SetRect(&rc, size.cx, size.cy, size.cx + GripperWidth, y1);
4831 }
4832 m_pTipbarGripper->SetRect(&rc);
4833 }
4834
4835 --m_bInCallOn;
4836}
4837
4839{
4840 if (bShow)
4842 else
4843 m_dwTipbarWndFlags &= ~TIPBAR_HIGHCONTRAST;
4844
4845 if (m_pFocusThread)
4847
4849}
4850
4852{
4854 m_dwTipbarWndFlags &= ~TIPBAR_TRAYICON;
4855 else
4857
4859 {
4860 KillTimer(10);
4862 }
4863 else if (g_pTrayIconWnd)
4864 {
4867 }
4868}
4869
4871{
4872 AddRef();
4873
4874 RECT rc;
4875 if (!prc)
4876 {
4877 rc = { pt.x, pt.y, pt.x, pt.y };
4878 prc = &rc;
4879 }
4880
4881 if (m_pFocusThread)
4882 {
4883 CUTBContextMenu *pContextMenu = new(cicNoThrow) CUTBContextMenu(this);
4884 if (pContextMenu)
4885 {
4886 if (pContextMenu->Init())
4887 {
4890
4891 m_pModalMenu = pContextMenu;
4892 DWORD dwCommandId = pContextMenu->ShowPopup(GetWindow(), pt, prc, bFlag);
4894
4895 if (m_pThread)
4897
4898 m_pThread = NULL;
4899
4900 if (dwCommandId != (DWORD)-1)
4901 pContextMenu->SelectMenuItem(dwCommandId);
4902 }
4903
4904 delete pContextMenu;
4905 }
4906 }
4907
4908 Release();
4909}
4910
4912{
4913 UINT uTime = ::GetDoubleClickTime();
4914 ::SetTimer(m_hWnd, 3, 3 * uTime, NULL);
4915}
4916
4918{
4920 return FALSE;
4922 m_nID = IDOfItem;
4923 if (!IDOfItem || IDOfItem == -1)
4924 return FALSE;
4925 KillTimer(11);
4927 return TRUE;
4928}
4929
4931{
4932 if (!m_pLangBarMgr)
4933 return;
4934
4936 if (g_pTrayIconWnd)
4938
4939 DWORD dwCurThreadId = ::GetCurrentThreadId();
4940 m_pLangBarMgr->SetModalInput(pSink, dwCurThreadId, 1);
4941}
4942
4944{
4945 if (!m_pLangBarMgr)
4946 return;
4947
4949 if (g_pTrayIconWnd)
4951
4952 DWORD dwCurThreadId = ::GetCurrentThreadId();
4953 m_pLangBarMgr->SetModalInput(NULL, dwCurThreadId, 0);
4954}
4955
4957{
4958 if (g_pTipbarWnd && (g_pTipbarWnd->m_dwShowType & TF_SFT_DESKBAND))
4959 return 0;
4960
4962 return STATUS_TIMEOUT;
4963
4964 DWORD dwFlags1 = 0, dwFlags2 = 0;
4965 if (!TF_GetThreadFlags(dwThreadId, &dwFlags1, &dwFlags2, NULL) && dwFlags2)
4966 return -1;
4967
4968 return TF_CheckThreadInputIdle(dwThreadId, dwMilliseconds);
4969}
4970
4972{
4974 if (pTarget)
4975 return pTarget;
4976
4978
4979 pTarget = new(cicNoThrow) CTipbarThread(this);
4980 if (!pTarget)
4981 return NULL;
4982
4984
4986
4988
4989 if (SUCCEEDED(hr) && !m_Threads.Add(pTarget))
4990 {
4991 pTarget->_UninitItemList(TRUE);
4992 pTarget->m_pTipbarWnd = NULL;
4993 pTarget->_Release();
4994 return NULL;
4995 }
4996
4997 return pTarget;
4998}
4999
5001{
5002 if (g_bWinLogon)
5003 return NULL;
5004
5006 for (size_t iItem = 0; iItem < m_Threads.size(); ++iItem)
5007 {
5008 CTipbarThread *pThread = m_Threads[iItem];
5009 if (pThread && pThread->m_dwThreadId == dwThreadId)
5010 {
5011 pTarget = pThread;
5012 break;
5013 }
5014 }
5015
5016 if (!pTarget)
5017 return NULL;
5018
5019 DWORD dwFlags1, dwFlags2, dwFlags3;
5020 TF_GetThreadFlags(dwThreadId, &dwFlags1, &dwFlags2, &dwFlags3);
5021
5022 if (!dwFlags2 || (dwFlags2 != pTarget->m_dwFlags2) || (dwFlags3 != pTarget->m_dwFlags3))
5023 {
5025 return NULL;
5026 }
5027
5028 return pTarget;
5029}
5030
5032{
5034 return;
5035
5037
5038 HWND hwndFore = ::GetForegroundWindow();
5039 if (!hwndFore)
5040 return;
5041
5043 if (dwThreadId)
5045
5046 m_dwTipbarWndFlags &= ~TIPBAR_ENSURING;
5047}
5048
5050{
5051 if (pFocusThread == m_pFocusThread)
5052 return S_OK;
5053
5056
5057 if (m_pFocusThread)
5058 {
5061 }
5062
5063 m_dwTipbarWndFlags &= ~TIPBAR_ATTACHED;
5064 m_pFocusThread = pFocusThread;
5065 return S_OK;
5066}
5067
5069{
5071 return S_FALSE;
5072
5073 if (m_pFocusThread)
5074 {
5078 }
5079
5080 return S_OK;
5081}
5082
5083void CTipbarWnd::RestoreLastFocus(DWORD *pdwThreadId, BOOL fPrev)
5084{
5085 if (m_pLangBarMgr)
5086 m_pLangBarMgr->RestoreLastFocus(pdwThreadId, fPrev);
5087}
5088
5090{
5091 if (bRemove)
5092 {
5093 ssize_t iItem = m_Threads.Find(pThread);
5094 if (iItem >= 0)
5095 m_Threads.Remove(iItem);
5096 }
5097
5098 if (pThread == m_pFocusThread)
5100
5101 if (pThread == m_pThread)
5102 m_pThread = NULL;
5103
5104 if (pThread == m_pUnknownThread)
5106}
5107
5109{
5110 const size_t cItems = m_Threads.size();
5111
5112 DWORD *pdwThreadIds = new(cicNoThrow) DWORD[cItems];
5113 if (!pdwThreadIds)
5114 return;
5115
5116 for (size_t iItem = 0; iItem < cItems; ++iItem)
5117 {
5118 pdwThreadIds[iItem] = 0;
5119 CTipbarThread* pThread = m_Threads[iItem];
5120 if (pThread && (bFlag || (pThread != m_pFocusThread)))
5121 {
5122 pdwThreadIds[iItem] = pThread->m_dwThreadId;
5123 }
5124 }
5125
5126 for (size_t iItem = 0; iItem < cItems; ++iItem)
5127 {
5128 if (pdwThreadIds[iItem])
5129 OnThreadTerminateInternal(pdwThreadIds[iItem]);
5130 }
5131
5132 delete[] pdwThreadIds;
5133}
5134
5136{
5137 static const QITAB c_tab[] =
5138 {
5141 { NULL }
5142 };
5143 return ::QISearch(this, c_tab, riid, ppvObj);
5144}
5145
5147{
5148 return ++m_cRefs;
5149}
5150
5152{
5153 if (--m_cRefs == 0)
5154 {
5155 delete this;
5156 return 0;
5157 }
5158 return m_cRefs;
5159}
5160
5163{
5164 return E_NOTIMPL;
5165}
5166
5168{
5169 HRESULT hr;
5170 ++m_bInCallOn;
5171 AddRef();
5172 {
5174 if (!m_pFocusThread)
5176 }
5177 --m_bInCallOn;
5178 Release();
5179 return hr;
5180}
5181
5183{
5184 for (size_t iItem = 0; iItem < m_Threads.size(); ++iItem)
5185 {
5186 CTipbarThread *pThread = m_Threads[iItem];
5187 if (pThread && pThread->m_dwThreadId == dwThreadId)
5188 {
5189 m_Threads.Remove(iItem);
5190 pThread->RemoveUIObjs();
5191 CleanUpThreadPointer(pThread, FALSE);
5192 pThread->_UninitItemList(TRUE);
5193 pThread->m_pTipbarWnd = NULL;
5194 pThread->_Release();
5195 break;
5196 }
5197 }
5198
5199 return S_OK;
5200}
5201
5203{
5205 return S_OK;
5206 if (!(m_dwTipbarWndFlags & TIPBAR_CHILD) && (m_dwShowType & TF_SFT_DESKBAND))
5207 return S_OK;
5208
5210 if (pThread)
5211 {
5212 if ((!m_dwUnknown23 || m_dwUnknown23 == dwThreadId) && pThread == m_pFocusThread)
5213 {
5216 KillTimer(6);
5218 }
5219 else
5220 {
5221 pThread->m_dwUnknown34 |= 0x1;
5222 }
5223 }
5224 else
5225 {
5226 for (size_t iItem = 0; iItem < m_ThreadCreatingList.size(); ++iItem)
5227 {
5228 CTipbarThread *pItem = m_ThreadCreatingList[iItem];
5229 if (pItem && pItem->m_dwThreadId == dwThreadId)
5230 {
5231 pItem->m_dwUnknown34 |= 0x1;
5232 }
5233 }
5234 }
5235
5236 return S_OK;
5237}
5238
5240{
5241 switch (uMsg)
5242 {
5243 case WM_NCLBUTTONDOWN:
5244 case WM_NCRBUTTONDOWN:
5245 case WM_NCMBUTTONDOWN:
5246 case WM_LBUTTONUP:
5247 case WM_RBUTTONUP:
5248 case WM_MBUTTONUP:
5249 break;
5250
5251 case WM_NCLBUTTONUP:
5252 case WM_NCRBUTTONUP:
5253 case WM_NCMBUTTONUP:
5254 if (m_pThread)
5255 {
5257 if (pMenuUI)
5258 {
5259 HWND hWnd = *pMenuUI;
5260 if (hWnd)
5261 {
5266 }
5267 }
5268 }
5269 break;
5270
5271 default:
5272 {
5273 if (uMsg == WM_KEYDOWN || uMsg == WM_KEYUP)
5274 {
5275 if (m_pThread)
5277 }
5278 else
5279 {
5280 CancelMenu();
5281 }
5282 break;
5283 }
5284 }
5285
5286 return 0;
5287}
5288
5291{
5292 return E_NOTIMPL;
5293}
5294
5296{
5298 return E_UNEXPECTED;
5299
5301 return E_FAIL;
5302
5303 for (size_t iItem = 0; iItem < m_pFocusThread->m_UIObjects.size(); ++iItem)
5304 {
5305 CTipbarItem* pItem = m_pFocusThread->m_UIObjects[iItem];
5306 if (pItem)
5307 {
5308 if ((pItem->m_dwItemFlags & 0x8) && IsEqualGUID(pItem->m_ItemInfo.guidItem, rguid))
5309 {
5310 pItem->OnUnknown57(prc);
5311 return S_OK;
5312 }
5313 }
5314 }
5315
5316 return E_FAIL;
5317}
5318
5321{
5322 return E_NOTIMPL;
5323}
5324
5325STDMETHODIMP_(BSTR) CTipbarWnd::GetAccName()
5326{
5327 WCHAR szText[256];
5328 ::LoadStringW(g_hInst, IDS_LANGUAGEBAR, szText, _countof(szText));
5329 return ::SysAllocString(szText);
5330}
5331
5332STDMETHODIMP_(void) CTipbarWnd::GetAccLocation(LPRECT lprc)
5333{
5334 GetRect(lprc);
5335}
5336
5337STDMETHODIMP_(void) CTipbarWnd::PaintObject(HDC hDC, LPCRECT prc)
5338{
5340 {
5341 Move(m_X, m_Y, m_CX, m_CY);
5342 m_dwTipbarWndFlags &= ~TIPBAR_UPDATING;
5343 }
5344
5346 {
5348 if (g_pTipbarWnd)
5349 CUIFWindow::PaintObject(hDC, prc);
5350 }
5351}
5352
5353STDMETHODIMP_(DWORD) CTipbarWnd::GetWndStyle()
5354{
5355 return CUIFWindow::GetWndStyle() & ~WS_BORDER;
5356}
5357
5358STDMETHODIMP_(void) CTipbarWnd::Move(INT x, INT y, INT nWidth, INT nHeight)
5359{
5360 CUIFWindow::Move(x, y, nWidth, nHeight);
5361}
5362
5363STDMETHODIMP_(void) CTipbarWnd::OnMouseOutFromWindow(LONG x, LONG y)
5364{
5366 if ((m_dwTipbarWndFlags & 0x40) && (m_dwTipbarWndFlags & 0x80))
5368}
5369
5371STDMETHODIMP_(void) CTipbarWnd::OnCreate(HWND hWnd)
5372{
5373}
5374
5375STDMETHODIMP_(void) CTipbarWnd::OnDestroy(HWND hWnd)
5376{
5377 CancelMenu();
5378
5380 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_DESTROY, GetAccItem());
5381
5384 {
5388 }
5389
5391
5392 if (m_pLangBarMgr)
5394}
5395
5397STDMETHODIMP_(void) CTipbarWnd::OnTimer(WPARAM wParam)
5398{
5399 AddRef();
5400 switch (wParam)
5401 {
5402 case 1:
5403 KillTimer(1);
5405 break;
5406 case 2:
5407 KillTimer(2);
5409 break;
5410 case 3:
5411 KillTimer(3);
5413 break;
5414 case 4:
5415 {
5417 if (status)
5418 {
5419 if (status != STATUS_TIMEOUT)
5420 {
5421 KillTimer(4);
5423 }
5424 }
5425 else if (!m_pThread)
5426 {
5427 KillTimer(4);
5428 DWORD dwOldThreadId = m_dwChangingThreadId;
5430 OnThreadItemChangeInternal(dwOldThreadId);
5431 }
5432 break;
5433 }
5434 case 5:
5435 KillTimer(5);
5437 break;
5438 case 6:
5439 KillTimer(6);
5440 if (m_pFocusThread)
5441 {
5444 {
5445 if (m_pFocusThread)
5447 }
5448 }
5449 break;
5450 case 7:
5451 {
5452 DWORD dwThreadId = 0;
5453 if (KillTimer(7))
5454 {
5455 if (m_pFocusThread)
5457
5460
5461 if (dwThreadId)
5463
5464 InitMetrics();
5465 // FIXME: CTipbarCtrlButtonHolder
5466
5468 SetAlpha(0xFF, TRUE);
5470 }
5471 break;
5472 }
5473 case 8:
5474 KillTimer(8);
5475 UpdateUI(NULL);
5476 break;
5477 case 9:
5478 KillTimer(9);
5479 //FIXME
5481 Show(!!(m_dwUnknown23_5[3] & 0x80000000));
5483 if ((m_dwUnknown23_5[3] & 0x2))
5485 break;
5486 case 10:
5487 KillTimer(10);
5488 MoveToTray();
5489 break;
5490 case 11:
5491 KillTimer(11);
5493 {
5494 if (m_nID)
5495 {
5497 m_nID = 0;
5498 }
5499 }
5500 break;
5501 case 12:
5502 KillTimer(12);
5504 break;
5505 case 13:
5506#ifdef ENABLE_DESKBAND
5507 if (!m_pDeskBand || !m_pDeskBand->m_dwUnknown19)
5508 {
5509 KillTimer(13);
5510 if (!m_pFocusThread)
5512 }
5513#endif
5514 break;
5515 case 14:
5516 if (SetLangBand(TRUE, TRUE))
5517 {
5518 m_dwShowType = TF_SFT_DESKBAND;
5519 KillTimer(14);
5520 }
5521 break;
5522 default:
5523 {
5524 if (10000 <= wParam && wParam < 10050)
5525 {
5527 if (pItem)
5528 {
5529 auto& clsid = pItem->m_clsid;
5530 m_LangBarItemList.SetDemoteLevel(pItem->m_clsid, 2);
5531 if (m_pFocusThread)
5532 {
5533 auto *pThreadItem = m_pFocusThread->GetItem(clsid);
5534 if (pThreadItem)
5535 pThreadItem->AddRemoveMeToUI(FALSE);
5536 }
5537 }
5538 }
5539 break;
5540 }
5541 }
5542
5543 Release();
5544}
5545
5546STDMETHODIMP_(void) CTipbarWnd::OnSysColorChange()
5547{
5548 KillTimer(7);
5550}
5551
5553{
5558 SavePosition();
5559}
5560
5561STDMETHODIMP_(void) CTipbarWnd::OnEndSession(HWND hWnd, WPARAM wParam, LPARAM lParam)
5562{
5563 if (!g_bWinLogon)
5565
5566 if (wParam) // End session?
5567 {
5568 if (lParam & ENDSESSION_LOGOFF)
5569 {
5570 KillTimer(9);
5571 Show(FALSE);
5572 }
5573 else
5574 {
5576
5577 AddRef();
5579 Release();
5580 }
5581 }
5582}
5583
5584STDMETHODIMP_(void) CTipbarWnd::OnUser(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5585{
5586 if (uMsg == WM_USER + 1)
5587 {
5591 }
5592 else if (uMsg == g_wmTaskbarCreated)
5593 {
5595 }
5596}
5597
5599CTipbarWnd::OnWindowPosChanged(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5600{
5601 if (m_pFocusThread)
5602 {
5603 for (size_t iItem = 0; iItem < m_pFocusThread->m_UIObjects.size(); ++iItem)
5604 {
5605 CTipbarItem *pItem = m_pFocusThread->m_UIObjects[iItem];
5606 if (pItem)
5607 pItem->OnUnknown44();
5608 }
5609 }
5610
5611 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
5612}
5613
5615CTipbarWnd::OnWindowPosChanging(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5616{
5618 if (!(pWP->flags & SWP_NOZORDER))
5619 {
5621 pWP->hwndInsertAfter = NULL;
5622 }
5623 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
5624}
5625
5627CTipbarWnd::OnShowWindow(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5628{
5630 {
5631 if (wParam) // Show?
5632 {
5633 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_SHOW, GetAccItem());
5634 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_FOCUS, GetAccItem());
5635 }
5636 else
5637 {
5638 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_HIDE, GetAccItem());
5639 }
5640 }
5641 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
5642}
5643
5645CTipbarWnd::OnSettingChange(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5646{
5647 if (!wParam || wParam == SPI_SETNONCLIENTMETRICS || wParam == SPI_SETHIGHCONTRAST)
5648 {
5649 KillTimer(7);
5651 }
5652 return 0;
5653}
5654
5656CTipbarWnd::OnDisplayChange(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5657{
5659 {
5660 KillTimer(12);
5662 }
5663 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
5664}
5665
5667CTipbarWnd::OnGetObject(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5668{
5669 if (lParam != -4)
5670 return S_OK;
5672 return E_OUTOFMEMORY;
5673
5676
5677 HRESULT hr = S_OK;
5679 {
5681 if (FAILED(hr))
5682 {
5685 return hr;
5686 }
5687
5688 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_CREATE, GetAccItem());
5690 }
5691
5692 return hr;
5693}
5694
5695STDMETHODIMP_(BOOL) CTipbarWnd::OnEraseBkGnd(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5696{
5697 return TRUE;
5698}
5699
5700STDMETHODIMP_(void) CTipbarWnd::OnThemeChanged(HWND hWnd, WPARAM wParam, LPARAM lParam)
5701{
5702 CUIFWindow::OnThemeChanged(hWnd, wParam, lParam);
5703}
5704
5705STDMETHODIMP_(void) CTipbarWnd::UpdateUI(LPCRECT prc)
5706{
5707 KillTimer(8);
5708
5710 {
5712 return;
5713 }
5714
5716 {
5717 ++m_bInCallOn;
5718 Move(m_X, m_Y, m_CX, m_CY);
5719 m_dwTipbarWndFlags &= ~TIPBAR_UPDATING;
5720 --m_bInCallOn;
5721 }
5722
5723 CUIFWindow::UpdateUI(NULL);
5724}
5725
5727STDMETHODIMP_(void) CTipbarWnd::HandleMouseMsg(UINT uMsg, LONG x, LONG y)
5728{
5729}
5730
5731/***********************************************************************
5732 * CTipbarThread
5733 */
5734
5736{
5737 m_pTipbarWnd = pTipbarWnd;
5738 m_dwThreadId = 0;
5740 m_cRefs = 1;
5741}
5742
5744{
5745 if (m_pTipbarWnd)
5746 {
5747 RemoveUIObjs();
5749 }
5750
5751 _UninitItemList(1);
5752
5754 {
5757 }
5758}
5759
5761{
5764 return E_FAIL;
5765 if (m_dwFlags1 & 0x8)
5766 return S_OK;
5769 &dwThreadId);
5770}
5771
5774{
5775 return E_NOTIMPL;
5776}
5777
5779{
5780 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5781 {
5782 CTipbarItem* pItem = m_UIObjects[iItem];
5783 if (pItem)
5784 pItem->m_dwItemFlags |= 0x10;
5785 }
5786
5787 HRESULT hr = S_OK;
5788 if (bUnAdvise)
5789 {
5792 }
5793
5794 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5795 {
5796 CTipbarItem* pItem = m_UIObjects[iItem];
5797 if (pItem)
5798 {
5799 if (m_pTipbarWnd)
5801
5802 pItem->ClearConnections();
5803
5804 if (m_pTipbarWnd)
5805 pItem->OnUnknown50();
5806 else
5807 pItem->OnUnknown51();
5808
5809 pItem->OnUnknown59();
5810 pItem->OnUnknown42();
5811 }
5812 }
5813
5815
5817
5818 return hr;
5819}
5820
5822{
5823 for (size_t iItem = 0; iItem < m_Separators.size(); ++iItem)
5824 {
5825 CUIFObject *pItem = m_Separators[iItem];
5826 if (pItem)
5827 m_pTipbarWnd->AddUIObj(pItem);
5828 }
5829}
5830
5832{
5833 for (size_t iItem = 0; iItem < m_Separators.size(); ++iItem)
5834 {
5835 CUIFObject *pItem = m_Separators[iItem];
5836 if (pItem)
5837 {
5838 if (m_pTipbarWnd)
5839 m_pTipbarWnd->RemoveUIObj(pItem);
5840 delete pItem;
5841 }
5842 }
5844}
5845
5847{
5848 _AddRef();
5849
5850 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5851 {
5852 CTipbarItem* pItem = m_UIObjects[iItem];
5853 if (pItem && (pItem->m_dwItemFlags & 0x8))
5854 {
5856 }
5857 }
5858
5860 MyMoveWnd(0, 0);
5861
5862 _Release();
5863}
5864
5866{
5867 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5868 {
5869 CTipbarItem* pItem = m_UIObjects[iItem];
5870 if (pItem)
5871 {
5873 }
5874 }
5876}
5877
5879{
5880 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5881 {
5882 auto *pItem = m_UIObjects[iItem];
5883 if (pItem && IsEqualCLSID(pItem->m_ItemInfo.guidItem, rclsid))
5884 return pItem;
5885 }
5886 return NULL;
5887}
5888
5890{
5892
5893 HGDIOBJ hFontOld = NULL;
5894
5895 HDC hDC = ::GetDC(hWnd);
5897 {
5899 if (hFont)
5900 hFontOld = ::SelectObject(hDC, hFont);
5901 INT cch = ::SysStringLen(bstr);
5902 ::GetTextExtentPoint32W(hDC, bstr, cch, pSize);
5903 if (hFontOld)
5904 ::SelectObject(hDC, hFontOld);
5905 }
5906 else
5907 {
5908 CUIFTheme theme;
5909 theme.m_iPartId = 1;
5910 theme.m_iStateId = 0;
5911 theme.m_pszClassList = L"TOOLBAR";
5912
5913 HFONT hFont = NULL;
5914
5916 {
5917 LOGFONTW lf;
5918 if (SUCCEEDED(::GetThemeFont(theme.m_hTheme, NULL, theme.m_iPartId, 0, 210, &lf)))
5919 {
5921 if (hFont)
5922 hFontOld = ::SelectObject(hDC, hFont);
5923 }
5924
5925 RECT rc;
5926 INT cch = ::SysStringLen(bstr);
5927 ::GetThemeTextExtent(theme.m_hTheme, hDC, theme.m_iPartId, 0, bstr, cch, 0, NULL, &rc);
5928
5929 pSize->cx = rc.right;
5930 pSize->cy = rc.bottom;
5931 }
5932
5933 if (hFontOld)
5934 ::SelectObject(hDC, hFontOld);
5935 if (hFont)
5937 }
5938
5940}
5941
5943{
5944 DWORD dwDirty = 0;
5945 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5946 {
5947 CTipbarItem* pItem = m_UIObjects[iItem];
5948 if (pItem)
5949 dwDirty |= pItem->m_dwDirty;
5950 }
5951 return dwDirty;
5952}
5953
5955{
5956 if (!m_pTipbarWnd)
5957 return FALSE;
5958 return this == m_pTipbarWnd->m_pFocusThread;
5959}
5960
5962{
5963 if (!m_pTipbarWnd)
5964 return FALSE;
5966}
5967
5970{
5971}
5972
5974{
5975 if (--m_cRefs == 0)
5976 {
5977 delete this;
5978 return 0;
5979 }
5980 return m_cRefs;
5981}
5982
5984{
5985 if (!m_pLangBarItemMgr)
5986 return E_FAIL;
5987
5988 DWORD *pdwCoolkies = new(cicNoThrow) DWORD[m_UIObjects.size()];
5989 if (!pdwCoolkies)
5990 return E_OUTOFMEMORY;
5991
5992 const size_t cItems = m_UIObjects.size();
5993 for (size_t iItem = 0; iItem < cItems; ++iItem)
5994 {
5995 CTipbarItem* pItem = m_UIObjects[iItem];
5996 if (pItem)
5997 pdwCoolkies[iItem] = pItem->m_dwCookie;
5998 }
5999
6000 HRESULT hr = m_pLangBarItemMgr->UnadviseItemsSink((LONG)cItems, pdwCoolkies);
6001
6002 delete[] pdwCoolkies;
6003
6004 return hr;
6005}
6006
6008{
6009 if (!m_pTipbarWnd || (m_pTipbarWnd->m_pFocusThread != this))
6010 return;
6011
6012 RECT Rect, rcWorkArea;
6013 m_pTipbarWnd->GetRect(&Rect);
6014 POINT pt = { Rect.left, Rect.top };
6015 cicGetWorkAreaRect(pt, &rcWorkArea);
6016
6018
6019 LONG X0 = Rect.left + xDelta, Y0 = Rect.top + yDelta;
6020 if (m_pTipbarWnd->m_dwTipbarWndFlags & 0x1000)
6021 {
6023 {
6024 X0 = rcWorkArea.right - (3 * m_pTipbarWnd->m_ButtonWidth +
6026 Y0 = 0;
6027 }
6028 else
6029 {
6030 m_pTipbarWnd->m_dwTipbarWndFlags &= ~0x1000;
6031 }
6032 }
6033
6034 if (IsVertical())
6035 {
6039 }
6040 else
6041 {
6045 }
6046
6047 SIZE frameSize = { 0, 0 };
6050
6053}
6054
6055/***********************************************************************
6056 * CTipbarItem
6057 */
6058
6060 CTipbarThread *pThread,
6061 ITfLangBarItem *pLangBarItem,
6062 TF_LANGBARITEMINFO *pItemInfo,
6063 DWORD dwUnknown16)
6064{
6065 m_dwUnknown19[1] = 0;
6066 m_dwUnknown19[2] = 0;
6067 m_dwUnknown19[3] = 0;
6068 m_pTipbarThread = pThread;
6069 m_ItemInfo = *pItemInfo;
6070 m_pLangBarItem = pLangBarItem;
6072 m_dwItemFlags = 0;
6073 m_dwUnknown16 = dwUnknown16;
6074 m_dwDirty = 0x1001F;
6075}
6076
6078{
6079 if (g_pTipbarWnd)
6080 {
6083 }
6084
6085 if (m_pLangBarItem)
6087}
6088
6090{
6091 if (!IsConnected())
6092 return;
6093
6094 OnUnknown41();
6095
6096 m_dwItemFlags |= 0x2;
6097
6099 if (m_dwDirty)
6100 {
6101 if (m_dwDirty & 0x10000)
6103 else
6104 dwStatus = 0;
6105 OnUnknown45(m_dwDirty, dwStatus);
6106 m_dwDirty = 0;
6107 }
6108
6109 if (m_pTipbarThread)
6110 {
6112 if (pTipbarWnd)
6113 {
6114 CTipbarAccessible *pTipbarAccessible = pTipbarWnd->m_pTipbarAccessible;
6115 if (pTipbarAccessible)
6116 pTipbarAccessible->AddAccItem(this);
6117 }
6118 }
6119
6120 OnUnknown42();
6121}
6122
6124{
6125 m_dwItemFlags &= ~0x2;
6126
6127 if (g_pTipbarWnd)
6128 {
6130 if (pAccessible)
6131 pAccessible->RemoveAccItem(this);
6132 }
6133}
6134
6136{
6137 if (!IsConnected())
6138 return;
6139
6141
6142 if (!IsConnected())
6143 return;
6144
6146
6148 if (bFlag)
6149 OnUnknown46(pTipbarWnd ? pTipbarWnd->GetWindow() : NULL);
6150 else
6151 OnUnknown47(pTipbarWnd ? pTipbarWnd->GetWindow() : NULL);
6152}
6153
6155{
6156 return (!(m_dwItemFlags & 0x10) && m_pTipbarThread && m_pTipbarThread->m_pTipbarWnd &&
6158}
6159
6161{
6163 if (m_pLangBarItem)
6164 {
6167 }
6168}
6169
6172{
6173 if (!g_bIntelliSense)
6174 return;
6175
6176 if (!m_pTipbarThread)
6177 return;
6178
6180 if (!pTipbarWnd)
6181 return;
6182
6183 //FIXME
6184}
6185
6186STDMETHODIMP_(BOOL) CTipbarItem::DoAccDefaultAction()
6187{
6188 if (!m_pTipbarThread)
6189 return FALSE;
6191 if (!pTipbarWnd)
6192 return FALSE;
6193 pTipbarWnd->StartDoAccDefaultActionTimer(this);
6194 return TRUE;
6195}
6196
6198STDMETHODIMP_(void) CTipbarItem::OnUpdateHandler(ULONG, ULONG)
6199{
6200}
6201
6202STDMETHODIMP_(void) CTipbarItem::GetAccLocation(LPRECT prc)
6203{
6205}
6206
6207STDMETHODIMP_(BSTR) CTipbarItem::GetAccName()
6208{
6209 return ::SysAllocString(m_ItemInfo.szDescription);
6210}
6211
6212STDMETHODIMP_(LPCWSTR) CTipbarItem::GetToolTip()
6213{
6214 OnUnknown41();
6215
6216 if (!(m_dwItemFlags & 0x1))
6217 {
6218 m_dwItemFlags |= 0x1;
6219
6220 BSTR bstrString;
6221 if (FAILED(m_pLangBarItem->GetTooltipString(&bstrString)))
6222 return NULL;
6223
6224 if (bstrString)
6225 {
6226 OnUnknown53(bstrString);
6227 ::SysFreeString(bstrString);
6228 }
6229 }
6230
6231 LPCWSTR pszToolTip = OnUnknown55();
6232
6233 OnUnknown42();
6234
6235 return pszToolTip;
6236}
6237
6239{
6240 if (!IsConnected())
6241 return S_OK;
6242
6243 m_dwDirty |= dwDirty;
6244 m_dwItemFlags |= 0x20;
6245
6246 if ((dwDirty & 0x10000) || (m_dwItemFlags & 0x6))
6247 {
6248 if (m_pTipbarThread)
6249 {
6251 if (pTipBarWnd && *pTipBarWnd)
6252 {
6253 pTipBarWnd->KillTimer(6);
6254 pTipBarWnd->SetTimer(6, g_uTimerElapseONUPDATECALLED);
6255 }
6256 }
6257 }
6258
6259 return S_OK;
6260}
6261
6263{
6264 if (!m_pTipbarThread)
6265 return;
6268}
6269
6270/***********************************************************************
6271 * GetTipbarInternal
6272 */
6274{
6275 BOOL bParent = !!(dwFlags & 0x80000000);
6276 g_bWinLogon = !!(dwFlags & 0x1);
6277
6278 InitFromReg();
6279
6280 if (!g_bShowTipbar)
6281 return FALSE;
6282
6283 if (bParent)
6284 {
6286 if (!g_pTrayIconWnd)
6287 return FALSE;
6289 }
6290
6292 if (!g_pTipbarWnd || !g_pTipbarWnd->Initialize())
6293 return FALSE;
6294
6295 g_pTipbarWnd->Init(!bParent, pDeskBand);
6296 g_pTipbarWnd->CreateWnd(hWnd);
6297
6298 ::SetWindowText(*g_pTipbarWnd, TEXT("TF_FloatingLangBar_WndTitle"));
6299
6300 DWORD dwOldStatus = 0;
6301 if (!bParent)
6302 {
6304 g_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_DESKBAND);
6305 }
6306
6310
6311 if (!bParent && (dwOldStatus & TF_SFT_DESKBAND))
6313
6315 return TRUE;
6316}
6317
6318/***********************************************************************
6319 * GetLibTls (MSUTB.@)
6320 *
6321 * @implemented
6322 */
6325{
6326 TRACE("()\n");
6327 return &g_libTLS;
6328}
6329
6330/***********************************************************************
6331 * GetPopupTipbar (MSUTB.@)
6332 *
6333 * @implemented
6334 */
6337{
6338 TRACE("(%p, %d)\n", hWnd, fWinLogon);
6339
6340 if (!fWinLogon)
6342
6343 return GetTipbarInternal(hWnd, fWinLogon | 0x80000000, NULL);
6344}
6345
6346/***********************************************************************
6347 * SetRegisterLangBand (MSUTB.@)
6348 *
6349 * @implemented
6350 */
6353{
6354 TRACE("(%d)\n", bRegister);
6355
6356 if (!g_bEnableDeskBand || !(g_dwOSInfo & CIC_OSINFO_XPPLUS)) // Desk band is for XP+
6357 return E_FAIL;
6358
6359 BOOL bDeskBand = IsDeskBandFromReg();
6360 if (bDeskBand == bRegister)
6361 return S_OK;
6362
6363 SetDeskBandToReg(bRegister);
6364
6365 if (!RegisterComCat(CLSID_MSUTBDeskBand, CATID_DeskBand, bRegister))
6366 return TF_E_NOLOCK;
6367
6368 return S_OK;
6369}
6370
6371/***********************************************************************
6372 * ClosePopupTipbar (MSUTB.@)
6373 *
6374 * @implemented
6375 */
6378{
6379 TRACE("()\n");
6380
6382 return;
6383
6385
6386 if (g_pTipbarWnd)
6387 {
6392 }
6393
6394 if (g_pTrayIconWnd)
6395 {
6397 delete g_pTrayIconWnd;
6399 }
6400
6402
6404}
6405
6406/***********************************************************************
6407 * DllRegisterServer (MSUTB.@)
6408 *
6409 * @implemented
6410 */
6412{
6413 TRACE("()\n");
6414 return gModule.DllRegisterServer(FALSE);
6415}
6416
6417/***********************************************************************
6418 * DllUnregisterServer (MSUTB.@)
6419 *
6420 * @implemented
6421 */
6423{
6424 TRACE("()\n");
6425 return gModule.DllUnregisterServer(FALSE);
6426}
6427
6428/***********************************************************************
6429 * DllCanUnloadNow (MSUTB.@)
6430 *
6431 * @implemented
6432 */
6434{
6435 TRACE("()\n");
6436 return gModule.DllCanUnloadNow() && (g_DllRefCount == 0);
6437}
6438
6439/***********************************************************************
6440 * DllGetClassObject (MSUTB.@)
6441 *
6442 * @implemented
6443 */
6445{
6446 TRACE("()\n");
6447 return gModule.DllGetClassObject(rclsid, riid, ppv);
6448}
6449
6453 REFCLSID rclsid,
6454 LPUNKNOWN pUnkOuter,
6455 DWORD dwClsContext,
6456 REFIID iid,
6457 LPVOID *ppv)
6458{
6463 return cicRealCoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, ppv);
6464}
6465
6466BEGIN_OBJECT_MAP(ObjectMap)
6467#ifdef ENABLE_DESKBAND
6468 OBJECT_ENTRY(CLSID_MSUTBDeskBand, CDeskBand) // FIXME: Implement this
6469#endif
6471
6473{
6474 // Do nothing
6475}
6476
6479{
6481
6482 g_hInst = hinstDLL;
6483
6485
6487 cicInitUIFLib();
6488
6490
6491 g_wmTaskbarCreated = RegisterWindowMessageW(L"TaskbarCreated");
6492
6493 gModule.Init(ObjectMap, hinstDLL, NULL);
6495
6496 return TRUE;
6497}
6498
6501{
6502 cicDoneUIFLib();
6503 TFUninitLib();
6505 gModule.Term();
6506}
6507
6511 _In_ HINSTANCE hinstDLL,
6514{
6515 switch (dwReason)
6516 {
6517 case DLL_PROCESS_ATTACH:
6518 {
6519 TRACE("(%p, %lu, %p)\n", hinstDLL, dwReason, lpvReserved);
6520 if (!ProcessAttach(hinstDLL))
6521 {
6522 ProcessDetach(hinstDLL);
6523 return FALSE;
6524 }
6525 break;
6526 }
6527 case DLL_PROCESS_DETACH:
6528 {
6529 ProcessDetach(hinstDLL);
6530 break;
6531 }
6532 }
6533 return TRUE;
6534}
static HDC hDC
Definition: 3dtext.c:33
HRESULT RegisterComCat()
@ TS_TRUE
DWORD WINAPI ThreadProc(LPVOID lpParam)
Definition: ServiceMain.c:30
Arabic default style
Definition: afstyles.h:94
static int state
Definition: maze.c:121
unsigned int dir
Definition: maze.c:112
#define InterlockedDecrement
Definition: armddk.h:52
#define GetStatus(BaseIoAddress, Status)
Definition: atapi.h:328
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
int help
Definition: sort.c:20
#define IDI_MAINICON
Definition: resource.h:3
#define IDS_VERTICAL
Definition: resource.h:226
static const TCHAR helpfile[]
Definition: dialog.c:19
#define ID_SETTINGS
Definition: resource.h:81
HFONT hFont
Definition: main.c:53
static LRESULT OnUser(HWND hWnd)
Definition: wordpad.c:1952
STDAPI DllRegisterServer(void)
Definition: misc.cpp:180
STDAPI DllUnregisterServer(void)
Definition: misc.cpp:196
HRESULT WINAPI DllCanUnloadNow(void)
Definition: misc.cpp:173
DWORD dwReason
Definition: misc.cpp:154
static VOID OnTimer(IN HWND hwndDlg, IN PSYS_SHUTDOWN_PARAMS pShutdownParams)
Definition: shutdown.c:72
#define UlongToHandle(ul)
Definition: basetsd.h:97
#define STDAPI
Definition: basetyps.h:41
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
#define STDMETHOD(m)
Definition: basetyps.h:62
#define ERR(fmt,...)
Definition: debug.h:110
HBITMAP hbmp
EXTERN_C HRESULT cicRealCoCreateInstance(_In_ REFCLSID rclsid, _In_ LPUNKNOWN pUnkOuter, _In_ DWORD dwClsContext, _In_ REFIID iid, _Out_ LPVOID *ppv)
Definition: cicbase.cpp:206
EXTERN_C void cicGetOSInfo(LPUINT puACP, LPDWORD pdwOSInfo)
Definition: cicbase.cpp:82
EXTERN_C BOOL TFInitLib(FN_CoCreateInstance fnCoCreateInstance)
Definition: cicbase.cpp:251
#define cicNoThrow
Definition: cicbase.h:34
#define CIC_OSINFO_XPPLUS
Definition: cicbase.h:51
void cicInitUIFLib(void)
Definition: cicuif.cpp:5459
BOOL cicGetIconBitmaps(HICON hIcon, HBITMAP *hbm1, HBITMAP *hbm2, const SIZE *pSize)
Definition: cicuif.cpp:1375
BOOL cicIsFullScreenSize(HWND hWnd)
Definition: cicuif.cpp:5365
void cicGetScreenRect(POINT pt, LPRECT prc)
Definition: cicuif.cpp:5353
void cicGetWorkAreaRect(POINT pt, LPRECT prc)
Definition: cicuif.cpp:5340
void cicDoneUIFLib(void)
Definition: cicuif.cpp:5466
@ UIF_WINDOW_NOMOUSEMSG
Definition: cicuif.h:503
@ UIF_WINDOW_CHILD
Definition: cicuif.h:494
@ UIF_WINDOW_LAYOUTRTL
Definition: cicuif.h:502
@ UIF_WINDOW_TOPMOST
Definition: cicuif.h:495
@ UIF_WINDOW_TOOLWINDOW
Definition: cicuif.h:496
@ UIF_WINDOW_WORKAREA
Definition: cicuif.h:500
@ UIF_WINDOW_MONITOR
Definition: cicuif.h:501
@ UIF_WINDOW_DLGFRAME
Definition: cicuif.h:497
@ UIF_WINDOW_ENABLETHEMED
Definition: cicuif.h:507
@ UIF_WINDOW_SHADOW
Definition: cicuif.h:499
@ UIF_WINDOW_TOOLTIP
Definition: cicuif.h:498
void TFUninitLib_Thread(PCIC_LIBTHREAD pLibThread)
Definition: cicutb.h:44
CButtonIconItem(CTrayIconWnd *pWnd, DWORD dwUnknown24)
Definition: msutb.cpp:3124
STDMETHOD_(BOOL, OnDelayMsg)(UINT uMsg) override
DWORD m_dwUnknown24
Definition: msutb.cpp:1185
ITfMenu * m_pMenu
Definition: msutb.cpp:749
virtual ~CCicLibMenuItem()
Definition: msutb.cpp:1974
BOOL Init(UINT uId, DWORD dwFlags, HBITMAP hbmp, HBITMAP hbmpMask, const WCHAR *pch, ULONG cch, ITfMenu *pMenu)
Definition: msutb.cpp:1998
HBITMAP m_hbmpMask
Definition: msutb.cpp:747
DWORD m_dwFlags
Definition: msutb.cpp:745
BSTR m_bstrText
Definition: msutb.cpp:748
HBITMAP CreateBitmap(HANDLE hBitmap)
Definition: msutb.cpp:2024
HBITMAP m_hbmp
Definition: msutb.cpp:746
STDMETHOD_(CCicLibMenu *, CreateSubMenu)()
STDMETHOD_(ULONG, AddRef)() override
LONG m_cRefs
Definition: msutb.cpp:718
CicArray< CCicLibMenuItem * > m_MenuItems
Definition: msutb.cpp:717
STDMETHOD_(ULONG, Release)() override
virtual ~CCicLibMenu()
Definition: msutb.cpp:1879
STDMETHOD() AddMenuItem(UINT uId, DWORD dwFlags, HBITMAP hbmp, HBITMAP hbmpMask, const WCHAR *pch, ULONG cch, ITfMenu **ppSubMenu) override
Definition: msutb.cpp:1923
STDMETHOD() QueryInterface(REFIID riid, LPVOID *ppvObj) override
Definition: msutb.cpp:1888
STDMETHOD_(CCicLibMenuItem *, CreateMenuItem)()
Language Bar international item.
Definition: msutb.cpp:1282
CLBarInatItem(DWORD dwThreadId)
Definition: msutb.cpp:3766
DWORD m_dwThreadId
Definition: msutb.cpp:1285
STDMETHOD() GetText(BSTR *pbstr) override
Definition: msutb.cpp:3791
STDMETHOD() OnMenuSelect(INT nCommandId)
Definition: msutb.cpp:3840
STDMETHOD() InitMenu(ITfMenu *pMenu) override
Definition: msutb.cpp:3804
STDMETHOD() GetIcon(HICON *phIcon) override
Definition: msutb.cpp:3781
TF_LANGBARITEMINFO m_NewUIInfo
Definition: msutb.cpp:1213
virtual ~CLBarItemBase()
Definition: msutb.cpp:3472
HRESULT GetInfo(TF_LANGBARITEMINFO *pInfo)
Definition: msutb.cpp:3540
HRESULT AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie)
Definition: msutb.cpp:3479
HRESULT GetStatus(DWORD *pdwStatus)
Definition: msutb.cpp:3546
LONG m_cRefs
Definition: msutb.cpp:1215
HRESULT GetTooltipString(BSTR *pbstrToolTip)
Definition: msutb.cpp:3557
WCHAR m_szToolTipText[256]
Definition: msutb.cpp:1214
void InitNuiInfo(REFIID clsidService, REFGUID guidItem, DWORD dwStyle, DWORD ulSort, LPCWSTR Source)
Definition: msutb.cpp:3507
HRESULT UnadviseSink(DWORD dwCookie)
Definition: msutb.cpp:3493
HRESULT Show(BOOL fShow)
Definition: msutb.cpp:3552
DWORD m_dwItemStatus
Definition: msutb.cpp:1212
ITfLangBarItemSink * m_pLangBarItemSink
Definition: msutb.cpp:1216
HRESULT ShowInternal(BOOL bShow, BOOL bUpdate)
Definition: msutb.cpp:3522
STDMETHOD() OnClick(TfLBIClick click, POINT pt, LPCRECT prc) override
@unimplemented
Definition: msutb.cpp:3693
STDMETHOD() AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie) override
Definition: msutb.cpp:3749
STDMETHOD() QueryInterface(REFIID riid, void **ppvObject) override
Definition: msutb.cpp:3665
STDMETHOD() GetStatus(DWORD *pdwStatus) override
Definition: msutb.cpp:3734
STDMETHOD() GetInfo(TF_LANGBARITEMINFO *pInfo) override
Definition: msutb.cpp:3729
STDMETHOD() GetTooltipString(BSTR *pbstrToolTip) override
Definition: msutb.cpp:3744
STDMETHOD_(ULONG, Release)() override
STDMETHOD() InitMenu(ITfMenu *pMenu) override
Definition: msutb.cpp:3706
~CLBarItemButtonBase() override
Definition: msutb.cpp:3656
STDMETHOD() UnadviseSink(DWORD dwCookie) override
Definition: msutb.cpp:3757
STDMETHOD() Show(BOOL fShow) override
Definition: msutb.cpp:3739
STDMETHOD() GetIcon(HICON *phIcon) override
Definition: msutb.cpp:3716
STDMETHOD() GetText(BSTR *pbstr) override
Definition: msutb.cpp:3721
STDMETHOD_(ULONG, AddRef)() override
STDMETHOD() OnMenuSelect(UINT wID) override
Definition: msutb.cpp:3711
void SaveItem(CicRegKey *pRegKey, const LANGBARITEMSTATE *pState)
Definition: msutb.cpp:4039
BOOL SetDemoteLevel(REFCLSID rclsid, DWORD dwDemoteLevel)
Definition: msutb.cpp:3958
BOOL IsStartedIntentionally(REFCLSID rclsid)
Definition: msutb.cpp:3923
LANGBARITEMSTATE * AddItem(REFCLSID rclsid)
Definition: msutb.cpp:3931
UINT_PTR FindDemotingTimerId()
Definition: msutb.cpp:4118
LANGBARITEMSTATE * GetItemStateFromTimerId(UINT_PTR nTimerID)
Definition: msutb.cpp:3992
LANGBARITEMSTATE * FindItem(REFCLSID rclsid)
Definition: msutb.cpp:3981
void StartDemotingTimer(REFCLSID rclsid, BOOL bIntentional)
Definition: msutb.cpp:4077
STDMETHOD_(BOOL, OnDelayMsg)(UINT uMsg) override
CMainIconItem(CTrayIconWnd *pWnd)
@implemented
Definition: msutb.cpp:3160
BOOL Init(HWND hWnd)
@implemented
Definition: msutb.cpp:3166
DWORD m_dwUnknown26
Definition: msutb.cpp:991
CUTBMenuWnd * m_pMenuUI
Definition: msutb.cpp:992
void PostKey(BOOL bUp, WPARAM wParam, LPARAM lParam)
Definition: msutb.cpp:2804
CUTBMenuItem * InsertItem(CUTBMenuWnd *pMenuUI, INT nCommandId, INT nStringID)
Definition: msutb.cpp:2784
CModalMenu()
Definition: msutb.cpp:995
void CancelMenu()
Definition: msutb.cpp:2809
virtual ~CModalMenu()
Definition: msutb.cpp:996
virtual ~CTipbarAccItem()
Definition: msutb.cpp:860
STDMETHOD_(void, GetAccLocation)(LPRECT lprc)
Definition: msutb.cpp:878
STDMETHOD_(BSTR, GetAccName)()
Definition: msutb.cpp:862
STDMETHOD_(INT, GetAccRole)()
Definition: msutb.cpp:870
STDMETHOD_(BSTR, GetAccDefaultAction)()
Definition: msutb.cpp:882
STDMETHOD_(BOOL, DoAccDefaultAction)()
Definition: msutb.cpp:886
STDMETHOD_(BOOL, DoAccDefaultActionReal)()
Definition: msutb.cpp:890
STDMETHOD_(BSTR, GetAccValue)()
Definition: msutb.cpp:866
STDMETHOD_(INT, GetAccState)()
Definition: msutb.cpp:874
STDMETHOD() put_accValue(VARIANT varID, BSTR value)
Definition: msutb.cpp:2578
STDMETHOD() get_accDefaultAction(VARIANT varID, BSTR *action)
Definition: msutb.cpp:2415
virtual ~CTipbarAccessible()
Definition: msutb.cpp:2083
CTipbarAccessible(CTipbarAccItem *pItem)
Definition: msutb.cpp:2071
STDMETHOD() put_accName(VARIANT varID, BSTR name)
Definition: msutb.cpp:2573
INT GetIDOfItem(CTipbarAccItem *pTarget)
Definition: msutb.cpp:2152
STDMETHOD() get_accChildCount(LONG *pcountChildren)
Definition: msutb.cpp:2281
STDMETHOD() accDoDefaultAction(VARIANT varID)
Definition: msutb.cpp:2563
STDMETHOD_(ULONG, AddRef)()
HRESULT RemoveAccItem(CTipbarAccItem *pItem)
Definition: msutb.cpp:2127
STDMETHOD() get_accHelp(VARIANT varID, BSTR *help)
Definition: msutb.cpp:2369
STDMETHOD() get_accFocus(VARIANT *pvarID)
Definition: msutb.cpp:2387
STDMETHOD() get_accKeyboardShortcut(VARIANT varID, BSTR *shortcut)
Definition: msutb.cpp:2382
BOOL AddAccItem(CTipbarAccItem *pItem)
Definition: msutb.cpp:2122
STDMETHOD() get_accValue(VARIANT varID, BSTR *pszValue)
Definition: msutb.cpp:2317
CTipbarAccItem * AccItemFromID(INT iItem)
Definition: msutb.cpp:2145
void NotifyWinEvent(DWORD event, CTipbarAccItem *pItem)
Definition: msutb.cpp:2175
void ClearAccItems()
Definition: msutb.cpp:2140
BOOL m_bInitialized
Definition: msutb.cpp:775
STDMETHOD() get_accParent(IDispatch **ppdispParent)
Definition: msutb.cpp:2276
STDMETHOD() get_accState(VARIANT varID, VARIANT *state)
Definition: msutb.cpp:2355
STDMETHOD() GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: msutb.cpp:2226
STDMETHOD() Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: msutb.cpp:2255
STDMETHOD() accLocation(LONG *left, LONG *top, LONG *width, LONG *height, VARIANT varID)
Definition: msutb.cpp:2455
STDMETHOD() accSelect(LONG flagsSelect, VARIANT varID)
Definition: msutb.cpp:2435
STDMETHOD() get_accDescription(VARIANT varID, BSTR *description)
Definition: msutb.cpp:2332
STDMETHOD() accNavigate(LONG dir, VARIANT varStart, VARIANT *pvarEnd)
Definition: msutb.cpp:2479
STDMETHOD() GetTypeInfoCount(UINT *pctinfo)
Definition: msutb.cpp:2218
void SetWindow(HWND hWnd)
Definition: msutb.cpp:2184
STDMETHOD() QueryInterface(REFIID riid, void **ppvObject)
Definition: msutb.cpp:2189
IAccessible * m_pStdAccessible
Definition: msutb.cpp:773
STDMETHOD() get_accRole(VARIANT varID, VARIANT *role)
Definition: msutb.cpp:2341
STDMETHOD() get_accSelection(VARIANT *pvarID)
Definition: msutb.cpp:2395
STDMETHOD_(ULONG, Release)()
LONG_PTR CreateRefToAccObj(WPARAM wParam)
Definition: msutb.cpp:2162
STDMETHOD() get_accName(VARIANT varID, BSTR *pszName)
Definition: msutb.cpp:2302
STDMETHOD() GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: msutb.cpp:2243
ITypeInfo * m_pTypeInfo
Definition: msutb.cpp:774
CicArray< CTipbarAccItem * > m_AccItems
Definition: msutb.cpp:776
STDMETHOD() get_accChild(VARIANT varChildID, IDispatch **ppdispChild)
Definition: msutb.cpp:2292
STDMETHOD() accHitTest(LONG left, LONG top, VARIANT *pvarID)
Definition: msutb.cpp:2528
HRESULT Initialize()
Definition: msutb.cpp:2099
STDMETHOD() get_accHelpTopic(BSTR *helpfile, VARIANT varID, LONG *pidTopic)
Definition: msutb.cpp:2374
BOOL DoDefaultActionReal(INT nID)
Definition: msutb.cpp:2167
HRESULT EnsureCoInit()
Definition: msutb.cpp:906
BOOL m_bInDebugMenu
Definition: msutb.cpp:1067
CTipbarGripper(CTipbarWnd *pTipbarWnd, LPCRECT prc, DWORD style)
Definition: msutb.cpp:3871
CTipbarWnd * m_pTipbarWnd
Definition: msutb.cpp:1066
STDMETHOD_(void, OnRButtonUp)(LONG x
void AddRemoveMeToUI(BOOL bFlag)
Definition: msutb.cpp:6135
STDMETHOD() OnUnknown46(CUIFWindow *pWindow)
Definition: msutb.cpp:1412
DWORD m_dwCookie
Definition: msutb.cpp:1368
STDMETHOD() OnUpdate(DWORD dwDirty)
Definition: msutb.cpp:6238
void StartDemotingTimer(BOOL bStarted)
@unimplemented
Definition: msutb.cpp:6171
DWORD m_dwDirty
Definition: msutb.cpp:1376
STDMETHOD_(void, OnUnknown59)()
Definition: msutb.cpp:1425
TF_LANGBARITEMINFO m_ItemInfo
Definition: msutb.cpp:1369
CTipbarItem(CTipbarThread *pThread, ITfLangBarItem *pLangBarItem, TF_LANGBARITEMINFO *pItemInfo, DWORD dwUnknown16)
Definition: msutb.cpp:6059
DWORD m_dwUnknown18[2]
Definition: msutb.cpp:1374
STDMETHOD() OnUnknown42()
Definition: msutb.cpp:1406
ITfLangBarItem * m_pLangBarItem
Definition: msutb.cpp:1373
void ClearConnections()
Definition: msutb.cpp:6160
BOOL IsConnected()
Definition: msutb.cpp:6154
STDMETHOD() OnUnknown52()
Definition: msutb.cpp:1418
DWORD m_dwUnknown19[4]
Definition: msutb.cpp:1377
STDMETHOD() OnUnknown40()
Definition: msutb.cpp:1404
STDMETHOD_(BOOL, DoAccDefaultAction)() override
STDMETHOD_(BSTR, GetAccName)() override
STDMETHOD() OnUnknown50()
Definition: msutb.cpp:1416
void _RemovedToUI()
Definition: msutb.cpp:6123
STDMETHOD() OnUnknown57(LPRECT prc)
Definition: msutb.cpp:1423
STDMETHOD() OnUnknown48()
Definition: msutb.cpp:1414
DWORD dwStatus
Definition: msutb.cpp:1410
STDMETHOD() OnUnknown63()
Definition: msutb.cpp:1429
STDMETHOD_(LPCWSTR, OnUnknown55)()
Definition: msutb.cpp:1420
STDMETHOD() OnUnknown58()
Definition: msutb.cpp:1424
DWORD m_dwUnknown17
Definition: msutb.cpp:1371
STDMETHOD() OnUnknown56()
Definition: msutb.cpp:1421
CTipbarThread * m_pTipbarThread
Definition: msutb.cpp:1372
void _AddedToUI()
Definition: msutb.cpp:6089
~CTipbarItem() override
Definition: msutb.cpp:6077
STDMETHOD_(void, OnUnknown60)()
Definition: msutb.cpp:1426
DWORD m_dwUnknown16
Definition: msutb.cpp:1370
DWORD m_dwItemFlags
Definition: msutb.cpp:1375
STDMETHOD() OnUnknown49()
Definition: msutb.cpp:1415
STDMETHOD_(void, GetAccLocation)(LPRECT prc) override
STDMETHOD_(void, OnUnknown62)(HWND)
Definition: msutb.cpp:1428
STDMETHOD() OnUnknown43()
Definition: msutb.cpp:1407
STDMETHOD_(LPCWSTR, GetToolTip)()
STDMETHOD_(void, OnUnknown61)(HWND)
Definition: msutb.cpp:1427
STDMETHOD() OnUnknown51()
Definition: msutb.cpp:1417
STDMETHOD() OnUnknown47(CUIFWindow *pWindow)
Definition: msutb.cpp:1413
STDMETHOD() OnUnknown41()
Definition: msutb.cpp:1405
STDMETHOD() OnUnknown44()
Definition: msutb.cpp:1409
void MyClientToScreen(LPRECT prc)
Definition: msutb.cpp:1399
void MyClientToScreen(LPPOINT ppt, LPRECT prc)
Definition: msutb.cpp:6262
STDMETHOD() OnUnknown53(BSTR bstr)
Definition: msutb.cpp:1419
CTipbarThread(CTipbarWnd *pTipbarWnd)
Definition: msutb.cpp:5735
HRESULT Init(DWORD dwThreadId)
Definition: msutb.cpp:5760
DWORD m_dwThreadId
Definition: msutb.cpp:1309
CTipbarItem * GetItem(REFCLSID rclsid)
Definition: msutb.cpp:5878
void AddUIObjs()
Definition: msutb.cpp:5846
DWORD m_dwFlags2
Definition: msutb.cpp:1311
CTipbarWnd * m_pTipbarWnd
Definition: msutb.cpp:1304
ITfLangBarItemMgr * m_pLangBarItemMgr
Definition: msutb.cpp:1305
void MyMoveWnd(LONG xDelta, LONG yDelta)
Definition: msutb.cpp:6007
virtual ~CTipbarThread()
Definition: msutb.cpp:5743
LONG _Release()
Definition: msutb.cpp:5973
DWORD IsDirtyItem()
Definition: msutb.cpp:5942
void GetTextSize(BSTR bstr, LPSIZE pSize)
Definition: msutb.cpp:5889
void RemoveAllSeparators()
Definition: msutb.cpp:5831
HRESULT _UnadviseItemsSink()
Definition: msutb.cpp:5983
BOOL IsFocusThread()
Definition: msutb.cpp:5954
HRESULT InitItemList()
@unimplemented
Definition: msutb.cpp:5773
void LocateItems()
@unimplemented
Definition: msutb.cpp:5969
void AddAllSeparators()
Definition: msutb.cpp:5821
HRESULT CallOnUpdateHandler()
@unimplemented
Definition: msutb.cpp:1355
BOOL SetFocus(CTipbarBalloonItem *pTarget)
@unimplemented
Definition: msutb.cpp:1349
HRESULT _UninitItemList(BOOL bUnAdvise)
Definition: msutb.cpp:5778
LONG _AddRef()
Definition: msutb.cpp:1345
CicArray< CUIFObject * > m_Separators
Definition: msutb.cpp:1307
DWORD m_dwFlags1
Definition: msutb.cpp:1310
DWORD m_dwUnknown34
Definition: msutb.cpp:1315
LONG m_cRefs
Definition: msutb.cpp:1316
CicArray< CTipbarItem * > m_UIObjects
Definition: msutb.cpp:1306
void RemoveUIObjs()
Definition: msutb.cpp:5865
DWORD m_dwUnknown32
Definition: msutb.cpp:1308
BOOL IsVertical()
Definition: msutb.cpp:5961
DWORD m_dwFlags3
Definition: msutb.cpp:1314
STDMETHOD_(ULONG, AddRef)()
~CTipbarWnd() override
Definition: msutb.cpp:4194
CUIFWindow * GetWindow()
Definition: msutb.cpp:1516
HFONT CreateVerticalFont()
Definition: msutb.cpp:4612
CTipbarThread * _FindThread(DWORD dwThreadId)
Definition: msutb.cpp:5000
void UpdateVerticalFont()
Definition: msutb.cpp:4643
CTipbarThread * m_pThread
Definition: msutb.cpp:1464
STDMETHOD() OnThreadItemChange(DWORD dwThreadId) override
Definition: msutb.cpp:5202
LONG m_X
Definition: msutb.cpp:1490
void StartModalInput(ITfLangBarEventSink *pSink, DWORD dwThreadId)
Definition: msutb.cpp:4930
HFONT m_hMarlettFont
Definition: msutb.cpp:1481
BOOL CheckExcludeCaptionButtonMode(LPRECT prc1, LPCRECT prc2)
Definition: msutb.cpp:4600
STDMETHOD_(void, UpdateUI)(LPCRECT prc) override
INT GetTipbarHeight()
Definition: msutb.cpp:4454
STDMETHOD_(HRESULT, OnGetObject)(HWND hWnd
MARGINS m_Margins
Definition: msutb.cpp:1496
WPARAM wParam
Definition: msutb.cpp:1631
BOOL IsInItemChangeOrDirty(CTipbarThread *pTarget)
Definition: msutb.cpp:4373
void SetAlpha(BYTE bAlpha, BOOL bFlag)
@unimplemented
Definition: msutb.cpp:4756
void MoveToTray()
@unimplemented
Definition: msutb.cpp:4722
void AdjustPosOnDisplayChange()
Definition: msutb.cpp:4495
STDMETHOD_(DWORD, GetWndStyle)() override
INT m_nID
Definition: msutb.cpp:1495
STDMETHOD_(void, OnTimer)(WPARAM wParam) override
friend class CTipbarThread
Definition: msutb.cpp:1504
void ClearLBItemList()
Definition: msutb.cpp:4605
HRESULT AttachFocusThread()
Definition: msutb.cpp:5068
void OnTerminateToolbar()
Definition: msutb.cpp:5552
LONG m_ButtonWidth
Definition: msutb.cpp:1474
friend class CUTBContextMenu
Definition: msutb.cpp:1502
void InitHighContrast()
Definition: msutb.cpp:4254
STDMETHOD_(void, OnThemeChanged)(HWND hWnd
STDMETHOD() OnModalInput(DWORD dwThreadId, UINT uMsg, WPARAM wParam, LPARAM lParam) override
Definition: msutb.cpp:5239
BOOL SetLangBand(BOOL bDeskBand, BOOL bFlag2)
Definition: msutb.cpp:4760
HKL GetFocusKeyboardLayout()
Definition: msutb.cpp:4685
CTipbarAccessible * m_pTipbarAccessible
Definition: msutb.cpp:1494
STDMETHOD() GetItemFloatingRect(DWORD dwThreadId, REFGUID rguid, RECT *prc) override
Definition: msutb.cpp:5295
CModalMenu * m_pModalMenu
Definition: msutb.cpp:1463
BOOL StartDoAccDefaultActionTimer(CTipbarItem *pTarget)
Definition: msutb.cpp:4917
void EnsureFocusThread()
Definition: msutb.cpp:5031
BOOL IsHKLToSkipRedrawOnNoItem()
Definition: msutb.cpp:4367
INT INT nWidth
Definition: msutb.cpp:1625
friend class CTipbarGripper
Definition: msutb.cpp:1503
DWORD m_dwUnknown23_5[4]
Definition: msutb.cpp:1497
void StopModalInput(DWORD dwThreadId)
Definition: msutb.cpp:4943
HRESULT OnThreadTerminateInternal(DWORD dwThreadId)
Definition: msutb.cpp:5182
void ShowOverScreenSizeBalloon()
@unimplemented
Definition: msutb.cpp:4663
LONG m_cRefs
Definition: msutb.cpp:1501
INT GetCtrlButtonWidth()
@unimplemented
Definition: msutb.cpp:4426
STDMETHOD_(LRESULT, OnShowWindow)(HWND hWnd
void DestroyWnd()
Definition: msutb.cpp:4679
LONG m_CY
Definition: msutb.cpp:1493
HRESULT SetFocusThread(CTipbarThread *pFocusThread)
Definition: msutb.cpp:5049
friend VOID WINAPI ClosePopupTipbar(VOID)
Definition: msutb.cpp:6377
CTipbarAccItem * GetAccItem()
Definition: msutb.cpp:1521
void LocateCtrlButtons()
@unimplemented
Definition: msutb.cpp:4491
friend LONG MyWaitForInputIdle(DWORD dwThreadId, DWORD dwMilliseconds)
Definition: msutb.cpp:4956
STDMETHOD_(void, OnSysColorChange)() override
UINT uMsg
Definition: msutb.cpp:1632
void StartBackToAlphaTimer()
Definition: msutb.cpp:4911
void DestroyOverScreenSizeBalloon()
Definition: msutb.cpp:4668
STDMETHOD_(ULONG, Release)()
void TerminateAllThreads(BOOL bFlag)
Definition: msutb.cpp:5108
CUIFWndFrame * m_pWndFrame
Definition: msutb.cpp:1467
STDMETHOD_(void, GetAccLocation)(LPRECT lprc) override
STDMETHOD() QueryInterface(REFIID riid, void **ppvObj)
Definition: msutb.cpp:5135
CicArray< CTipbarThread * > m_Threads
Definition: msutb.cpp:1470
void ShowContextMenu(POINT pt, LPCRECT prc, BOOL bFlag)
Definition: msutb.cpp:4870
void InitMetrics()
Definition: msutb.cpp:4266
BOOL IsFullScreenWindow(HWND hWnd)
Definition: msutb.cpp:4348
DWORD m_dwUnknown20
Definition: msutb.cpp:1466
STDMETHOD_(LRESULT, OnWindowPosChanged)(HWND hWnd
INT m_cxSmallIcon
Definition: msutb.cpp:1477
ITfLangBarMgr_P * m_pLangBarMgr
Definition: msutb.cpp:1483
void AddThreadToThreadCreatingList(CTipbarThread *pThread)
Definition: msutb.cpp:4380
CTipbarCtrlButtonHolder * m_pTipbarCtrlButtonHolder
Definition: msutb.cpp:1485
CUIFWindow * m_pBalloon
Definition: msutb.cpp:1487
void UnInit()
Definition: msutb.cpp:4323
INT m_cyDlgFrameX2
Definition: msutb.cpp:1480
CTipbarThread * _CreateThread(DWORD dwThreadId)
Definition: msutb.cpp:4971
CicArray< CTipbarThread * > m_ThreadCreatingList
Definition: msutb.cpp:1471
void MyClientToScreen(LPPOINT lpPoint, LPRECT prc)
Definition: msutb.cpp:4730
BOOL KillTimer(UINT_PTR uIDEvent)
Definition: msutb.cpp:4714
DWORD m_dwUnknown23
Definition: msutb.cpp:1484
DWORD m_dwSinkCookie
Definition: msutb.cpp:1462
DWORD m_dwUnknown23_1[8]
Definition: msutb.cpp:1486
STDMETHOD_(void, OnDestroy)(HWND hWnd) override
DWORD m_dwTipbarWndFlags
Definition: msutb.cpp:1473
void RemoveThredFromThreadCreatingList(CTipbarThread *pTarget)
Definition: msutb.cpp:4385
CLangBarItemList m_LangBarItemList
Definition: msutb.cpp:1465
CTipbarCoInitialize m_coInit
Definition: msutb.cpp:1461
INT AdjustDeskBandSize(BOOL bFlag)
@unimplemented
Definition: msutb.cpp:4485
INT m_cySmallIcon
Definition: msutb.cpp:1478
UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT uElapse)
Definition: msutb.cpp:4707
STDMETHOD_(BOOL, OnEraseBkGnd)(HWND hWnd
STDMETHOD() OnSetFocus(DWORD dwThreadId) override
@unimplemented
Definition: msutb.cpp:5162
void SetVertical(BOOL bVertical)
Definition: msutb.cpp:4515
CTipbarThread * m_pUnknownThread
Definition: msutb.cpp:1498
DWORD m_dwShowType
Definition: msutb.cpp:1475
void SetMoveRect(INT X, INT Y, INT nWidth, INT nHeight)
Definition: msutb.cpp:4792
CTipbarThread * m_pFocusThread
Definition: msutb.cpp:1469
void RestoreLastFocus(DWORD *pdwThreadId, BOOL fPrev)
Definition: msutb.cpp:5083
CDeskBand * m_pDeskBand
Definition: msutb.cpp:1499
STDMETHOD_(LRESULT, OnWindowPosChanging)(HWND hWnd
HRESULT OnThreadItemChangeInternal(DWORD dwThreadId)
@unimplemented
Definition: msutb.cpp:1597
void SetShowText(BOOL bShow)
Definition: msutb.cpp:4838
void KillOnTheadItemChangeTimer()
Definition: msutb.cpp:4693
void CleanUpThreadPointer(CTipbarThread *pThread, BOOL bRemove)
Definition: msutb.cpp:5089
void SetShowTrayIcon(BOOL bShow)
Definition: msutb.cpp:4851
void CancelMenu()
Definition: msutb.cpp:4584
STDMETHOD_(BSTR, GetAccName)() override
void MoveToStub(BOOL bFlag)
Definition: msutb.cpp:4392
LONG m_CX
Definition: msutb.cpp:1492
CTipbarGripper * m_pTipbarGripper
Definition: msutb.cpp:1468
DWORD m_dwUnknown21
Definition: msutb.cpp:1476
LONG x
Definition: msutb.cpp:1642
LONG m_bInCallOn
Definition: msutb.cpp:1489
STDMETHOD() OnLangBarUpdate(TfLBIClick click, BOOL bFlag) override
@unimplemented
Definition: msutb.cpp:5320
void InitThemeMargins()
Definition: msutb.cpp:4288
LONG m_Y
Definition: msutb.cpp:1491
void UpdatePosFlags()
Definition: msutb.cpp:4554
STDMETHOD_(LRESULT, OnDisplayChange)(HWND hWnd
void RestoreFromStub()
Definition: msutb.cpp:4418
void SavePosition()
Definition: msutb.cpp:4742
friend BOOL GetTipbarInternal(HWND hWnd, DWORD dwFlags, CDeskBand *pDeskBand)
Definition: msutb.cpp:6273
CShellWndThread m_ShellWndThread
Definition: msutb.cpp:1500
DWORD m_dwChangingThreadId
Definition: msutb.cpp:1488
STDMETHOD() ShowFloating(DWORD dwFlags) override
@unimplemented
Definition: msutb.cpp:5290
CTipbarWnd(DWORD style)
@unimplemented
Definition: msutb.cpp:4147
STDMETHOD() OnThreadTerminate(DWORD dwThreadId) override
Definition: msutb.cpp:5167
BOOL AutoAdjustDeskBandSize()
Definition: msutb.cpp:4465
STDMETHOD_(LRESULT, OnSettingChange)(HWND hWnd
DWORD m_dwAlphaValue
Definition: msutb.cpp:1472
void Init(BOOL bChild, CDeskBand *pDeskBand)
@unimplemented
Definition: msutb.cpp:4207
HFONT m_hTextFont
Definition: msutb.cpp:1482
STDMETHOD_(void, OnCreate)(HWND hWnd) override
INT m_cxDlgFrameX2
Definition: msutb.cpp:1479
INT GetGripperWidth()
Definition: msutb.cpp:4431
CTrayIconWnd * m_pTrayIconWnd
Definition: msutb.cpp:1160
BOOL m_bIconAdded
Definition: msutb.cpp:1159
POINT m_ptCursor
Definition: msutb.cpp:1164
CTrayIconItem(CTrayIconWnd *pTrayIconWnd)
Definition: msutb.cpp:3053
UINT m_uCallbackMessage
Definition: msutb.cpp:1156
STDMETHOD_(BOOL, OnDelayMsg)(UINT uMsg)
Definition: msutb.cpp:1177
DWORD m_dwIconAddOrModify
Definition: msutb.cpp:1158
virtual ~CTrayIconItem()
Definition: msutb.cpp:1169
UINT m_uNotifyIconID
Definition: msutb.cpp:1157
BOOL _Init(HWND hWnd, UINT uCallbackMessage, UINT uNotifyIconID, const GUID &rguid)
Definition: msutb.cpp:3060
BOOL UpdateMenuRectPoint()
Definition: msutb.cpp:3110
RECT m_rcMenu
Definition: msutb.cpp:1163
LPARAM lParam
Definition: msutb.cpp:1176
LPCWSTR pszTip
Definition: msutb.cpp:1175
BOOL RemoveIcon()
Definition: msutb.cpp:3073
DWORD m_dwUnknown25
Definition: msutb.cpp:1161
HWND m_hNotifyWnd
Definition: msutb.cpp:1111
static BOOL RegisterClass()
Definition: msutb.cpp:3314
static LRESULT CALLBACK _WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: msutb.cpp:3427
HWND m_hWnd
Definition: msutb.cpp:1108
CicArray< CButtonIconItem * > m_Items
Definition: msutb.cpp:1117
UINT m_uCallbackMessage
Definition: msutb.cpp:1106
HWND m_hwndProgman
Definition: msutb.cpp:1114
void RemoveUnusedIcons(int unknown)
@unimplemented
Definition: msutb.cpp:3354
static CTrayIconWnd * GetThis(HWND hWnd)
Definition: msutb.cpp:3413
BOOL SetMainIcon(HKL hKL)
Definition: msutb.cpp:3382
BOOL m_bBusy
Definition: msutb.cpp:1105
UINT m_uCallbackMsg
Definition: msutb.cpp:1118
BOOL SetIcon(REFGUID rguid, DWORD dwUnknown24, HICON hIcon, LPCWSTR psz)
Definition: msutb.cpp:3359
void CallOnDelayMsg()
Definition: msutb.cpp:3212
void RemoveAllIcon(DWORD dwFlags)
Definition: msutb.cpp:3326
BOOL FindTrayEtc()
Definition: msutb.cpp:3271
HWND CreateWnd()
Definition: msutb.cpp:3225
static void SetThis(HWND hWnd, LPCREATESTRUCT pCS)
Definition: msutb.cpp:3418
UINT m_uMsg
Definition: msutb.cpp:1107
void DestroyWnd()
Definition: msutb.cpp:3241
DWORD m_dwUnknown20
Definition: msutb.cpp:1104
DWORD m_dwUnknown22
Definition: msutb.cpp:1113
UINT m_uNotifyIconID
Definition: msutb.cpp:1119
BOOL OnIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
@implemented
Definition: msutb.cpp:3294
DWORD m_dwUnknown21[2]
Definition: msutb.cpp:1109
DWORD m_dwTrayWndThreadId
Definition: msutb.cpp:1112
CMainIconItem * m_pMainIconItem
Definition: msutb.cpp:1116
CButtonIconItem * FindIconItem(REFGUID rguid)
Definition: msutb.cpp:3260
HWND GetNotifyWnd()
Definition: msutb.cpp:3286
static BOOL CALLBACK EnumChildWndProc(HWND hWnd, LPARAM lParam)
Definition: msutb.cpp:3247
DWORD m_dwProgmanThreadId
Definition: msutb.cpp:1115
HWND m_hTrayWnd
Definition: msutb.cpp:1110
HBITMAP m_hbmMask
Definition: cicuif.h:744
HBITMAP m_hbmColor
Definition: cicuif.h:743
LPWSTR m_pszMenuItemLeft
Definition: cicuif.h:737
void Check(BOOL bChecked)
Definition: cicuif.h:767
CUIFMenu * m_pSubMenu
Definition: cicuif.h:750
void Gray(BOOL bGrayed)
Definition: cicuif.h:768
BOOL Init(UINT nMenuItemID, LPCWSTR pszText)
Definition: cicuif.cpp:4911
void ShowSubPopup()
Definition: cicuif.cpp:5274
UINT ShowModalPopup(CUIFWindow *pWindow, LPCRECT prc, BOOL bFlag)
Definition: cicuif.cpp:4820
BOOL InsertItem(CUIFMenuItem *pItem)
Definition: cicuif.cpp:4635
void PostKey(BOOL bUp, WPARAM wParam, LPARAM lParam)
Definition: cicuif.cpp:4763
void CancelMenu()
Definition: cicuif.cpp:4384
BOOL InsertSeparator()
Definition: cicuif.cpp:4644
DWORD m_style
Definition: cicuif.h:188
HFONT m_hFont
Definition: cicuif.h:192
LPCRECT prc
Definition: cicuif.h:230
LONG y
Definition: cicuif.h:217
STDMETHOD() GetThemeFont(HDC hDC, int iStateId, int iPropId, LOGFONTW *pFont)
Definition: cicuif.cpp:186
HRESULT CloseThemeData()
Definition: cicuif.cpp:84
LPCWSTR m_pszClassList
Definition: cicuif.h:90
STDMETHOD() GetThemeMargins(HDC hDC, int iStateId, int iPropId, LPRECT prc, MARGINS *pMargins)
Definition: cicuif.cpp:178
HRESULT InternalOpenThemeData(HWND hWnd)
Definition: cicuif.cpp:66
INT m_iStateId
Definition: cicuif.h:92
INT m_iPartId
Definition: cicuif.h:91
STDMETHOD() GetThemePartSize(HDC hDC, int iStateId, LPRECT prc, THEMESIZE eSize, SIZE *psz)
Definition: cicuif.cpp:154
HTHEME m_hTheme
Definition: cicuif.h:93
HRESULT EnsureThemeData(HWND hWnd)
Definition: cicuif.cpp:77
BOOL m_bShowToolTip
Definition: cicuif.h:615
UINT WPARAM LPARAM lParam
Definition: cicuif.h:590
INT m_nWidth
Definition: cicuif.h:516
INT m_nHeight
Definition: cicuif.h:515
INT m_nTop
Definition: cicuif.h:514
CUIFToolTip * m_pToolTip
Definition: cicuif.h:524
INT INT INT nHeight
Definition: cicuif.h:563
BOOL GetWorkArea(LPCRECT prcWnd, LPRECT prcWorkArea)
Definition: cicuif.cpp:2013
INT m_nLeft
Definition: cicuif.h:513
HWND m_hWnd
Definition: cicuif.h:518
DWORD dwFlags
Definition: cicuif.h:564
void GetFrameSize(LPSIZE pSize)
Definition: cicuif.cpp:3649
STDMETHOD_(BOOL, DoModal)(HWND hDlg) override
static BOOL s_bIsDlgShown
Definition: msutb.cpp:684
STDMETHOD_(BOOL, IsDlgShown)() override
STDMETHOD_(void, SetDlgShown)(BOOL bShown) override
CUTBContextMenu(CTipbarWnd *pTipbarWnd)
Definition: msutb.cpp:2819
CUTBMenuWnd * CreateMenuUI(BOOL bFlag)
@unimplemented
Definition: msutb.cpp:2832
CTipbarThread * m_pTipbarThread
Definition: msutb.cpp:1011
UINT ShowPopup(CUIFWindow *pWindow, POINT pt, LPCRECT prc, BOOL bFlag)
Definition: msutb.cpp:2929
BOOL Init()
@implemented
Definition: msutb.cpp:2825
BOOL SelectMenuItem(UINT nCommandId)
@unimplemented
Definition: msutb.cpp:2957
CTipbarWnd * m_pTipbarWnd
Definition: msutb.cpp:1010
CUTBLBarMenu * m_pLBarMenu
Definition: msutb.cpp:1054
BOOL InsertToUI(CUTBMenuWnd *pMenuUI)
@unimplemented
Definition: msutb.cpp:3634
CUTBMenuWnd * m_pMenuUI
Definition: msutb.cpp:1035
CUTBLBarMenu(HINSTANCE hInst)
Definition: msutb.cpp:3570
STDMETHOD_(CCicLibMenuItem *, CreateMenuItem)() override
~CUTBLBarMenu() override
Definition: msutb.cpp:3575
INT ShowPopup(CUIFWindow *pWindow, POINT pt, LPCRECT prcExclude)
Definition: msutb.cpp:3609
CUTBMenuWnd * CreateMenuUI()
Definition: msutb.cpp:3588
STDMETHOD_(CCicLibMenu *, CreateSubMenu)() override
HINSTANCE m_hInst
Definition: msutb.cpp:1036
static INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: msutb.cpp:1714
WPARAM wParam
Definition: msutb.cpp:671
BOOL StartThread()
Definition: msutb.cpp:1674
LONG _Release()
Definition: msutb.cpp:1694
STDMETHOD_(BOOL, DoModal)(HWND hDlg)=0
static DWORD WINAPI s_ThreadProc(LPVOID pParam)
Definition: msutb.cpp:1669
static void SetThis(HWND hDlg, CUTBLangBarDlg *pThis)
Definition: msutb.cpp:1664
LPTSTR m_pszDialogName
Definition: msutb.cpp:655
WPARAM LPARAM lParam
Definition: msutb.cpp:671
STDMETHOD_(BOOL, IsDlgShown)()=0
STDMETHOD_(void, SetDlgShown)(BOOL bShown)=0
LONG m_cRefs
Definition: msutb.cpp:656
STDMETHOD_(BOOL, ThreadProc)()
virtual ~CUTBLangBarDlg()
Definition: msutb.cpp:660
static CUTBLangBarDlg * GetThis(HWND hDlg)
Definition: msutb.cpp:1659
STDMETHOD_(BOOL, DoAccDefaultActionReal)() override
CUTBMenuWnd * m_pMenuUI
Definition: msutb.cpp:966
STDMETHOD_(BSTR, GetAccDefaultAction)() override
CUTBMenuItem(CUTBMenuWnd *pMenuUI)
Definition: msutb.cpp:2714
STDMETHOD_(BOOL, DoAccDefaultAction)() override
CUIFMenuItem * GetMenuItem()
Definition: msutb.cpp:973
STDMETHOD_(BSTR, GetAccName)() override
STDMETHOD_(INT, GetAccRole)() override
STDMETHOD_(void, GetAccLocation)(LPRECT lprc) override
~CUTBMenuItem() override
Definition: msutb.cpp:2720
UINT uMsg
Definition: msutb.cpp:956
CTipbarAccessible * m_pAccessible
Definition: msutb.cpp:933
CTipbarAccItem * GetAccItem()
Definition: msutb.cpp:942
CTipbarCoInitialize m_coInit
Definition: msutb.cpp:932
STDMETHOD_(void, OnCreate)(HWND hWnd) override
STDMETHOD_(BOOL, Initialize)() override
BOOL StartDoAccDefaultActionTimer(CUTBMenuItem *pTarget)
Definition: msutb.cpp:2592
STDMETHOD_(BSTR, GetAccName)() override
STDMETHOD_(INT, GetAccRole)() override
STDMETHOD_(LRESULT, OnShowWindow)(HWND hWnd
STDMETHOD_(void, OnDestroy)(HWND hWnd) override
UINT m_nMenuWndID
Definition: msutb.cpp:934
STDMETHOD_(void, OnTimer)(WPARAM wParam) override
CUTBMenuWnd(HINSTANCE hInst, DWORD style, DWORD dwUnknown14)
Definition: msutb.cpp:2587
UINT WPARAM wParam
Definition: msutb.cpp:956
CUIFMenu * GetMenu()
Definition: msutb.cpp:946
static BOOL s_bIsDlgShown
Definition: msutb.cpp:701
STDMETHOD_(BOOL, ThreadProc)() override
STDMETHOD_(BOOL, DoModal)(HWND hDlg) override
STDMETHOD_(BOOL, IsDlgShown)() override
STDMETHOD_(void, SetDlgShown)(BOOL bShown) override
void clear()
Definition: cicarray.h:36
ptrdiff_t Find(const T_ITEM &item) const
Definition: cicarray.h:69
void Remove(size_t iItem, size_t cRemove=1)
Definition: cicarray.cpp:57
size_t size() const
Definition: cicarray.h:34
BOOL Add(const T_ITEM &item)
Definition: cicarray.h:60
LANGBARITEMSTATE * Append(size_t cGrow)
Definition: cicarray.h:52
LSTATUS DeleteValue(LPCTSTR pszValueName)
Definition: cicreg.h:98
LSTATUS SetDword(LPCTSTR pszValueName, DWORD dwValue)
Definition: cicreg.h:67
LSTATUS Open(HKEY hKey, LPCTSTR lpSubKey, REGSAM samDesired=KEY_READ)
Definition: cicreg.h:51
LSTATUS EnumValue(DWORD dwIndex, LPTSTR lpValueName, DWORD cchValueName)
Definition: cicreg.h:108
LSTATUS RecurseDeleteKey(LPCTSTR lpSubKey)
Definition: cicreg.h:113
LSTATUS Create(HKEY hKey, LPCTSTR lpSubKey)
Definition: cicreg.h:56
LSTATUS QueryDword(LPCTSTR pszValueName, LPDWORD pdwValue)
Definition: cicreg.h:61
_Must_inspect_result_ NTSTATUS Init(__in CfxDeviceBase *Device)
static int OnCommand(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: clipbrd.c:202
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
TfLBIClick
Definition: ctfutb.idl:86
@ TF_LBI_CLK_LEFT
Definition: ctfutb.idl:88
@ TF_LBI_CLK_RIGHT
Definition: ctfutb.idl:87
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
DLGPROC DlgProc
Definition: desk.c:122
#define LF_FACESIZE
Definition: dimm.idl:39
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDS_LANGUAGE
Definition: resource.h:52
static HBITMAP hBitmap
Definition: timezone.c:26
#define APIENTRY
Definition: api.h:79
#define Y(I)
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1605
#define CloseHandle
Definition: compat.h:739
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define CP_ACP
Definition: compat.h:109
HANDLE HWND
Definition: compat.h:19
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
@ VT_I4
Definition: compat.h:2298
@ VT_EMPTY
Definition: compat.h:2295
#define lstrlenW
Definition: compat.h:750
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
Definition: ime.c:890
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
EXTERN_C HRESULT WINAPI TF_RunInputCPL(VOID)
Definition: utils.cpp:317
const WCHAR * action
Definition: action.c:7479
#define IDD_MINIMIZELANGBAR
Definition: resource.h:49
#define ID_CLOSELANGBAR
Definition: resource.h:37
#define ID_ADJUSTDESKBAND
Definition: resource.h:42
#define ID_VERTICAL
Definition: resource.h:41
#define ID_NOTRANS
Definition: resource.h:33
#define IDC_MINIMIZELANGBAR_CHECK
Definition: resource.h:52
#define IDS_LANGUAGEBUTTON
Definition: resource.h:19
#define IDS_MINIMIZE
Definition: resource.h:22
#define IDS_SETTINGS
Definition: resource.h:16
#define ID_EXTRAICONS
Definition: resource.h:38
#define IDS_LEFTCLICK
Definition: resource.h:30
#define IDD_MINIMIZELANGBARNOBAND
Definition: resource.h:48
#define ID_LABELS
Definition: resource.h:34
#define IDS_TRANSPARENCY
Definition: resource.h:20
#define IDD_CLOSELANGBAR
Definition: resource.h:47
#define IDS_TEXTLABELS
Definition: resource.h:21
#define ID_RESTORELANGBAR
Definition: resource.h:40
#define IDS_ADJUSTLANGBAND
Definition: resource.h:29
#define ID_NOLABELS
Definition: resource.h:35
#define ID_TRANS
Definition: resource.h:32
#define IDD_CLOSELANGBARNOBAND
Definition: resource.h:46
#define ID_NOEXTRAICONS
Definition: resource.h:39
#define IDS_RESTORELANGBAR
Definition: resource.h:17
#define IDS_LANGUAGEBAR
Definition: resource.h:25
#define IDC_CLOSELANGBAR_CHECK
Definition: resource.h:51
#define ID_DESKBAND
Definition: resource.h:36
#define IDS_RESTORELANGBAR2
Definition: resource.h:26
#define IDS_CLOSELANGBAR
Definition: resource.h:23
#define IDS_MENUWND
Definition: resource.h:27
#define IDS_EXTRAICONS
Definition: resource.h:24
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
HRESULT WINAPI CreateStdAccessibleObject(HWND hwnd, LONG idObject, REFIID riidInterface, void **ppvObject)
Definition: main.c:154
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:531
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
Definition: typelib.c:458
static void CharSet(RTF_Info *info)
Definition: reader.c:2420
UINT_PTR WINAPI SHAppBarMessage(DWORD msg, PAPPBARDATA data)
Definition: appbar.c:65
HRESULT WINAPI GetThemeTextExtent(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, const RECT *pBoundingRect, RECT *pExtentRect)
Definition: draw.c:1809
int WINAPI GetThemeSysSize(HTHEME hTheme, int iSizeID)
Definition: metric.c:154
HRESULT WINAPI GetThemeFont(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, LOGFONTW *pFont)
Definition: property.c:108
#define pt(x, y)
Definition: drawing.c:79
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:57
HINSTANCE hInst
Definition: dxdiag.c:13
DWORD dwThreadId
Definition: fdebug.c:31
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FxIoTarget * pTarget
Definition: fxdeviceapi.cpp:97
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
GLsizeiptr size
Definition: glext.h:5919
struct _cl_event * event
Definition: glext.h:7739
GLdouble GLdouble GLdouble GLdouble top
Definition: glext.h:10859
GLint left
Definition: glext.h:7726
#define X(b, s)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
#define _tcstoul
Definition: tchar.h:595
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT accLocation([out] long *left, [out] long *top, [out] long *width, [out] long *height, [in, optional] VARIANT varID)
HRESULT RegisterClassImplCategories([in] REFCLSID rclsid, [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[])
HRESULT UnRegisterClassImplCategories([in] REFCLSID rclsid, [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[])
HRESULT SetValue([in] TfClientId tid, [in] const VARIANT *pvarValue)
HRESULT GetValue([out] VARIANT *pvarValue)
HRESULT UnadviseItemsSink([in] ULONG ulCount, [in, size_is(ulCount)] DWORD *pdwCookie)
HRESULT OnUpdate([in] DWORD dwFlags)
HRESULT GetStatus([out] DWORD *pdwStatus)
HRESULT GetTooltipString([out] BSTR *pbstrToolTip)
HRESULT SetModalInput([in] ITfLangBarEventSink *pSink, [in] DWORD dwThreadId, [in] DWORD dwFlags)
HRESULT GetShowFloatingStatus([out] DWORD *pdwFlags)
HRESULT RestoreLastFocus([out] DWORD *dwThreadId, [in] BOOL fPrev)
HRESULT GetThreadLangBarItemMgr([in] DWORD dwThreadId, [out] ITfLangBarItemMgr **pplbie, [out] DWORD *pdwThreadid)
HRESULT UnAdviseEventSink([in] DWORD dwCookie)
HRESULT ShowFloating([in] DWORD dwFlags)
const DWORD TF_LBMENUF_SUBMENU
Definition: ctfutb.idl:431
HRESULT Invoke([in] PVOID pvInstance, [in] MEMBERID memid, [in] WORD wFlags, [in, out] DISPPARAMS *pDispParams, [out] VARIANT *pVarResult, [out] EXCEPINFO *pExcepInfo, [out] UINT *puArgErr)
HRESULT GetIDsOfNames([in, size_is(cNames)] LPOLESTR *rgszNames, [in] UINT cNames, [out, size_is(cNames)] MEMBERID *pMemId)
HRESULT GetTypeInfoOfGuid([in] REFGUID guid, [out] ITypeInfo **ppTinfo)
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
nsrefcnt Release()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define TEXT(s)
Definition: k32.h:26
LANGID WINAPI GetUserDefaultUILanguage(void)
Definition: lang.c:816
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1108
#define END_OBJECT_MAP()
Definition: atlcom.h:691
#define OBJECT_ENTRY(clsid, class)
Definition: atlcom.h:693
#define BEGIN_OBJECT_MAP(x)
Definition: atlcom.h:689
USHORT LANGID
Definition: mui.h:9
static IN DWORD IN LPVOID lpvReserved
#define error(str)
Definition: mkdosfs.c:1605
#define pch(ap)
Definition: match.c:418
EXTERN_C BOOL WINAPI TF_GetMlngHKL(_In_ INT iKL, _Out_opt_ HKL *phKL, _Out_opt_ LPWSTR pszDesc, _In_ INT cchDesc)
Definition: mlng.cpp:664
EXTERN_C INT WINAPI TF_GetMlngIconIndex(_In_ INT iKL)
Definition: mlng.cpp:640
EXTERN_C HICON WINAPI TF_InatExtractIcon(_In_ INT iKL)
Definition: mlng.cpp:629
EXTERN_C INT WINAPI TF_MlngInfoCount(VOID)
Definition: mlng.cpp:614
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static IAdviseSinkEx AdviseSink
Definition: htmldoc.c:5184
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:52
static ATOM item
Definition: dde.c:856
#define _Inout_opt_
Definition: ms_sal.h:379
#define _Out_
Definition: ms_sal.h:345
#define _In_
Definition: ms_sal.h:308
BOOL OnCreate(HWND hWnd)
Definition: msconfig.c:83
HICON hIcon
Definition: msconfig.c:44
HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr)
Definition: msctf.c:668
HRESULT WINAPI TF_InitMlngInfo(void)
Definition: msctf.c:704
REFCLSID clsid
Definition: msctf.c:82
HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm)
Definition: msctf.c:686
EXTERN_C HRESULT WINAPI TF_GetGlobalCompartment(_Out_ ITfCompartmentMgr **ppCompMgr)
EXTERN_C BOOL WINAPI TF_GetThreadFlags(_In_ DWORD dwThreadId, _Out_ LPDWORD pdwFlags1, _Out_ LPDWORD pdwFlags2, _Out_ LPDWORD pdwFlags3)
EXTERN_C HRESULT WINAPI TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat)
UINT_PTR HKL
Definition: msctf.idl:143
EXTERN_C LONG WINAPI TF_CheckThreadInputIdle(_In_ DWORD dwThreadId, _In_ DWORD dwMilliseconds)
EXTERN_C HRESULT WINAPI TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam)
EXTERN_C HICON WINAPI TF_GetLangIcon(_In_ LANGID LangID, _Out_ LPWSTR pszText, _In_ INT cchText)
EXTERN_C const CLSID CLSID_TF_CategoryMgr
Definition: msctf.idl:84
EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_OPENCLOSE
Definition: msctf.idl:92
EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD
Definition: msctf.idl:99
EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr
Definition: msctf.idl:85
EXTERN_C BOOL WINAPI TF_IsInMarshaling(_In_ DWORD dwThreadId)
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
UINT g_uTimerElapseSHOWWINDOW
Definition: msutb.cpp:68
EXTERN_C VOID TFUninitLib(VOID)
Definition: msutb.cpp:6472
UINT g_uTimeOutIntentional
Definition: msutb.cpp:51
POINT g_ptTipbar
Definition: msutb.cpp:54
HRESULT LangBarInsertMenu(_In_ ITfMenu *pMenu, _In_ UINT uId, _In_ LPCWSTR pszText, _In_ BOOL bChecked, _Inout_opt_ HICON hIcon)
Definition: msutb.cpp:307
BOOL g_bShowDebugMenu
Definition: msutb.cpp:46
BOOL g_bIntelliSense
Definition: msutb.cpp:48
DWORD g_dwOSInfo
Definition: msutb.cpp:32
EXTERN_C void __cxa_pure_virtual(void)
Definition: msutb.cpp:84
BOOL IsFELangId(LANGID LangID)
Definition: msutb.cpp:339
BOOL GethKLDesc(_In_ HKL hKL, _Out_ LPWSTR pszDesc, _In_ UINT cchDesc)
Definition: msutb.cpp:292
BOOL InitFromReg(void)
Definition: msutb.cpp:460
BOOL g_bShowShadow
Definition: msutb.cpp:56
UINT g_uTimerElapseENSUREFOCUS
Definition: msutb.cpp:72
EXTERN_C PCIC_LIBTHREAD WINAPI GetLibTls(VOID)
Definition: msutb.cpp:6324
DWORD g_dwMenuStyle
Definition: msutb.cpp:78
BOOL g_bShowMinimizedBalloon
Definition: msutb.cpp:53
UINT g_uTimerElapseSYSCOLORCHANGED
Definition: msutb.cpp:65
UINT g_uTimerElapseUPDATEUI
Definition: msutb.cpp:67
CIC_LIBTHREAD g_libTLS
Definition: msutb.cpp:38
UINT g_uTimeOutNonIntentional
Definition: msutb.cpp:50
BOOL IsSkipRedrawHKL(HKL hSkipKL)
Definition: msutb.cpp:109
BOOL CheckCloseMenuAvailable(void)
Definition: msutb.cpp:353
BOOL g_bEnableDeskBand
Definition: msutb.cpp:42
UINT g_wmTaskbarCreated
Definition: msutb.cpp:30
BOOL g_fPolicyEnableLanguagebarInFullscreen
Definition: msutb.cpp:76
CMsUtbModule gModule
Definition: msutb.cpp:93
UINT g_uTimerElapseONTHREADITEMCHANGE
Definition: msutb.cpp:62
BOOL g_fTaskbarTheme
Definition: msutb.cpp:57
void DoCloseLangbar(void)
Definition: msutb.cpp:251
UINT g_uTimerElapseSTUBEND
Definition: msutb.cpp:60
BOOL g_fVertical
Definition: msutb.cpp:58
BOOL CheckEAFonts(void)
Are there East-Asian vertical fonts?
Definition: msutb.cpp:402
UINT g_uTimerElapseTRAYWNDONDELAYMSG
Definition: msutb.cpp:70
LONG MyWaitForInputIdle(DWORD dwThreadId, DWORD dwMilliseconds)
Definition: msutb.cpp:4956
BOOL GetFontSig(HWND hWnd, HKL hKL)
Definition: msutb.cpp:138
UINT g_uTimerElapseDOACCDEFAULTACTION
Definition: msutb.cpp:71
UINT g_uTimerElapseSHOWDESKBAND
Definition: msutb.cpp:74
BOOL g_bNewLook
Definition: msutb.cpp:47
CRITICAL_SECTION g_cs
Definition: msutb.cpp:33
BOOL ProcessAttach(HINSTANCE hinstDLL)
@implemented
Definition: msutb.cpp:6478
HRESULT SetGlobalCompartmentDWORD(REFGUID rguid, DWORD dwValue)
Definition: msutb.cpp:228
UINT g_uTimerElapseSTUBSTART
Definition: msutb.cpp:59
struct LANGBARITEMSTATE * PLANGBARITEMSTATE
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: msutb.cpp:6444
void SetDeskBandToReg(BOOL bShow)
Definition: msutb.cpp:427
CTipbarWnd * g_pTipbarWnd
Definition: msutb.cpp:104
UINT g_uTimeOutMax
Definition: msutb.cpp:52
BOOL g_bShowTipbar
Definition: msutb.cpp:45
BOOL IsTransparecyAvailable(void)
@unimplemented
Definition: msutb.cpp:387
HRESULT APIENTRY MsUtbCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
@implemented
Definition: msutb.cpp:6452
void UninitSkipRedrawHKLArray(void)
Definition: msutb.cpp:188
BOOL g_bShowDeskBand
Definition: msutb.cpp:73
@ TIPBAR_HIGHCONTRAST
Definition: msutb.cpp:1443
@ TIPBAR_VERTICAL
Definition: msutb.cpp:1442
@ TIPBAR_CHILD
Definition: msutb.cpp:1441
@ TIPBAR_NODESKBAND
Definition: msutb.cpp:1447
@ TIPBAR_TOOLBARENDED
Definition: msutb.cpp:1448
@ TIPBAR_ATTACHED
Definition: msutb.cpp:1440
@ TIPBAR_UPDATING
Definition: msutb.cpp:1445
@ TIPBAR_LEFTFIT
Definition: msutb.cpp:1452
@ TIPBAR_RIGHTFIT
Definition: msutb.cpp:1451
@ TIPBAR_ENSURING
Definition: msutb.cpp:1446
@ TIPBAR_TRAYICON
Definition: msutb.cpp:1444
@ TIPBAR_TOPFIT
Definition: msutb.cpp:1449
@ TIPBAR_BOTTOMFIT
Definition: msutb.cpp:1450
BOOL g_bShowCloseMenu
Definition: msutb.cpp:49
UINT g_uACP
Definition: msutb.cpp:31
UINT g_uTimerElapseBACKTOALPHA
Definition: msutb.cpp:61
BOOL g_fInClosePopupTipbar
Definition: msutb.cpp:36
BOOL g_bWinLogon
Definition: msutb.cpp:35
DWORD g_dwWndStyle
Definition: msutb.cpp:77
UINT g_uTimerElapseDISPLAYCHANGE
Definition: msutb.cpp:66
EXTERN_C HRESULT WINAPI SetRegisterLangBand(BOOL bRegister)
Definition: msutb.cpp:6352
BOOL g_bExcludeCaptionButtons
Definition: msutb.cpp:55
EXTERN_C BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD dwReason, _Inout_opt_ LPVOID lpvReserved)
@implemented
Definition: msutb.cpp:6510
void InitSkipRedrawHKLArray(void)
Definition: msutb.cpp:154
CTrayIconWnd * g_pTrayIconWnd
Definition: msutb.cpp:105
STDMETHODIMP_(void) CUTBCloseLangBarDlg
@unimplemented
Definition: msutb.cpp:1796
BOOL IsBiDiLocalizedSystem(void)
Definition: msutb.cpp:125
DWORD g_dwChildWndStyle
Definition: msutb.cpp:79
HRESULT GetGlobalCompartmentDWORD(REFGUID rguid, LPDWORD pdwValue)
Definition: msutb.cpp:212
BOOL g_fRTL
Definition: msutb.cpp:80
UINT g_uTimerElapseMOVETOTRAY
Definition: msutb.cpp:69
UINT g_uTimerElapseSETWINDOWPOS
Definition: msutb.cpp:63
EXTERN_C VOID WINAPI ClosePopupTipbar(VOID)
Definition: msutb.cpp:6377
VOID ProcessDetach(HINSTANCE hinstDLL)
@implemented
Definition: msutb.cpp:6500
EXTERN_C BOOL WINAPI GetPopupTipbar(HWND hWnd, BOOL fWinLogon)
Definition: msutb.cpp:6336
LONG g_DllRefCount
Definition: msutb.cpp:34
INT GetIconIndexFromhKL(_In_ HKL hKL)
Definition: msutb.cpp:275
BOOL g_fPolicyDisableCloseButton
Definition: msutb.cpp:75
UINT g_uTimerElapseONUPDATECALLED
Definition: msutb.cpp:64
BOOL IsDeskBandFromReg()
Definition: msutb.cpp:411
BOOL GetTipbarInternal(HWND hWnd, DWORD dwFlags, CDeskBand *pDeskBand)
Definition: msutb.cpp:6273
HRESULT LangBarInsertSeparator(_In_ ITfMenu *pMenu)
Definition: msutb.cpp:333
static INT CALLBACK FindEAEnumFontProc(ENUMLOGFONT *pLF, NEWTEXTMETRIC *pTM, INT nFontType, LPARAM lParam)
Definition: msutb.cpp:393
HRESULT GetGlobalCompartment(REFGUID rguid, ITfCompartment **ppComp)
Definition: msutb.cpp:197
HINSTANCE g_hInst
Definition: msutb.cpp:29
#define TIMER_ID_DOACCDEFAULTACTION
Definition: msutb.cpp:82
CicArray< HKL > * g_prghklSkipRedrawing
Definition: msutb.cpp:107
void TurnOffSpeechIfItsOn(void)
Definition: msutb.cpp:243
HWND g_hwndParent
Definition: msutb.cpp:37
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
unsigned int UINT
Definition: ndis.h:50
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169
static LPUNKNOWN
Definition: ndr_ole.c:49
HANDLE hThread
Definition: wizard.c:28
static nsIComponentManager * pCompMgr
Definition: nsembed.c:62
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#define STATUS_TIMEOUT
Definition: ntstatus.h:81
#define L(x)
Definition: ntvdm.h:50
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CAPTION
Definition: pedump.c:624
#define WS_BORDER
Definition: pedump.c:625
#define WS_VISIBLE
Definition: pedump.c:620
short SHORT
Definition: pedump.c:59
long LONG
Definition: pedump.c:60
#define WS_DISABLED
Definition: pedump.c:621
#define WS_DLGFRAME
Definition: pedump.c:626
#define INT
Definition: polytest.cpp:20
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
DWORD dwStatus
Definition: mediaobj.idl:95
int ssize_t
Definition: rosdhcp.h:48
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_CHINESE_TRADITIONAL
Definition: nls.h:208
#define SUBLANG_CHINESE_SIMPLIFIED
Definition: nls.h:209
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define LANG_CHINESE
Definition: nls.h:42
DWORD LCID
Definition: nls.h:13
#define LANG_JAPANESE
Definition: nls.h:76
#define LANG_KOREAN
Definition: nls.h:84
#define ABM_GETTASKBARPOS
Definition: shellapi.h:67
#define NIM_DELETE
Definition: shellapi.h:96
#define NIM_MODIFY
Definition: shellapi.h:95
#define NIF_ICON
Definition: shellapi.h:106
#define NIF_MESSAGE
Definition: shellapi.h:105
#define NIM_ADD
Definition: shellapi.h:94
#define NIF_TIP
Definition: shellapi.h:107
HRESULT hr
Definition: shlfolder.c:183
#define QITABENT(Cthis, Ifoo)
Definition: shlwapi.h:2094
#define _countof(array)
Definition: sndvol32.h:68
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
HWND GetWndProgman()
Definition: msutb.cpp:637
HWND m_hProgmanWnd
Definition: msutb.cpp:628
HWND GetWndTray()
Definition: msutb.cpp:630
void clear()
Definition: msutb.cpp:644
HWND m_hTrayWnd
Definition: msutb.cpp:627
STDMETHOD() GetPrevShowFloatingStatus(DWORD *)=0
BOOL IsShown()
Definition: msutb.cpp:23
UINT m_uTimeOut
Definition: msutb.cpp:19
DWORD m_dwDemoteLevel
Definition: msutb.cpp:17
BOOL m_bDisableDemoting
Definition: msutb.cpp:21
UINT_PTR m_nTimerID
Definition: msutb.cpp:18
BOOL m_bStartedIntentionally
Definition: msutb.cpp:20
CLSID m_clsid
Definition: msutb.cpp:16
BYTE lfOutPrecision
Definition: dimm.idl:68
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
LONG lfOrientation
Definition: dimm.idl:62
LONG lfEscapement
Definition: dimm.idl:61
WCHAR szDescription[TF_LBI_DESC_MAXLEN]
Definition: ctfutb.idl:194
HWND hWnd
Definition: shellapi.h:218
Definition: bl.h:1331
Definition: scsiwmi.h:51
Definition: misc.c:279
int cyBottomHeight
Definition: misc.c:283
int cyTopHeight
Definition: misc.c:282
WCHAR szTip[128]
Definition: shellapi.h:267
UINT uCallbackMessage
Definition: shellapi.h:261
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
UINT flags
Definition: winuser.h:3594
HWND hwndInsertAfter
Definition: winuser.h:3589
HINSTANCE hInstance
Definition: winuser.h:3206
HCURSOR hCursor
Definition: winuser.h:3208
UINT style
Definition: winuser.h:3202
WNDPROC lpfnWndProc
Definition: winuser.h:3203
LPCSTR lpszClassName
Definition: winuser.h:3211
Definition: name.c:39
Definition: ps.c:97
FONTSIGNATURE fs
Definition: wingdi.h:1548
LPVOID lpCreateParams
Definition: winuser.h:2940
LOGFONTA elfLogFont
Definition: wingdi.h:2686
DWORD fsCsb[2]
Definition: wingdi.h:1543
DWORD lsCsbSupported[2]
Definition: wingdi.h:2613
DWORD lsUsb[4]
Definition: wingdi.h:2611
CHAR lfFaceName[LF_FACESIZE]
Definition: wingdi.h:1894
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG cx
Definition: windef.h:334
LONG cy
Definition: windef.h:335
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
BOOL WINAPI InitializeCriticalSectionAndSpinCount(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount)
Definition: synch.c:765
BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW pnid)
Definition: systray.cpp:128
bool SetIcon(HWND hConsoleWindow, HANDLE hIcon, LPARAM *pOldBIcon, LPARAM *pOldSIcon, const char *icondir)
Definition: tnmisc.cpp:136
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT_PTR
Definition: typedefs.h:64
uint32_t DWORD_PTR
Definition: typedefs.h:65
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define WM_IME_SYSTEM
Definition: undocuser.h:60
Definition: pdh_main.c:94
#define AddItem
Definition: userenv.h:209
int ret
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
Definition: wdfusb.h:1083
static LRESULT OnDestroy(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: welcome.c:1552
#define OBJID_CLIENT
Definition: winable.h:19
#define ZeroMemory
Definition: winbase.h:1712
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
#define lstrcmp
Definition: winbase.h:3872
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
#define CopyMemory
Definition: winbase.h:1710
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3709
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
const char * description
Definition: directx.c:2497
#define S_FALSE
Definition: winerror.h:2357
#define TYPE_E_ELEMENTNOTFOUND
Definition: winerror.h:2539
#define DISP_E_MEMBERNOTFOUND
Definition: winerror.h:2512
#define E_UNEXPECTED
Definition: winerror.h:2456
#define CreateDC
Definition: wingdi.h:4441
HGDIOBJ WINAPI GetStockObject(_In_ int)
FONTENUMPROCA FONTENUMPROC
Definition: wingdi.h:2902
int WINAPI GetTextCharsetInfo(_In_ HDC, _Out_opt_ LPFONTSIGNATURE, _In_ DWORD)
#define OUT_TT_ONLY_PRECIS
Definition: wingdi.h:422
#define TRUETYPE_FONTTYPE
Definition: wingdi.h:1109
#define DEFAULT_GUI_FONT
Definition: wingdi.h:909
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define SRCCOPY
Definition: wingdi.h:333
HFONT WINAPI CreateFontW(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR)
#define TCI_SRCCHARSET
Definition: wingdi.h:961
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
#define FW_NORMAL
Definition: wingdi.h:373
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
#define GetObject
Definition: wingdi.h:4468
BOOL WINAPI DeleteDC(_In_ HDC)
#define EnumFonts
Definition: wingdi.h:4452
BOOL WINAPI TranslateCharsetInfo(_Inout_ PDWORD, _Out_ LPCHARSETINFO, _In_ DWORD)
#define SYMBOL_CHARSET
Definition: wingdi.h:385
BOOL WINAPI GetTextExtentPoint32W(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE psizl)
static INT_PTR CALLBACK OnSettingChange(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: winmain.c:1397
#define LOCALE_FONTSIGNATURE
Definition: winnls.h:125
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegDeleteValue
Definition: winreg.h:508
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define CS_VREDRAW
Definition: winuser.h:658
#define SendMessageTimeout
Definition: winuser.h:5845
#define CreateWindowEx
Definition: winuser.h:5755
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define HCF_HIGHCONTRASTON
Definition: winuser.h:2134
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
#define SWP_NOACTIVATE
Definition: winuser.h:1242
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define DWLP_USER
Definition: winuser.h:872
#define GWL_USERDATA
Definition: winuser.h:861
#define MAKELPARAM(l, h)
Definition: winuser.h:4008
#define WM_KEYUP
Definition: winuser.h:1716
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
BOOL WINAPI AttachThreadInput(_In_ DWORD, _In_ DWORD, _In_ BOOL)
#define IDCANCEL
Definition: winuser.h:831
#define IMAGE_ICON
Definition: winuser.h:212
#define FindWindow
Definition: winuser.h:5777
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1608
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define LR_COPYFROMRESOURCE
Definition: winuser.h:1099
#define GetClassName
Definition: winuser.h:5783
#define SMTO_BLOCK
Definition: winuser.h:1224
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1778
#define SWP_NOMOVE
Definition: winuser.h:1244
#define WM_COMMAND
Definition: winuser.h:1740
#define CS_HREDRAW
Definition: winuser.h:653
#define IDC_ARROW
Definition: winuser.h:687
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2670
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define WM_RBUTTONUP
Definition: winuser.h:1780
#define SM_CYSMICON
Definition: winuser.h:1013
#define WM_RBUTTONDBLCLK
Definition: winuser.h:1781
#define SWP_NOSIZE
Definition: winuser.h:1245
#define RDW_UPDATENOW
Definition: winuser.h:1220
#define WM_NCMBUTTONUP
Definition: winuser.h:1699
#define DialogBoxParam
Definition: winuser.h:5764
#define WM_INITDIALOG
Definition: winuser.h:1739
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
HANDLE WINAPI CopyImage(_In_ HANDLE, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:1987
BOOL WINAPI EnumChildWindows(_In_opt_ HWND, _In_ WNDENUMPROC, _In_ LPARAM)
#define SM_CXSIZE
Definition: winuser.h:991
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
UINT WINAPI GetDoubleClickTime(void)
Definition: ntwrapper.h:314
#define IDOK
Definition: winuser.h:830
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define WM_RBUTTONDOWN
Definition: winuser.h:1779
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
#define SM_CYBORDER
Definition: winuser.h:965
#define SM_CXSMICON
Definition: winuser.h:1012
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define RegisterClassEx
Definition: winuser.h:5837
UINT WINAPI GetKeyboardLayoutList(_In_ int nBuff, _Out_writes_to_opt_(nBuff, return) HKL FAR *lpList)
#define WM_NCMBUTTONDOWN
Definition: winuser.h:1698
#define WM_TIMER
Definition: winuser.h:1742
#define SM_CXBORDER
Definition: winuser.h:964
_In_ int cchText
Definition: winuser.h:4465
#define RDW_FRAME
Definition: winuser.h:1212
BOOL WINAPI UpdateWindow(_In_ HWND)
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)
struct _WINDOWPOS * LPWINDOWPOS
#define LoadCursor
Definition: winuser.h:5812
HDC WINAPI GetDC(_In_opt_ HWND)
#define WS_EX_LAYERED
Definition: winuser.h:389
#define SM_CXDLGFRAME
Definition: winuser.h:966
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define PostMessage
Definition: winuser.h:5832
#define SMTO_ABORTIFHUNG
Definition: winuser.h:1223
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
_In_ int _Inout_ LPRECT lprc
Definition: winuser.h:4466
#define WM_NCLBUTTONUP
Definition: winuser.h:1693
#define SW_RESTORE
Definition: winuser.h:779
#define WM_USER
Definition: winuser.h:1895
#define SM_CYDLGFRAME
Definition: winuser.h:968
#define WM_DESTROY
Definition: winuser.h:1609
#define WM_NCRBUTTONUP
Definition: winuser.h:1696
#define SetWindowText
Definition: winuser.h:5857
#define WM_KEYDOWN
Definition: winuser.h:1715
HWND WINAPI FindWindowW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define SWP_NOZORDER
Definition: winuser.h:1247
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define SystemParametersInfo
Definition: winuser.h:5858
#define WM_MBUTTONUP
Definition: winuser.h:1783
#define GWL_STYLE
Definition: winuser.h:852
BOOL WINAPI DestroyWindow(_In_ HWND)
#define MAKEINTRESOURCE
Definition: winuser.h:591
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2075
int WINAPI GetSystemMetrics(_In_ int)
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1692
#define RDW_INVALIDATE
Definition: winuser.h:1214
HMENU WINAPI GetMenu(_In_ HWND)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define WM_NCRBUTTONDOWN
Definition: winuser.h:1695
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define GWL_EXSTYLE
Definition: winuser.h:851
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2053
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
static void Initialize()
Definition: xlate.c:212
char TCHAR
Definition: xmlstorage.h:189
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
CHAR * LPTSTR
Definition: xmlstorage.h:192
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193