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