ReactOS 0.4.16-dev-974-g5022a45
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{
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 MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED): // Chinese (Simplified)
339 case MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL): // Chinese (Traditional)
340 case MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT): // Japanese
341 case MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT): // 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
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);
825 STDMETHOD(get_accValue)(VARIANT varID, BSTR *pszValue);
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
1231 HRESULT AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie);
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;
1264 STDMETHOD(OnMenuSelect)(UINT wID) 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;
1286 STDMETHOD(OnMenuSelect)(INT nCommandId);
1287 STDMETHOD(GetIcon)(HICON *phIcon) override;
1288 STDMETHOD(GetText)(BSTR *pbstr) override;
1289};
1290
1291/***********************************************************************/
1292
1293class CTipbarItem;
1294class CTipbarBalloonItem;
1295
1297{
1298protected:
1312 friend class CTipbarWnd;
1313 friend class CTipbarItem;
1314
1315public:
1316 CTipbarThread(CTipbarWnd *pTipbarWnd);
1317 virtual ~CTipbarThread();
1318
1320
1322 HRESULT _UninitItemList(BOOL bUnAdvise);
1323
1326 BOOL IsVertical();
1327
1328 void AddAllSeparators();
1329 void RemoveAllSeparators();
1330
1331 void AddUIObjs();
1332 void RemoveUIObjs();
1333
1334 CTipbarItem *GetItem(REFCLSID rclsid);
1335 void GetTextSize(BSTR bstr, LPSIZE pSize);
1336 void LocateItems();
1337 void MyMoveWnd(LONG xDelta, LONG yDelta);
1338
1340 LONG _AddRef() { return ++m_cRefs; }
1341 LONG _Release();
1342
1344 BOOL SetFocus(CTipbarBalloonItem *pTarget)
1345 {
1346 return FALSE;
1347 }
1348
1351 {
1352 return E_NOTIMPL;
1353 }
1354
1355 //FIXME
1356};
1357
1358/***********************************************************************/
1359
1361{
1362protected:
1373 friend class CTipbarThread;
1374 friend class CTipbarWnd;
1375
1376public:
1378 CTipbarThread *pThread,
1379 ITfLangBarItem *pLangBarItem,
1380 TF_LANGBARITEMINFO *pItemInfo,
1381 DWORD dwUnknown16);
1382 ~CTipbarItem() override;
1383
1384 void _AddedToUI();
1385 void _RemovedToUI();
1386 void AddRemoveMeToUI(BOOL bFlag);
1387
1388 BOOL IsConnected();
1389 void ClearConnections();
1390
1391 void StartDemotingTimer(BOOL bStarted);
1392
1395
1396 STDMETHOD_(BSTR, GetAccName)() override;
1397 STDMETHOD_(void, GetAccLocation)(LPRECT prc) override;
1398 STDMETHOD_(BOOL, DoAccDefaultAction)() override;
1403 STDMETHOD(OnUpdate)(DWORD dwDirty);
1405 STDMETHOD_(void, OnUnknown45)(DWORD dwDirty, DWORD dwStatus) { }
1406 STDMETHOD_(void, OnUpdateHandler)(ULONG, ULONG);
1407 STDMETHOD(OnUnknown46)(CUIFWindow *pWindow) { return S_OK; }
1408 STDMETHOD(OnUnknown47)(CUIFWindow *pWindow) { return S_OK; }
1414 STDMETHOD(OnUnknown53)(BSTR bstr) { return S_OK; }
1415 STDMETHOD_(LPCWSTR, OnUnknown55)() { return NULL; }
1417 STDMETHOD_(LPCWSTR, GetToolTip)();
1420 STDMETHOD_(void, OnUnknown59)() { }
1421 STDMETHOD_(void, OnUnknown60)() { }
1422 STDMETHOD_(void, OnUnknown61)(HWND) { }
1423 STDMETHOD_(void, OnUnknown62)(HWND) { }
1425};
1426
1427/***********************************************************************/
1428
1429class CTipbarCtrlButtonHolder;
1430class CDeskBand;
1431
1432// Flags for m_dwTipbarWndFlags
1433enum
1434{
1444 TIPBAR_TOPFIT = 0x40000,
1447 TIPBAR_LEFTFIT = 0x200000,
1448};
1449
1451 : public ITfLangBarEventSink
1452 , public ITfLangBarEventSink_P
1453 , public CTipbarAccItem
1454 , public CUIFWindow
1455{
1480 CTipbarCtrlButtonHolder *m_pTipbarCtrlButtonHolder;
1494 CDeskBand *m_pDeskBand;
1497 friend class CUTBContextMenu;
1498 friend class CTipbarGripper;
1499 friend class CTipbarThread;
1500 friend class CTipbarItem;
1501 friend class CLBarInatItem;
1502 friend class CMainIconItem;
1504 friend BOOL GetTipbarInternal(HWND hWnd, DWORD dwFlags, CDeskBand *pDeskBand);
1505 friend LONG MyWaitForInputIdle(DWORD dwThreadId, DWORD dwMilliseconds);
1506
1507public:
1509 ~CTipbarWnd() override;
1510
1512 {
1513 return static_cast<CUIFWindow*>(this);
1514 }
1515
1517 {
1518 return static_cast<CTipbarAccItem*>(this);
1519 }
1520
1521 void Init(BOOL bChild, CDeskBand *pDeskBand);
1522 void InitHighContrast();
1523 void InitMetrics();
1524 void InitThemeMargins();
1525 void UnInit();
1526
1530
1533
1534 void MoveToStub(BOOL bFlag);
1535 void RestoreFromStub();
1536
1542 void LocateCtrlButtons();
1544 void SetVertical(BOOL bVertical);
1545 void UpdatePosFlags();
1546
1547 void CancelMenu();
1549 void ClearLBItemList();
1550
1552 void UpdateVerticalFont();
1553
1556 void DestroyWnd();
1557
1560
1561 UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT uElapse);
1562 BOOL KillTimer(UINT_PTR uIDEvent);
1563
1564 void MoveToTray();
1565 void MyClientToScreen(LPPOINT lpPoint, LPRECT prc);
1566 void SavePosition();
1567 void SetAlpha(BYTE bAlpha, BOOL bFlag);
1568 BOOL SetLangBand(BOOL bDeskBand, BOOL bFlag2);
1570 void SetShowText(BOOL bShow);
1571 void SetShowTrayIcon(BOOL bShow);
1572
1573 void ShowContextMenu(POINT pt, LPCRECT prc, BOOL bFlag);
1574 void StartBackToAlphaTimer();
1576
1579
1582 void EnsureFocusThread();
1583 HRESULT SetFocusThread(CTipbarThread *pFocusThread);
1585 void RestoreLastFocus(DWORD *pdwThreadId, BOOL fPrev);
1586 void CleanUpThreadPointer(CTipbarThread *pThread, BOOL bRemove);
1587 void TerminateAllThreads(BOOL bFlag);
1588 void OnTerminateToolbar();
1590
1593 {
1594 return E_NOTIMPL;
1595 }
1596
1597 // IUnknown methods
1598 STDMETHOD(QueryInterface)(REFIID riid, void **ppvObj);
1601
1602 // ITfLangBarEventSink methods
1609
1610 // ITfLangBarEventSink_P methods
1611 STDMETHOD(OnLangBarUpdate)(TfLBIClick click, BOOL bFlag) override;
1612
1613 // CTipbarAccItem methods
1614 STDMETHOD_(BSTR, GetAccName)() override;
1615 STDMETHOD_(void, GetAccLocation)(LPRECT lprc) override;
1616
1617 // CUIFWindow methods
1618 STDMETHOD_(void, PaintObject)(HDC hDC, LPCRECT prc) override;
1619 STDMETHOD_(DWORD, GetWndStyle)() override;
1620 STDMETHOD_(void, Move)(INT x, INT y, INT nWidth, INT nHeight) override;
1621 STDMETHOD_(void, OnMouseOutFromWindow)(LONG x, LONG y) override;
1622 STDMETHOD_(void, OnCreate)(HWND hWnd) override;
1623 STDMETHOD_(void, OnDestroy)(HWND hWnd) override;
1625 STDMETHOD_(void, OnSysColorChange)() override;
1626 STDMETHOD_(void, OnEndSession)(HWND hWnd, WPARAM wParam, LPARAM lParam) override;
1628 STDMETHOD_(LRESULT, OnWindowPosChanged)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
1629 STDMETHOD_(LRESULT, OnWindowPosChanging)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
1632 STDMETHOD_(LRESULT, OnDisplayChange)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
1635 STDMETHOD_(void, OnThemeChanged)(HWND hWnd, WPARAM wParam, LPARAM lParam) override;
1636 STDMETHOD_(void, UpdateUI)(LPCRECT prc) override;
1637 STDMETHOD_(void, HandleMouseMsg)(UINT uMsg, LONG x, LONG y) override;
1638};
1639
1640/***********************************************************************/
1641
1642#ifdef ENABLE_DESKBAND
1643class CDeskBand
1644{
1645public:
1646 // FIXME: Implement this
1647};
1648#endif
1649
1650/***********************************************************************
1651 * CUTBLangBarDlg
1652 */
1653
1655{
1657}
1658
1660{
1661 ::SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pThis);
1662}
1663
1665{
1666 return ((CUTBLangBarDlg *)pParam)->ThreadProc();
1667}
1668
1670{
1671 if (IsDlgShown())
1672 return FALSE;
1673
1674 SetDlgShown(TRUE);
1675
1678 if (!hThread)
1679 {
1680 SetDlgShown(FALSE);
1681 return TRUE;
1682 }
1683
1684 ++m_cRefs;
1686 return TRUE;
1687}
1688
1690{
1691 if (--m_cRefs == 0)
1692 {
1693 delete this;
1694 return 0;
1695 }
1696 return m_cRefs;
1697}
1698
1699STDMETHODIMP_(BOOL) CUTBLangBarDlg::ThreadProc()
1700{
1701 extern HINSTANCE g_hInst;
1703 SetDlgShown(FALSE);
1704 _Release();
1705 return TRUE;
1706}
1707
1710{
1711 if (uMsg == WM_INITDIALOG)
1712 {
1713 SetThis(hDlg, (CUTBLangBarDlg *)lParam);
1714 ::ShowWindow(hDlg, SW_RESTORE);
1715 ::UpdateWindow(hDlg);
1716 return TRUE;
1717 }
1718
1719 if (uMsg == WM_COMMAND)
1720 {
1722 pThis->OnCommand(hDlg, wParam, lParam);
1723 return TRUE;
1724 }
1725
1726 return FALSE;
1727}
1728
1729/***********************************************************************
1730 * CUTBCloseLangBarDlg
1731 */
1732
1734{
1735 m_cRefs = 1;
1736
1739 else
1741}
1742
1743STDMETHODIMP_(BOOL) CUTBCloseLangBarDlg::DoModal(HWND hDlg)
1744{
1745 CicRegKey regKey;
1746 LSTATUS error;
1747 DWORD dwValue = FALSE;
1748 error = regKey.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
1749 if (error == ERROR_SUCCESS)
1750 regKey.QueryDword(TEXT("DontShowCloseLangBarDlg"), &dwValue);
1751
1752 if (dwValue)
1753 return FALSE;
1754
1755 StartThread();
1756 return TRUE;
1757}
1758
1759STDMETHODIMP_(BOOL) CUTBCloseLangBarDlg::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
1760{
1761 switch (LOWORD(wParam))
1762 {
1763 case IDOK:
1766 {
1767 CicRegKey regKey;
1768 LSTATUS error;
1769 error = regKey.Create(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
1770 if (error == ERROR_SUCCESS)
1771 regKey.SetDword(TEXT("DontShowCloseLangBarDlg"), TRUE);
1772 }
1773 ::EndDialog(hDlg, TRUE);
1774 break;
1775
1776 case IDCANCEL:
1777 ::EndDialog(hDlg, FALSE);
1778 break;
1779
1780 default:
1781 return FALSE;
1782 }
1783 return TRUE;
1784}
1785
1786STDMETHODIMP_(BOOL) CUTBCloseLangBarDlg::IsDlgShown()
1787{
1788 return s_bIsDlgShown;
1789}
1790
1791STDMETHODIMP_(void) CUTBCloseLangBarDlg::SetDlgShown(BOOL bShown)
1792{
1793 s_bIsDlgShown = bShown;
1794}
1795
1796/***********************************************************************
1797 * CUTBMinimizeLangBarDlg
1798 */
1799
1801{
1802 m_cRefs = 1;
1805 else
1807}
1808
1809STDMETHODIMP_(BOOL) CUTBMinimizeLangBarDlg::DoModal(HWND hDlg)
1810{
1811 CicRegKey regKey;
1812 LSTATUS error;
1813
1814 DWORD dwValue = FALSE;
1815 error = regKey.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
1816 if (error == ERROR_SUCCESS)
1817 regKey.QueryDword(TEXT("DontShowMinimizeLangBarDlg"), &dwValue);
1818
1819 if (dwValue)
1820 return FALSE;
1821
1822 StartThread();
1823 return TRUE;
1824}
1825
1826STDMETHODIMP_(BOOL) CUTBMinimizeLangBarDlg::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
1827{
1828 switch (LOWORD(wParam))
1829 {
1830 case IDOK:
1832 {
1833 LSTATUS error;
1834 CicRegKey regKey;
1835 error = regKey.Create(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\"));
1836 if (error == ERROR_SUCCESS)
1837 regKey.SetDword(TEXT("DontShowMinimizeLangBarDlg"), TRUE);
1838 }
1839 ::EndDialog(hDlg, TRUE);
1840 break;
1841 case IDCANCEL:
1842 ::EndDialog(hDlg, FALSE);
1843 break;
1844 default:
1845 return FALSE;
1846 }
1847 return TRUE;
1848}
1849
1850STDMETHODIMP_(BOOL) CUTBMinimizeLangBarDlg::IsDlgShown()
1851{
1852 return s_bIsDlgShown;
1853}
1854
1855STDMETHODIMP_(void) CUTBMinimizeLangBarDlg::SetDlgShown(BOOL bShown)
1856{
1857 s_bIsDlgShown = bShown;
1858}
1859
1860STDMETHODIMP_(BOOL) CUTBMinimizeLangBarDlg::ThreadProc()
1861{
1862 ::Sleep(700);
1863 return CUTBLangBarDlg::ThreadProc();
1864}
1865
1866/***********************************************************************
1867 * CCicLibMenu
1868 */
1869
1871{
1872}
1873
1875{
1876 for (size_t iItem = 0; iItem < m_MenuItems.size(); ++iItem)
1877 {
1878 delete m_MenuItems[iItem];
1879 m_MenuItems[iItem] = NULL;
1880 }
1881}
1882
1884{
1885 static const QITAB c_tab[] =
1886 {
1888 { NULL }
1889 };
1890 return ::QISearch(this, c_tab, riid, ppvObj);
1891}
1892
1894{
1895 return ++m_cRefs;
1896}
1897
1899{
1900 if (--m_cRefs == 0)
1901 {
1902 delete this;
1903 return 0;
1904 }
1905 return m_cRefs;
1906}
1907
1908STDMETHODIMP_(CCicLibMenu*) CCicLibMenu::CreateSubMenu()
1909{
1910 return new(cicNoThrow) CCicLibMenu();
1911}
1912
1913STDMETHODIMP_(CCicLibMenuItem*) CCicLibMenu::CreateMenuItem()
1914{
1915 return new(cicNoThrow) CCicLibMenuItem();
1916}
1917
1919 UINT uId,
1920 DWORD dwFlags,
1921 HBITMAP hbmp,
1922 HBITMAP hbmpMask,
1923 const WCHAR *pch,
1924 ULONG cch,
1925 ITfMenu **ppSubMenu)
1926{
1927 if (ppSubMenu)
1928 *ppSubMenu = NULL;
1929
1930 CCicLibMenu *pSubMenu = NULL;
1932 {
1933 if (!ppSubMenu)
1934 return E_INVALIDARG;
1935 pSubMenu = CreateSubMenu();
1936 }
1937
1938 CCicLibMenuItem *pMenuItem = CreateMenuItem();
1939 if (!pMenuItem)
1940 return E_OUTOFMEMORY;
1941
1942 if (!pMenuItem->Init(uId, dwFlags, hbmp, hbmpMask, pch, cch, pSubMenu))
1943 return E_FAIL;
1944
1945 if (ppSubMenu && pSubMenu)
1946 {
1947 *ppSubMenu = pSubMenu;
1948 pSubMenu->AddRef();
1949 }
1950
1951 m_MenuItems.Add(pMenuItem);
1952 return S_OK;
1953}
1954
1955/***********************************************************************
1956 * CCicLibMenuItem
1957 */
1958
1960{
1961 m_uId = 0;
1962 m_dwFlags = 0;
1963 m_hbmp = NULL;
1964 m_hbmpMask = NULL;
1965 m_bstrText = NULL;
1966 m_pMenu = NULL;
1967}
1968
1970{
1971 if (m_pMenu)
1972 {
1973 m_pMenu->Release();
1974 m_pMenu = NULL;
1975 }
1976
1977 if (m_hbmp)
1978 {
1980 m_hbmp = NULL;
1981 }
1982
1983 if (m_hbmpMask)
1984 {
1986 m_hbmpMask = NULL;
1987 }
1988
1990 m_bstrText = NULL;
1991}
1992
1994 UINT uId,
1995 DWORD dwFlags,
1996 HBITMAP hbmp,
1997 HBITMAP hbmpMask,
1998 const WCHAR *pch,
1999 ULONG cch,
2000 ITfMenu *pMenu)
2001{
2002 m_uId = uId;
2005 if (!m_bstrText && cch)
2006 return FALSE;
2007
2008 m_pMenu = pMenu;
2010 m_hbmpMask = CreateBitmap(hbmpMask);
2011 if (hbmp)
2013 if (hbmpMask)
2014 ::DeleteObject(hbmpMask);
2015
2016 return TRUE;
2017}
2018
2020{
2021 if (!hBitmap)
2022 return NULL;
2023
2024 HDC hDC = ::CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
2025 if (!hDC)
2026 return NULL;
2027
2028 HBITMAP hbmMem = NULL;
2029
2030 BITMAP bm;
2031 ::GetObject(hBitmap, sizeof(bm), &bm);
2032
2033 HGDIOBJ hbmOld1 = NULL;
2034 HDC hdcMem1 = ::CreateCompatibleDC(hDC);
2035 if (hdcMem1)
2036 hbmOld1 = ::SelectObject(hdcMem1, hBitmap);
2037
2038 HGDIOBJ hbmOld2 = NULL;
2039 HDC hdcMem2 = ::CreateCompatibleDC(hDC);
2040 if (hdcMem2)
2041 {
2042 hbmMem = ::CreateCompatibleBitmap(hDC, bm.bmWidth, bm.bmHeight);
2043 hbmOld2 = ::SelectObject(hdcMem2, hbmMem);
2044 }
2045
2046 ::BitBlt(hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem1, 0, 0, SRCCOPY);
2047
2048 if (hbmOld1)
2049 ::SelectObject(hdcMem1, hbmOld1);
2050 if (hbmOld2)
2051 ::SelectObject(hdcMem2, hbmOld2);
2052
2053 ::DeleteDC(hDC);
2054 if (hdcMem1)
2055 ::DeleteDC(hdcMem1);
2056 if (hdcMem2)
2057 ::DeleteDC(hdcMem2);
2058
2059 return hbmMem;
2060}
2061
2062/***********************************************************************
2063 * CTipbarAccessible
2064 */
2065
2067{
2068 m_cRefs = 1;
2069 m_hWnd = NULL;
2070 m_pTypeInfo = NULL;
2073 m_cSelection = 1;
2074 m_AccItems.Add(pItem);
2075 ++g_DllRefCount;
2076}
2077
2079{
2081 if (m_pTypeInfo)
2082 {
2084 m_pTypeInfo = NULL;
2085 }
2086 if (m_pStdAccessible)
2087 {
2090 }
2091 --g_DllRefCount;
2092}
2093
2095{
2097
2099 (void **)&m_pStdAccessible);
2100 if (FAILED(hr))
2101 return hr;
2102
2103 ITypeLib *pTypeLib;
2104 hr = ::LoadRegTypeLib(LIBID_Accessibility, 1, 0, 0, &pTypeLib);
2105 if (FAILED(hr))
2106 hr = ::LoadTypeLib(L"OLEACC.DLL", &pTypeLib);
2107
2108 if (SUCCEEDED(hr))
2109 {
2110 hr = pTypeLib->GetTypeInfoOfGuid(IID_IAccessible, &m_pTypeInfo);
2111 pTypeLib->Release();
2112 }
2113
2114 return hr;
2115}
2116
2118{
2119 return m_AccItems.Add(pItem);
2120}
2121
2123{
2124 for (size_t iItem = 0; iItem < m_AccItems.size(); ++iItem)
2125 {
2126 if (m_AccItems[iItem] == pItem)
2127 {
2128 m_AccItems.Remove(iItem, 1);
2129 break;
2130 }
2131 }
2132 return S_OK;
2133}
2134
2136{
2137 m_AccItems.clear();
2138}
2139
2141{
2142 if (iItem < 0 || (INT)m_AccItems.size() <= iItem)
2143 return NULL;
2144 return m_AccItems[iItem];
2145}
2146
2148{
2149 for (size_t iItem = 0; iItem < m_AccItems.size(); ++iItem)
2150 {
2151 if (pTarget == m_AccItems[iItem])
2152 return (INT)iItem;
2153 }
2154 return -1;
2155}
2156
2158{
2159 return ::LresultFromObject(IID_IAccessible, wParam, this);
2160}
2161
2163{
2164 CTipbarAccItem *pItem = AccItemFromID(nID);
2165 if (!pItem)
2166 return FALSE;
2167 return pItem->DoAccDefaultActionReal();
2168}
2169
2171{
2172 INT nID = GetIDOfItem(pItem);
2173 if (nID < 0)
2174 return;
2175
2176 ::NotifyWinEvent(event, m_hWnd, -4, nID);
2177}
2178
2180{
2181 m_hWnd = hWnd;
2182}
2183
2185 REFIID riid,
2186 void **ppvObject)
2187{
2188 static const QITAB c_tab[] =
2189 {
2192 { NULL }
2193 };
2194 return ::QISearch(this, c_tab, riid, ppvObject);
2195}
2196
2198{
2199 return ::InterlockedIncrement(&m_cRefs);
2200}
2201
2203{
2205 if (count == 0)
2206 {
2207 delete this;
2208 return 0;
2209 }
2210 return count;
2211}
2212
2214{
2215 if (!pctinfo)
2216 return E_INVALIDARG;
2217 *pctinfo = (m_pTypeInfo == NULL);
2218 return S_OK;
2219}
2220
2222 UINT iTInfo,
2223 LCID lcid,
2224 ITypeInfo **ppTInfo)
2225{
2226 if (!ppTInfo)
2227 return E_INVALIDARG;
2228 *ppTInfo = NULL;
2229 if (iTInfo != 0)
2231 if (!m_pTypeInfo)
2232 return E_NOTIMPL;
2233 *ppTInfo = m_pTypeInfo;
2235 return S_OK;
2236}
2237
2239 REFIID riid,
2240 LPOLESTR *rgszNames,
2241 UINT cNames,
2242 LCID lcid,
2243 DISPID *rgDispId)
2244{
2245 if (!m_pTypeInfo)
2246 return E_NOTIMPL;
2247 return m_pTypeInfo->GetIDsOfNames(rgszNames, cNames, rgDispId);
2248}
2249
2251 DISPID dispIdMember,
2252 REFIID riid,
2253 LCID lcid,
2254 WORD wFlags,
2255 DISPPARAMS *pDispParams,
2256 VARIANT *pVarResult,
2257 EXCEPINFO *pExcepInfo,
2258 UINT *puArgErr)
2259{
2260 if (!m_pTypeInfo)
2261 return E_NOTIMPL;
2262 return m_pTypeInfo->Invoke(this,
2263 dispIdMember,
2264 wFlags,
2265 pDispParams,
2266 pVarResult,
2267 pExcepInfo,
2268 puArgErr);
2269}
2270
2272{
2273 return m_pStdAccessible->get_accParent(ppdispParent);
2274}
2275
2277{
2278 if (!pcountChildren)
2279 return E_INVALIDARG;
2280 INT cItems = (INT)m_AccItems.size();
2281 if (!cItems)
2282 return E_FAIL;
2283 *pcountChildren = cItems - 1;
2284 return S_OK;
2285}
2286
2288 VARIANT varChildID,
2289 IDispatch **ppdispChild)
2290{
2291 if (!ppdispChild)
2292 return E_INVALIDARG;
2293 *ppdispChild = NULL;
2294 return S_FALSE;
2295}
2296
2298 VARIANT varID,
2299 BSTR *pszName)
2300{
2301 if (!pszName)
2302 return E_INVALIDARG;
2303 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2304 if (!pItem)
2305 return E_INVALIDARG;
2306 *pszName = pItem->GetAccName();
2307 if (!*pszName)
2308 return DISP_E_MEMBERNOTFOUND;
2309 return S_OK;
2310}
2311
2313 VARIANT varID,
2314 BSTR *pszValue)
2315{
2316 if (!pszValue)
2317 return E_INVALIDARG;
2318 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2319 if (!pItem)
2320 return E_INVALIDARG;
2321 *pszValue = pItem->GetAccValue();
2322 if (!*pszValue)
2323 return DISP_E_MEMBERNOTFOUND;
2324 return S_OK;
2325}
2326
2328 VARIANT varID,
2330{
2331 if (!description)
2332 return E_INVALIDARG;
2333 return m_pStdAccessible->get_accDescription(varID, description);
2334}
2335
2337 VARIANT varID,
2338 VARIANT *role)
2339{
2340 if (!role)
2341 return E_INVALIDARG;
2342 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2343 if (!pItem)
2344 return E_INVALIDARG;
2345 V_VT(role) = VT_I4;
2346 V_I4(role) = pItem->GetAccRole();
2347 return S_OK;
2348}
2349
2351 VARIANT varID,
2352 VARIANT *state)
2353{
2354 if (!state)
2355 return E_INVALIDARG;
2356 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2357 if (!pItem)
2358 return E_INVALIDARG;
2359 V_VT(state) = VT_I4;
2360 V_I4(state) = pItem->GetAccState();
2361 return S_OK;
2362}
2363
2365{
2366 return DISP_E_MEMBERNOTFOUND;
2367}
2368
2370 BSTR *helpfile,
2371 VARIANT varID,
2372 LONG *pidTopic)
2373{
2374 return DISP_E_MEMBERNOTFOUND;
2375}
2376
2378{
2379 return DISP_E_MEMBERNOTFOUND;
2380}
2381
2383{
2384 if (!pvarID)
2385 return E_INVALIDARG;
2386 V_VT(pvarID) = VT_EMPTY;
2387 return S_FALSE;
2388}
2389
2391{
2392 if (!pvarID)
2393 return E_INVALIDARG;
2394
2395 V_VT(pvarID) = VT_EMPTY;
2396
2397 INT cItems = (INT)m_AccItems.size();
2398 if (cItems < m_cSelection)
2399 return S_FALSE;
2400
2401 if (cItems > m_cSelection)
2402 {
2403 V_VT(pvarID) = VT_I4;
2404 V_I4(pvarID) = m_cSelection;
2405 }
2406
2407 return S_OK;
2408}
2409
2411 VARIANT varID,
2412 BSTR *action)
2413{
2414 if (!action)
2415 return E_INVALIDARG;
2416 *action = NULL;
2417
2418 if (V_VT(&varID) != VT_I4)
2419 return E_INVALIDARG;
2420
2421 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2422 if (!pItem)
2423 return DISP_E_MEMBERNOTFOUND;
2424 *action = pItem->GetAccDefaultAction();
2425 if (!*action)
2426 return S_FALSE;
2427 return S_OK;
2428}
2429
2431 LONG flagsSelect,
2432 VARIANT varID)
2433{
2434 if ((flagsSelect & SELFLAG_ADDSELECTION) && (flagsSelect & SELFLAG_REMOVESELECTION))
2435 return E_INVALIDARG;
2436 if (flagsSelect & (SELFLAG_TAKEFOCUS | SELFLAG_ADDSELECTION | SELFLAG_EXTENDSELECTION))
2437 return S_FALSE;
2438 if (flagsSelect & SELFLAG_REMOVESELECTION)
2439 return S_OK;
2440 if (V_VT(&varID) != VT_I4)
2441 return E_INVALIDARG;
2442 if (flagsSelect & SELFLAG_TAKESELECTION)
2443 {
2444 m_cSelection = V_I4(&varID);
2445 return S_OK;
2446 }
2447 return S_FALSE;
2448}
2449
2451 LONG *left,
2452 LONG *top,
2453 LONG *width,
2454 LONG *height,
2455 VARIANT varID)
2456{
2457 if (!left || !top || !width || !height)
2458 return E_INVALIDARG;
2459
2460 if (!V_I4(&varID))
2461 return m_pStdAccessible->accLocation(left, top, width, height, varID);
2462
2463 RECT rc;
2464 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2465 pItem->GetAccLocation(&rc);
2466
2467 *left = rc.left;
2468 *top = rc.top;
2469 *width = rc.right - rc.left;
2470 *height = rc.bottom - rc.top;
2471 return S_OK;
2472}
2473
2475 LONG dir,
2476 VARIANT varStart,
2477 VARIANT *pvarEnd)
2478{
2479 if (m_AccItems.size() <= 1)
2480 {
2481 V_VT(pvarEnd) = VT_EMPTY;
2482 return S_OK;
2483 }
2484
2485 switch (dir)
2486 {
2487 case NAVDIR_UP:
2488 case NAVDIR_LEFT:
2489 case NAVDIR_PREVIOUS:
2490 V_VT(pvarEnd) = VT_I4;
2491 V_I4(pvarEnd) = V_I4(&varStart) - 1;
2492 if (V_I4(&varStart) - 1 <= 0)
2493 V_I4(pvarEnd) = (INT)(m_AccItems.size() - 1);
2494 return S_OK;
2495
2496 case NAVDIR_DOWN:
2497 case NAVDIR_RIGHT:
2498 case NAVDIR_NEXT:
2499 V_VT(pvarEnd) = VT_I4;
2500 V_I4(pvarEnd) = V_I4(&varStart) + 1;
2501 if ((INT)m_AccItems.size() <= V_I4(&varStart) + 1)
2502 V_I4(pvarEnd) = 1;
2503 return S_OK;
2504
2505 case NAVDIR_FIRSTCHILD:
2506 V_VT(pvarEnd) = VT_I4;
2507 V_I4(pvarEnd) = 1;
2508 return S_OK;
2509
2510 case NAVDIR_LASTCHILD:
2511 V_VT(pvarEnd) = VT_I4;
2512 V_I4(pvarEnd) = (INT)(m_AccItems.size() - 1);
2513 return S_OK;
2514
2515 default:
2516 break;
2517 }
2518
2519 V_VT(pvarEnd) = VT_EMPTY;
2520 return S_OK;
2521}
2522
2524{
2525 if (!pvarID)
2526 return E_INVALIDARG;
2527 POINT Point = { left, top };
2528 RECT Rect;
2531
2532 if (!::PtInRect(&Rect, Point))
2533 {
2534 V_VT(pvarID) = VT_EMPTY;
2535 return S_OK;
2536 }
2537
2538 V_VT(pvarID) = VT_I4;
2539 V_I4(pvarID) = 0;
2540
2541 for (size_t iItem = 1; iItem < m_AccItems.size(); ++iItem)
2542 {
2543 CTipbarAccItem *pItem = m_AccItems[iItem];
2544 if (pItem)
2545 {
2546 pItem->GetAccLocation(&Rect);
2547 if (::PtInRect(&Rect, Point))
2548 {
2549 V_I4(pvarID) = iItem;
2550 break;
2551 }
2552 }
2553 }
2554
2555 return S_OK;
2556}
2557
2559{
2560 if (V_VT(&varID) != VT_I4)
2561 return E_INVALIDARG;
2562 CTipbarAccItem *pItem = AccItemFromID(V_I4(&varID));
2563 if (!pItem)
2564 return DISP_E_MEMBERNOTFOUND;
2565 return (pItem->DoAccDefaultAction() ? S_OK : S_FALSE);
2566}
2567
2569{
2570 return S_FALSE;
2571}
2572
2574{
2575 return S_FALSE;
2576}
2577
2578/***********************************************************************
2579 * CUTBMenuWnd
2580 */
2581
2583 : CUIFMenu(hInst, style, dwUnknown14)
2584{
2585}
2586
2588{
2589 if (!m_pAccessible)
2590 return FALSE;
2591
2593 if (!m_nMenuWndID || m_nMenuWndID == (UINT)-1)
2594 return FALSE;
2595
2596 if (::IsWindow(m_hWnd))
2597 {
2600 }
2601
2602 return TRUE;
2603}
2604
2605STDMETHODIMP_(BSTR) CUTBMenuWnd::GetAccName()
2606{
2607 WCHAR szText[64];
2608 LoadStringW(g_hInst, IDS_MENUWND, szText, _countof(szText));
2609 return ::SysAllocString(szText);
2610}
2611
2612STDMETHODIMP_(INT) CUTBMenuWnd::GetAccRole()
2613{
2614 return 9;
2615}
2616
2617STDMETHODIMP_(BOOL) CUTBMenuWnd::Initialize()
2618{
2620 if (pAccessible)
2621 m_pAccessible = pAccessible;
2622
2623 return CUIFObject::Initialize();
2624}
2625
2626STDMETHODIMP_(void) CUTBMenuWnd::OnCreate(HWND hWnd)
2627{
2628 if (m_pAccessible)
2630}
2631
2632STDMETHODIMP_(void) CUTBMenuWnd::OnDestroy(HWND hWnd)
2633{
2634 if (m_pAccessible)
2635 {
2636 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_DESTROY, GetAccItem());
2640 }
2642}
2643
2645CUTBMenuWnd::OnGetObject(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
2646{
2647 if (lParam != -4)
2648 return S_OK;
2649
2650 if (!m_pAccessible)
2651 return E_OUTOFMEMORY;
2652
2655
2657 {
2659 if (FAILED(hr))
2660 {
2663 return hr;
2664 }
2665
2666 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_CREATE, GetAccItem());
2668 }
2669
2670 return S_OK;
2671}
2672
2674CUTBMenuWnd::OnShowWindow(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
2675{
2676 if (m_pAccessible)
2677 {
2678 if (wParam)
2679 {
2680 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_SHOW, GetAccItem());
2681 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_FOCUS, GetAccItem());
2682 }
2683 else
2684 {
2685 m_pAccessible->NotifyWinEvent(EVENT_OBJECT_HIDE, GetAccItem());
2686 }
2687 }
2688
2689 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
2690}
2691
2692STDMETHODIMP_(void) CUTBMenuWnd::OnTimer(WPARAM wParam)
2693{
2695 {
2698 {
2700 m_nMenuWndID = 0;
2701 }
2702 }
2703}
2704
2705/***********************************************************************
2706 * CUTBMenuItem
2707 */
2708
2710 : CUIFMenuItem(pMenuUI ? pMenuUI->GetMenu() : NULL)
2711{
2712 m_pMenuUI = pMenuUI;
2713}
2714
2716{
2717 if (m_hbmColor)
2718 {
2720 m_hbmColor = NULL;
2721 }
2722 if (m_hbmMask)
2723 {
2725 m_hbmMask = NULL;
2726 }
2727}
2728
2729STDMETHODIMP_(BOOL) CUTBMenuItem::DoAccDefaultAction()
2730{
2731 if (!m_pMenuUI)
2732 return FALSE;
2733
2735 return TRUE;
2736}
2737
2738STDMETHODIMP_(BOOL) CUTBMenuItem::DoAccDefaultActionReal()
2739{
2740 if (!m_pSubMenu)
2741 OnLButtonUp(0, 0);
2742 else
2743 ShowSubPopup();
2744 return TRUE;
2745}
2746
2747STDMETHODIMP_(BSTR) CUTBMenuItem::GetAccDefaultAction()
2748{
2749 WCHAR szText[64];
2750 ::LoadStringW(g_hInst, IDS_LEFTCLICK, szText, _countof(szText));
2751 return ::SysAllocString(szText);
2752}
2753
2754STDMETHODIMP_(void) CUTBMenuItem::GetAccLocation(LPRECT lprc)
2755{
2756 GetRect(lprc);
2759}
2760
2761STDMETHODIMP_(BSTR) CUTBMenuItem::GetAccName()
2762{
2763 return ::SysAllocString(m_pszMenuItemLeft);
2764}
2765
2767STDMETHODIMP_(INT) CUTBMenuItem::GetAccRole()
2768{
2769 if (FALSE) //FIXME
2770 return 21;
2771 return 12;
2772}
2773
2774/***********************************************************************
2775 * CModalMenu
2776 */
2777
2779CModalMenu::InsertItem(CUTBMenuWnd *pMenuUI, INT nCommandId, INT nStringID)
2780{
2781 CUTBMenuItem *pMenuItem = new(cicNoThrow) CUTBMenuItem(pMenuUI);
2782 if (!pMenuItem)
2783 return NULL;
2784
2785 WCHAR szText[256];
2786 ::LoadStringW(g_hInst, nStringID, szText, _countof(szText));
2787
2788 if (pMenuItem->Initialize() &&
2789 pMenuItem->Init(nCommandId, szText) &&
2790 pMenuUI->InsertItem(pMenuItem))
2791 {
2792 return pMenuItem;
2793 }
2794
2795 delete pMenuItem;
2796 return NULL;
2797}
2798
2800{
2802}
2803
2805{
2806 if (m_pMenuUI)
2808}
2809
2810/***********************************************************************
2811 * CUTBContextMenu
2812 */
2813
2815{
2816 m_pTipbarWnd = pTipbarWnd;
2817}
2818
2821{
2823 return !!m_pTipbarThread;
2824}
2825
2828{
2829 DWORD dwStatus = 0;
2830
2832 return NULL;
2833
2835 if (!pMenuUI)
2836 return NULL;
2837
2838 pMenuUI->Initialize();
2839
2840 if (dwStatus & (TF_SFT_DESKBAND | TF_SFT_MINIMIZED))
2841 {
2842 CUTBMenuItem *pRestoreLangBar = InsertItem(pMenuUI, ID_RESTORELANGBAR, IDS_RESTORELANGBAR2);
2843 if (pRestoreLangBar && !m_pTipbarWnd->m_dwUnknown20)
2844 pRestoreLangBar->Gray(TRUE);
2845 }
2846 else
2847 {
2849
2850 if (bFlag)
2851 {
2853 {
2854 if (dwStatus & TF_LBI_BALLOON)
2855 {
2857 }
2858 else
2859 {
2860 CUTBMenuItem *pTransparency = InsertItem(pMenuUI, ID_NOTRANS, IDS_TRANSPARENCY);
2861 if (pTransparency)
2862 pTransparency->Check(TRUE);
2863 }
2864 }
2865
2866 if (!(dwStatus & TF_SFT_LABELS))
2867 {
2869 }
2870 else
2871 {
2872 CUTBMenuItem *pTextLabels = InsertItem(pMenuUI, ID_NOLABELS, IDS_TEXTLABELS);
2873 if (pTextLabels)
2874 pTextLabels->Check(TRUE);
2875 }
2876
2877 CUTBMenuItem *pVertical = InsertItem(pMenuUI, ID_VERTICAL, IDS_VERTICAL);
2878 if (pVertical)
2880 }
2881 }
2882
2883 if (bFlag)
2884 {
2885 CUTBMenuItem *pExtraIcons = NULL;
2886
2887 if (dwStatus & TF_SFT_EXTRAICONSONMINIMIZED)
2888 {
2889 pExtraIcons = InsertItem(pMenuUI, ID_NOEXTRAICONS, IDS_EXTRAICONS);
2890 if (pExtraIcons)
2891 pExtraIcons->Check(TRUE);
2892 }
2893 else
2894 {
2895 pExtraIcons = CModalMenu::InsertItem(pMenuUI, ID_EXTRAICONS, IDS_EXTRAICONS);
2896 }
2897
2898 if (pExtraIcons)
2899 {
2900 if (::GetKeyboardLayoutList(0, NULL) == 1)
2901 {
2902 pExtraIcons->Check(TRUE);
2903 pExtraIcons->Gray(TRUE);
2904 }
2905 else
2906 {
2907 pExtraIcons->Gray(FALSE);
2908 }
2909 }
2910
2911 if (dwStatus & TF_SFT_DESKBAND)
2913
2915
2918 }
2919
2920 return pMenuUI;
2921}
2922
2923UINT
2925 CUIFWindow *pWindow,
2926 POINT pt,
2927 LPCRECT prc,
2928 BOOL bFlag)
2929{
2930 if (g_bWinLogon)
2931 return 0;
2932
2933 if (m_pMenuUI)
2934 return -1;
2935
2936 m_pMenuUI = CreateMenuUI(bFlag);
2937 if (!m_pMenuUI)
2938 return 0;
2939
2940 UINT nCommandId = m_pMenuUI->ShowModalPopup(pWindow, prc, TRUE);
2941
2942 if (m_pMenuUI)
2943 {
2944 delete m_pMenuUI;
2945 m_pMenuUI = NULL;
2946 }
2947
2948 return nCommandId;
2949}
2950
2953{
2954 switch (nCommandId)
2955 {
2956 case ID_TRANS:
2957 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_LOWTRANSPARENCY);
2958 break;
2959
2960 case ID_NOTRANS:
2961 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_NOTRANSPARENCY);
2962 break;
2963
2964 case ID_LABELS:
2965 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_LABELS);
2966 break;
2967
2968 case ID_NOLABELS:
2969 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_NOLABELS);
2970 break;
2971
2972 case ID_DESKBAND:
2973 {
2975 {
2976 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_MINIMIZED);
2977 }
2978 else
2979 {
2982
2983 if (dwStatus & TF_SFT_DESKBAND)
2984 break;
2985
2986 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_DESKBAND);
2987 }
2988
2990 if (pDialog)
2991 {
2992 pDialog->DoModal(*m_pTipbarWnd->GetWindow());
2993 pDialog->_Release();
2994 }
2995 break;
2996 }
2997
2998 case ID_CLOSELANGBAR:
2999 {
3001 if (pDialog)
3002 {
3003 BOOL bOK = pDialog->DoModal(*m_pTipbarWnd->GetWindow());
3004 pDialog->_Release();
3005 if (!bOK)
3007 }
3008 break;
3009 }
3010
3011 case ID_EXTRAICONS:
3012 m_pTipbarWnd->m_dwTipbarWndFlags &= ~TIPBAR_NODESKBAND;
3013 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_EXTRAICONSONMINIMIZED);
3014 break;
3015
3016 case ID_NOEXTRAICONS:
3017 m_pTipbarWnd->m_dwTipbarWndFlags &= ~TIPBAR_NODESKBAND;
3018 m_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_NOEXTRAICONSONMINIMIZED);
3019 break;
3020
3021 case ID_RESTORELANGBAR:
3023 break;
3024
3025 case ID_VERTICAL:
3027 break;
3028
3029 case ID_ADJUSTDESKBAND:
3031 break;
3032
3033 case ID_SETTINGS:
3035 break;
3036
3037 default:
3038 break;
3039 }
3040
3041 return TRUE;
3042}
3043
3044/***********************************************************************
3045 * CTrayIconItem
3046 */
3047
3049{
3051 m_pTrayIconWnd = pTrayIconWnd;
3052}
3053
3054BOOL
3056 HWND hWnd,
3057 UINT uCallbackMessage,
3058 UINT uNotifyIconID,
3059 const GUID& rguid)
3060{
3061 m_hWnd = hWnd;
3062 m_uCallbackMessage = uCallbackMessage;
3063 m_uNotifyIconID = uNotifyIconID;
3064 m_guid = rguid;
3065 return TRUE;
3066}
3067
3069{
3071 {
3072 NOTIFYICONDATAW NotifyIcon = { sizeof(NotifyIcon), m_hWnd, m_uNotifyIconID };
3073 NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
3075 ::Shell_NotifyIconW(NIM_DELETE, &NotifyIcon);
3076 }
3077
3080 return TRUE;
3081}
3082
3083BOOL CTrayIconItem::SetIcon(HICON hIcon, LPCWSTR pszTip)
3084{
3085 if (!hIcon)
3086 return FALSE;
3087
3088 NOTIFYICONDATAW NotifyIcon = { sizeof(NotifyIcon), m_hWnd, m_uNotifyIconID };
3089 NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE;
3091 NotifyIcon.hIcon = hIcon;
3092 if (pszTip)
3093 {
3094 NotifyIcon.uFlags |= NIF_TIP;
3095 StringCchCopyW(NotifyIcon.szTip, _countof(NotifyIcon.szTip), pszTip);
3096 }
3097
3099
3102 return TRUE;
3103}
3104
3106{
3107 HWND hNotifyWnd = m_pTrayIconWnd->GetNotifyWnd();
3108 ::GetClientRect(hNotifyWnd, &m_rcMenu);
3109 ::ClientToScreen(hNotifyWnd, (LPPOINT)&m_rcMenu);
3110 ::ClientToScreen(hNotifyWnd, (LPPOINT)&m_rcMenu.right);
3112 return TRUE;
3113}
3114
3115/***********************************************************************
3116 * CButtonIconItem
3117 */
3118
3120 : CTrayIconItem(pWnd)
3121{
3122 m_dwUnknown24 = dwUnknown24;
3123}
3124
3126STDMETHODIMP_(BOOL) CButtonIconItem::OnMsg(WPARAM wParam, LPARAM lParam)
3127{
3128 switch (lParam)
3129 {
3130 case WM_LBUTTONDOWN:
3131 case WM_RBUTTONDOWN:
3132 case WM_LBUTTONDBLCLK:
3133 case WM_RBUTTONDBLCLK:
3134 break;
3135 default:
3136 return TRUE;
3137 }
3138
3139 //FIXME
3140 return TRUE;
3141}
3142
3144STDMETHODIMP_(BOOL) CButtonIconItem::OnDelayMsg(UINT uMsg)
3145{
3146 //FIXME
3147 return FALSE;
3148}
3149
3150/***********************************************************************
3151 * CMainIconItem
3152 */
3153
3156 : CButtonIconItem(pWnd, 1)
3157{
3158}
3159
3162{
3163 return CTrayIconItem::_Init(hWnd, WM_USER, 0, GUID_LBI_TRAYMAIN);
3164}
3165
3167STDMETHODIMP_(BOOL) CMainIconItem::OnDelayMsg(UINT uMsg)
3168{
3169 if (!CButtonIconItem::OnDelayMsg(uMsg))
3170 return 0;
3171
3172 if (uMsg == WM_LBUTTONDBLCLK)
3173 {
3175 g_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_SHOWNORMAL);
3176 }
3177 else if (uMsg == WM_LBUTTONDOWN || uMsg == WM_RBUTTONDOWN)
3178 {
3180 }
3181 return TRUE;
3182}
3183
3184/***********************************************************************
3185 * CTrayIconWnd
3186 */
3187
3189{
3190 m_uCallbackMsg = WM_USER + 0x1000;
3191 m_uNotifyIconID = 0x1000;
3192}
3193
3195{
3196 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3197 {
3198 auto& pItem = m_Items[iItem];
3199 if (pItem)
3200 {
3201 delete pItem;
3202 pItem = NULL;
3203 }
3204 }
3205}
3206
3208{
3209 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3210 {
3211 auto pItem = m_Items[iItem];
3212 if (pItem && m_uCallbackMessage == pItem->m_uCallbackMessage)
3213 {
3214 pItem->OnDelayMsg(m_uMsg);
3215 break;
3216 }
3217 }
3218}
3219
3221{
3222 m_hWnd = ::CreateWindowEx(0, TEXT("CTrayIconWndClass"), NULL, WS_DISABLED,
3223 0, 0, 0, 0, NULL, NULL, g_hInst, this);
3224 FindTrayEtc();
3225
3227 if (m_pMainIconItem)
3228 {
3231 }
3232
3233 return m_hWnd;
3234}
3235
3237{
3239 m_hWnd = NULL;
3240}
3241
3243{
3244 CTrayIconWnd *pWnd = (CTrayIconWnd *)lParam;
3245
3246 TCHAR ClassName[60];
3247 ::GetClassName(hWnd, ClassName, _countof(ClassName));
3248 if (lstrcmp(ClassName, TEXT("TrayNotifyWnd")) != 0)
3249 return TRUE;
3250
3251 pWnd->m_hNotifyWnd = hWnd;
3252 return FALSE;
3253}
3254
3256{
3257 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3258 {
3259 auto pItem = m_Items[iItem];
3260 if (IsEqualGUID(rguid, pItem->m_guid))
3261 return pItem;
3262 }
3263 return NULL;
3264}
3265
3267{
3268 m_hTrayWnd = ::FindWindow(TEXT("Shell_TrayWnd"), NULL);
3269 if (!m_hTrayWnd)
3270 return FALSE;
3271
3273 if (!m_hNotifyWnd)
3274 return FALSE;
3276 m_hwndProgman = FindWindow(TEXT("Progman"), NULL);
3278 return TRUE;
3279}
3280
3282{
3284 FindTrayEtc();
3285 return m_hNotifyWnd;
3286}
3287
3290{
3291 if (g_pTipbarWnd)
3293
3294 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3295 {
3296 auto *pItem = m_Items[iItem];
3297 if (pItem)
3298 {
3299 if (uMsg == pItem->m_uCallbackMessage)
3300 {
3301 pItem->OnMsg(wParam, lParam);
3302 return TRUE;
3303 }
3304 }
3305 }
3306 return FALSE;
3307}
3308
3310{
3311 WNDCLASSEX wc = { sizeof(wc) };
3313 wc.hInstance = g_hInst;
3316 wc.lpszClassName = TEXT("CTrayIconWndClass");
3317 ::RegisterClassEx(&wc);
3318 return TRUE;
3319}
3320
3322{
3323 for (size_t iItem = 0; iItem < m_Items.size(); ++iItem)
3324 {
3325 auto pItem = m_Items[iItem];
3326 if (dwFlags & 0x1)
3327 {
3328 if (IsEqualGUID(pItem->m_guid, GUID_LBI_INATITEM) ||
3329 IsEqualGUID(pItem->m_guid, GUID_LBI_CTRL))
3330 {
3331 continue;
3332 }
3333 }
3334
3335 if (dwFlags & 0x2)
3336 {
3337 if (IsEqualGUID(pItem->m_guid, GUID_TFCAT_TIP_KEYBOARD))
3338 continue;
3339 }
3340
3341 if (pItem->m_uNotifyIconID < 0x1000)
3342 continue;
3343
3344 pItem->RemoveIcon();
3345 }
3346}
3347
3350{
3351 //FIXME
3352}
3353
3355{
3356 CButtonIconItem *pItem = FindIconItem(rguid);
3357 if (!pItem)
3358 {
3359 if (!hIcon)
3360 return FALSE;
3361 pItem = new(cicNoThrow) CButtonIconItem(this, dwUnknown24);
3362 if (!pItem)
3363 return FALSE;
3364
3365 pItem->_Init(m_hWnd, m_uCallbackMsg, m_uNotifyIconID, rguid);
3366 m_uCallbackMsg += 2;
3368 m_Items.Add(pItem);
3369 }
3370
3371 if (!hIcon)
3372 return pItem->RemoveIcon();
3373
3374 return pItem->SetIcon(hIcon, psz);
3375}
3376
3378{
3379 if (!hKL)
3380 {
3383 return TRUE;
3384 }
3385
3386 if (hKL != m_pMainIconItem->m_hKL)
3387 {
3388 WCHAR szText[64];
3389 HICON hIcon = TF_GetLangIcon(LOWORD(hKL), szText, _countof(szText));
3390 if (hIcon)
3391 {
3392 m_pMainIconItem->SetIcon(hIcon, szText);
3394 }
3395 else
3396 {
3399 m_pMainIconItem->SetIcon(hIcon, szText);
3400 }
3401
3402 m_pMainIconItem->m_hKL = hKL;
3403 }
3404
3405 return TRUE;
3406}
3407
3409{
3411}
3412
3414{
3415 if (pCS)
3417 else
3418 ::SetWindowLongPtr(hWnd, GWL_USERDATA, 0);
3419}
3420
3423{
3424 CTrayIconWnd *pThis;
3425 switch (uMsg)
3426 {
3427 case WM_CREATE:
3429 break;
3430 case WM_DESTROY:
3432 break;
3433 case WM_TIMER:
3434 if (wParam == 100)
3435 {
3436 ::KillTimer(hWnd, 100);
3437 pThis = CTrayIconWnd::GetThis(hWnd);
3438 if (pThis)
3439 pThis->CallOnDelayMsg();
3440 }
3441 break;
3442 default:
3443 {
3444 if (uMsg < WM_USER)
3445 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
3446 pThis = CTrayIconWnd::GetThis(hWnd);
3447 if (pThis && pThis->OnIconMessage(uMsg, wParam, lParam))
3448 break;
3449 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
3450 }
3451 }
3452 return 0;
3453}
3454
3455/***********************************************************************
3456 * CLBarItemBase
3457 */
3458
3460{
3461 m_dwItemStatus = 0;
3462 m_szToolTipText[0] = 0;
3463 m_cRefs = 1;
3465}
3466
3468{
3471}
3472
3473HRESULT
3475 REFIID riid,
3476 IUnknown *punk,
3477 DWORD *pdwCookie)
3478{
3479 if (IsEqualIID(riid, IID_ITfLangBarItemSink) || m_pLangBarItemSink)
3480 return TF_E_NOOBJECT;
3481
3482 HRESULT hr = punk->QueryInterface(IID_ITfLangBarItemSink, (void **)&m_pLangBarItemSink);
3483 if (SUCCEEDED(hr))
3484 *pdwCookie = 0x80000001;
3485 return hr;
3486}
3487
3489{
3490 if (dwCookie != 0x80000001)
3491 return E_FAIL;
3492
3493 if (!m_pLangBarItemSink)
3494 return E_UNEXPECTED;
3495
3498 return S_OK;
3499}
3500
3501void
3503 REFIID clsidService,
3504 REFGUID guidItem,
3505 DWORD dwStyle,
3506 DWORD ulSort,
3508{
3509 m_NewUIInfo.clsidService = clsidService;
3510 m_NewUIInfo.guidItem = guidItem;
3511 m_NewUIInfo.dwStyle = dwStyle;
3512 m_NewUIInfo.ulSort = ulSort;
3514}
3515
3516HRESULT
3518{
3519 DWORD dwOldStatus = m_dwItemStatus;
3520
3521 if (bShow)
3522 m_dwItemStatus &= ~TF_LBI_STATUS_HIDDEN;
3523 else
3524 m_dwItemStatus |= TF_LBI_STATUS_HIDDEN;
3525
3526 if (bUpdate && (dwOldStatus != m_dwItemStatus))
3527 {
3529 m_pLangBarItemSink->OnUpdate(TF_LBI_STATUS);
3530 }
3531
3532 return S_OK;
3533}
3534
3536{
3537 CopyMemory(pInfo, &m_NewUIInfo, sizeof(*pInfo));
3538 return S_OK;
3539}
3540
3542{
3543 *pdwStatus = m_dwItemStatus;
3544 return S_OK;
3545}
3546
3548{
3549 return ShowInternal(fShow, TRUE);
3550}
3551
3553{
3554 if (!pbstrToolTip)
3555 return E_INVALIDARG;
3557 *pbstrToolTip = bstr;
3558 return bstr ? S_OK : E_OUTOFMEMORY;
3559}
3560
3561/***********************************************************************
3562 * CUTBLBarMenu
3563 */
3564
3566{
3567 m_hInst = hInst;
3568}
3569
3571{
3572}
3573
3574STDMETHODIMP_(CCicLibMenuItem*) CUTBLBarMenu::CreateMenuItem()
3575{
3577 if (!pItem)
3578 return NULL;
3579 pItem->m_pLBarMenu = this;
3580 return pItem;
3581}
3582
3584{
3586 if (!pMenuUI)
3587 return NULL;
3588
3589 pMenuUI->Initialize();
3590 for (size_t iItem = 0; iItem < m_MenuItems.size(); ++iItem)
3591 {
3593 pItem->InsertToUI(pMenuUI);
3594 }
3595
3596 return pMenuUI;
3597}
3598
3599STDMETHODIMP_(CCicLibMenu*) CUTBLBarMenu::CreateSubMenu()
3600{
3601 return new(cicNoThrow) CUTBLBarMenu(m_hInst);
3602}
3603
3605{
3606 if (m_pMenuUI)
3607 return 0;
3608
3610 if (!m_pMenuUI)
3611 return -1;
3612
3613 INT nCommandId = m_pMenuUI->ShowModalPopup(pWindow, prcExclude, TRUE);
3614
3615 if (m_pMenuUI)
3616 {
3617 delete m_pMenuUI;
3618 m_pMenuUI = NULL;
3619 }
3620
3621 return nCommandId;
3622}
3623
3624/***********************************************************************
3625 * CUTBLBarMenuItem
3626 */
3627
3630{
3631 if ((m_dwFlags & 4) != 0)
3632 {
3633 pMenuUI->InsertSeparator();
3634 return TRUE;
3635 }
3636 if (m_dwFlags & 2)
3637 {
3638 //FIXME
3639 }
3640 else
3641 {
3642 //FIXME
3643 }
3644 return FALSE;
3645}
3646
3647/***********************************************************************
3648 * CLBarItemButtonBase
3649 */
3650
3652{
3653 if (m_hIcon)
3654 {
3656 m_hIcon = NULL;
3657 }
3658}
3659
3661{
3662 static const QITAB c_tab[] =
3663 {
3667 { NULL }
3668 };
3669 return ::QISearch(this, c_tab, riid, ppvObject);
3670}
3671
3673{
3674 return ++m_cRefs;
3675}
3676
3678{
3679 if (--m_cRefs == 0)
3680 {
3681 delete this;
3682 return 0;
3683 }
3684 return m_cRefs;
3685}
3686
3689{
3690 if (click == TF_LBI_CLK_RIGHT)
3691 {
3692 return E_NOTIMPL; //FIXME
3693 }
3694 if (click == TF_LBI_CLK_LEFT)
3695 {
3696 return E_NOTIMPL; //FIXME
3697 }
3698 return E_NOTIMPL;
3699}
3700
3702{
3703 return E_NOTIMPL;
3704}
3705
3707{
3708 return E_NOTIMPL;
3709}
3710
3712{
3713 return E_NOTIMPL;
3714}
3715
3717{
3718 if (!pbstr)
3719 return E_INVALIDARG;
3721 return (*pbstr ? S_OK : E_OUTOFMEMORY);
3722}
3723
3725{
3726 return CLBarItemBase::GetInfo(pInfo);
3727}
3728
3730{
3731 return CLBarItemBase::GetStatus(pdwStatus);
3732}
3733
3735{
3736 return CLBarItemBase::Show(fShow);
3737}
3738
3740{
3741 return CLBarItemBase::GetTooltipString(pbstrToolTip);
3742}
3743
3745 REFIID riid,
3746 IUnknown *punk,
3747 DWORD *pdwCookie)
3748{
3749 return CLBarItemBase::AdviseSink(riid, punk, pdwCookie);
3750}
3751
3753{
3754 return CLBarItemBase::UnadviseSink(dwCookie);
3755}
3756
3757/***********************************************************************
3758 * CLBarInatItem
3759 */
3760
3762{
3763 WCHAR szText[256];
3764 ::LoadStringW(g_hInst, IDS_LANGUAGE, szText, _countof(szText));
3765 InitNuiInfo(CLSID_SYSTEMLANGBARITEM, GUID_LBI_INATITEM, 0x20001, 0, szText);
3766
3771
3774}
3775
3777{
3778 HICON hIcon = NULL;
3779 INT iIndex = GetIconIndexFromhKL(m_hKL);
3780 if (iIndex != -1)
3781 hIcon = TF_InatExtractIcon(iIndex);
3782 *phIcon = hIcon;
3783 return S_OK;
3784}
3785
3787{
3788 if (!pbstr)
3789 return E_INVALIDARG;
3790
3791 WCHAR szText[256];
3792 if (!GethKLDesc(m_hKL, szText, _countof(szText)))
3793 return GetText(pbstr);
3794
3795 *pbstr = ::SysAllocString(szText);
3796 return S_OK;
3797}
3798
3800{
3802
3803 INT iKL, cKLs = TF_MlngInfoCount();
3804 for (iKL = 0; iKL < cKLs; ++iKL)
3805 {
3806 HKL hKL;
3807 WCHAR szDesc[128];
3808 if (TF_GetMlngHKL(iKL, &hKL, szDesc, _countof(szDesc)))
3809 {
3810 HICON hIcon = NULL;
3811 INT iIndex = GetIconIndexFromhKL(hKL);
3812 if (iIndex != -1)
3813 hIcon = TF_InatExtractIcon(iIndex);
3814
3815 LangBarInsertMenu(pMenu, iKL, szDesc, (hKL == m_hKL), hIcon);
3816 }
3817 }
3818
3820 if (g_pTipbarWnd &&
3823 (dwStatus & (TF_SFT_DESKBAND | TF_SFT_MINIMIZED)))
3824 {
3826
3827 WCHAR szText[256];
3829 LangBarInsertMenu(pMenu, 2000, szText, FALSE, NULL);
3830 }
3831
3832 return S_OK;
3833}
3834
3836{
3837 HKL hKL;
3838
3839 if (nCommandId == 2000)
3840 {
3841 if (g_pTipbarWnd)
3842 {
3844 if (pLangBarMgr)
3845 pLangBarMgr->ShowFloating(TF_SFT_SHOWNORMAL);
3846 }
3847 }
3848 else if (TF_GetMlngHKL(nCommandId, &hKL, NULL, 0))
3849 {
3851 HWND hwndFore = ::GetForegroundWindow();
3853 {
3854 BOOL FontSig = GetFontSig(hwndFore, hKL);
3855 ::PostMessage(hwndFore, WM_INPUTLANGCHANGEREQUEST, FontSig, (LPARAM)hKL);
3856 }
3857 }
3858
3859 return S_OK;
3860}
3861
3862/***********************************************************************
3863 * CTipbarGripper
3864 */
3865
3867 : CUIFGripper((pTipbarWnd ? pTipbarWnd->GetWindow() : NULL), prc, style)
3868{
3870 m_pTipbarWnd = pTipbarWnd;
3871}
3872
3874STDMETHODIMP_(void) CTipbarGripper::OnLButtonUp(LONG x, LONG y)
3875{
3877
3879 {
3880 APPBARDATA AppBar = { sizeof(AppBar) };
3881 AppBar.hWnd = ::FindWindowW(L"Shell_TrayWnd", NULL);
3883 {
3884 RECT rc = AppBar.rc;
3885 POINT pt;
3887 if (g_pTipbarWnd && ::PtInRect(&rc, pt))
3888 g_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_DESKBAND |
3889 TF_SFT_EXTRAICONSONMINIMIZED);
3890 }
3891 }
3892
3893 CUIFGripper::OnLButtonUp(x, y);
3895}
3896
3898STDMETHODIMP_(void) CTipbarGripper::OnRButtonUp(LONG x, LONG y)
3899{
3900 if (g_bShowDebugMenu)
3901 {
3902 // FIXME: Debugging feature
3903 }
3904}
3905
3906STDMETHODIMP_(BOOL) CTipbarGripper::OnSetCursor(UINT uMsg, LONG x, LONG y)
3907{
3908 if (m_bInDebugMenu)
3909 return FALSE;
3910
3911 return CUIFGripper::OnSetCursor(uMsg, x, y);
3912}
3913
3914/***********************************************************************
3915 * CLangBarItemList
3916 */
3917
3919{
3920 auto *pItem = FindItem(rclsid);
3921 if (!pItem)
3922 return FALSE;
3923 return pItem->m_bStartedIntentionally;
3924}
3925
3927{
3928 auto *pItem = FindItem(rclsid);
3929 if (pItem)
3930 return pItem;
3931
3932 pItem = Append(1);
3933 if (!pItem)
3934 return NULL;
3935
3936 ZeroMemory(pItem, sizeof(*pItem));
3937 pItem->m_clsid = rclsid;
3938 pItem->m_dwDemoteLevel = 0;
3939 return pItem;
3940}
3941
3943{
3944 clear();
3945
3946 CicRegKey regKey;
3947 LSTATUS error;
3948 error = regKey.Open(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\CTF\\LangBar", KEY_ALL_ACCESS);
3949 if (error == ERROR_SUCCESS)
3950 regKey.RecurseDeleteKey(L"ItemState");
3951}
3952
3954{
3955 auto *pItem = AddItem(rclsid);
3956 if (!pItem)
3957 return TRUE;
3958
3959 pItem->m_dwDemoteLevel = dwDemoteLevel;
3960 if (!pItem->IsShown())
3961 {
3962 if (pItem->m_nTimerID)
3963 {
3964 if (g_pTipbarWnd)
3965 g_pTipbarWnd->KillTimer(pItem->m_nTimerID);
3966 pItem->m_nTimerID = 0;
3967 pItem->m_uTimeOut = 0;
3968 }
3969 pItem->m_bDisableDemoting = FALSE;
3970 }
3971
3972 SaveItem(0, pItem);
3973 return TRUE;
3974}
3975
3977{
3978 for (size_t iItem = 0; iItem < size(); ++iItem)
3979 {
3980 auto& item = (*this)[iItem];
3981 if (IsEqualCLSID(item.m_clsid, rclsid))
3982 return &item;
3983 }
3984 return NULL;
3985}
3986
3988{
3989 for (size_t iItem = 0; iItem < size(); ++iItem)
3990 {
3991 auto& item = (*this)[iItem];
3992 if (item.m_nTimerID == nTimerID)
3993 return &item;
3994 }
3995 return NULL;
3996}
3997
3999{
4000 CicRegKey regKey;
4001 LSTATUS error;
4002 error = regKey.Open(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\CTF\\LangBar\\ItemState");
4003 if (error != ERROR_SUCCESS)
4004 return;
4005
4006 WCHAR szKeyName[MAX_PATH];
4007 for (DWORD dwIndex = 0; ; ++dwIndex)
4008 {
4009 error = ::RegEnumKeyW(regKey, dwIndex, szKeyName, _countof(szKeyName));
4010 if (error != ERROR_SUCCESS)
4011 break;
4012
4013 CLSID clsid;
4014 if (::CLSIDFromString(szKeyName, &clsid) != S_OK)
4015 continue;
4016
4017 CicRegKey regKey2;
4018 error = regKey2.Open(regKey, szKeyName);
4019 if (error != ERROR_SUCCESS)
4020 continue;
4021
4022 auto *pItem = AddItem(clsid);
4023 if (!pItem)
4024 continue;
4025
4026 DWORD Data = 0;
4027 regKey2.QueryDword(L"DemoteLevel", &Data);
4028 pItem->m_dwDemoteLevel = Data;
4029 regKey2.QueryDword(L"DisableDemoting", &Data);
4030 pItem->m_bDisableDemoting = !!Data;
4031 }
4032}
4033
4035{
4036 LSTATUS error;
4037 CicRegKey regKey;
4038
4039 if (!pRegKey)
4040 {
4041 error = regKey.Create(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\CTF\\LangBar\\ItemState");
4042 if (error != ERROR_SUCCESS)
4043 return;
4044
4045 pRegKey = &regKey;
4046 }
4047
4048 WCHAR szSubKey[MAX_PATH];
4049 ::StringFromGUID2(pState->m_clsid, szSubKey, _countof(szSubKey));
4050
4051 if (pState->m_dwDemoteLevel || pState->m_bDisableDemoting)
4052 {
4053 CicRegKey regKey2;
4054 error = regKey2.Create(*pRegKey, szSubKey);
4055 if (error == ERROR_SUCCESS)
4056 {
4057 DWORD dwDemoteLevel = pState->m_dwDemoteLevel;
4058 if (dwDemoteLevel)
4059 regKey2.SetDword(L"DemoteLevel", dwDemoteLevel);
4060 else
4061 regKey2.DeleteValue(L"DemoteLevel");
4062
4063 regKey2.SetDword(L"DisableDemoting", pState->m_bDisableDemoting);
4064 }
4065 }
4066 else
4067 {
4068 pRegKey->RecurseDeleteKey(szSubKey);
4069 }
4070}
4071
4073{
4074 if (!g_bIntelliSense)
4075 return;
4076
4077 auto *pItem = AddItem(rclsid);
4078 if (!pItem || pItem->m_bDisableDemoting)
4079 return;
4080
4081 if (pItem->m_nTimerID)
4082 {
4083 if (!bIntentional)
4084 return;
4085
4086 if (g_pTipbarWnd)
4087 g_pTipbarWnd->KillTimer(pItem->m_nTimerID);
4088
4089 pItem->m_nTimerID = 0;
4090 }
4091
4092 pItem->m_bStartedIntentionally |= bIntentional;
4093
4094 UINT uTimeOut = (bIntentional ? g_uTimeOutIntentional : g_uTimeOutNonIntentional);
4095 pItem->m_uTimeOut += uTimeOut;
4096
4097 if (pItem->m_uTimeOut < g_uTimeOutMax)
4098 {
4099 UINT_PTR uDemotingTimerId = FindDemotingTimerId();
4100 pItem->m_nTimerID = uDemotingTimerId;
4101 if (uDemotingTimerId)
4102 {
4103 if (g_pTipbarWnd)
4104 g_pTipbarWnd->SetTimer(uDemotingTimerId, uTimeOut);
4105 }
4106 }
4107 else
4108 {
4109 pItem->m_bDisableDemoting = TRUE;
4110 }
4111}
4112
4114{
4115 UINT_PTR nTimerID = 10000;
4116
4117 if (empty())
4118 return nTimerID;
4119
4120 for (;;)
4121 {
4122 size_t iItem = 0;
4123
4124 while ((*this)[iItem].m_nTimerID != nTimerID)
4125 {
4126 ++iItem;
4127 if (iItem >= size())
4128 return nTimerID;
4129 }
4130
4131 ++nTimerID;
4132 if (nTimerID >= 10050)
4133 return 0;
4134 }
4135}
4136
4137/***********************************************************************
4138 * CTipbarWnd
4139 */
4140
4144{
4145 m_dwUnknown23_1[4] = 0;
4146 m_dwUnknown23_1[5] = 0;
4147 m_dwUnknown23_1[6] = 0;
4148 m_dwUnknown23_1[7] = 0;
4149
4150 RECT rc;
4152
4153 //FIXME: Fix g_ptTipbar
4154
4155 Move(g_ptTipbar.x, g_ptTipbar.y, 100, 24);
4157
4158 m_hMarlettFont = ::CreateFontW(8, 8, 0, 0, FW_NORMAL, 0, 0, 0,
4159 SYMBOL_CHARSET, 0, 0, 0, 0, L"Marlett");
4160
4161 ITfLangBarMgr *pLangBarMgr = NULL;
4162 if (SUCCEEDED(TF_CreateLangBarMgr(&pLangBarMgr)) && pLangBarMgr)
4163 {
4164 pLangBarMgr->QueryInterface(IID_ITfLangBarMgr_P, (void **)&m_pLangBarMgr);
4165 pLangBarMgr->Release();
4166 }
4167
4169 {
4170 if (g_fTaskbarTheme)
4171 {
4172 m_iPartId = 1;
4173 m_iStateId = 1;
4174 m_pszClassList = L"TASKBAR";
4175 }
4176 else
4177 {
4178 m_iPartId = 0;
4179 m_iStateId = 1;
4180 m_pszClassList = L"REBAR";
4181 }
4182 }
4183
4185
4186 m_cRefs = 1;
4187}
4188
4190{
4191 UnInit();
4192
4193 if (m_hMarlettFont)
4195 if (m_hTextFont)
4197
4199}
4200
4202void CTipbarWnd::Init(BOOL bChild, CDeskBand *pDeskBand)
4203{
4204 if (bChild)
4206 else
4207 m_dwTipbarWndFlags &= ~TIPBAR_CHILD;
4208
4211
4212 m_pDeskBand = pDeskBand;
4213
4214 RECT rc = { 0, 0, 0, 0 };
4215
4216 if (g_bNewLook && !m_pWndFrame && (m_style & 0x20000000))
4217 {
4218 CUIFWndFrame *pWndFrame = new(cicNoThrow) CUIFWndFrame(GetWindow(), &rc, 0);
4219 if (pWndFrame)
4220 {
4221 pWndFrame->Initialize();
4222 AddUIObj(m_pWndFrame);
4223 }
4224 }
4225
4227 {
4230 if (m_pTipbarGripper)
4231 {
4232 m_pTipbarGripper->Initialize();
4233 AddUIObj(m_pTipbarGripper);
4234 }
4235 }
4236
4237 //FIXME: CTipbarCtrlButtonHolder
4238
4240 {
4242 }
4243 else
4244 {
4246 }
4247}
4248
4250{
4251 m_dwTipbarWndFlags &= ~TIPBAR_HIGHCONTRAST;
4252
4253 HIGHCONTRAST HiCon = { sizeof(HiCon) };
4254 if (::SystemParametersInfo(SPI_GETHIGHCONTRAST, sizeof(HiCon), &HiCon, 0))
4255 {
4256 if (HiCon.dwFlags & HCF_HIGHCONTRASTON)
4258 }
4259}
4260
4262{
4265
4267 if (style & WS_DLGFRAME)
4268 {
4271 }
4272 else if (style & WS_BORDER)
4273 {
4276 }
4277 else
4278 {
4280 }
4281}
4282
4284{
4285 ZeroMemory(&m_Margins, sizeof(m_Margins));
4286
4287 CUIFTheme theme;
4288 m_dwUnknown23_5[0] = 6;
4289 m_dwUnknown23_5[1] = 6;
4290 m_dwUnknown23_5[2] = 0;
4292
4293 theme.m_iPartId = 1;
4294 theme.m_iStateId = 0;
4295 theme.m_pszClassList = L"TOOLBAR";
4297 {
4298 ::GetThemeMargins(theme.m_hTheme, NULL, theme.m_iPartId, 1, 3602, NULL, &m_Margins);
4299 m_dwUnknown23_5[0] = 4;
4300 m_dwUnknown23_5[1] = 2;
4301 m_dwUnknown23_5[2] = 1;
4302 }
4303 theme.CloseThemeData();
4304
4305 theme.m_iPartId = 18;
4306 theme.m_iStateId = 0;
4307 theme.m_pszClassList = L"WINDOW";
4309 {
4310 SIZE partSize;
4311 ::GetThemePartSize(theme.m_hTheme, NULL, theme.m_iPartId, 1, 0, TS_TRUE, &partSize);
4312 INT size = ::GetThemeSysSize(theme.m_hTheme, 31);
4313 m_ButtonWidth = MulDiv(size, partSize.cx, partSize.cy);
4314 }
4315 theme.CloseThemeData();
4316}
4317
4319{
4321 for (size_t iItem = 0; iItem < m_Threads.size(); ++iItem)
4322 {
4323 CTipbarThread* pThread = m_Threads[iItem];
4324 if (pThread)
4325 {
4326 pThread->_UninitItemList(TRUE);
4327 pThread->m_pTipbarWnd = NULL;
4328 pThread->_Release();
4329 }
4330 }
4331 m_Threads.clear();
4332
4333 if (m_pLangBarMgr)
4335
4336 if (m_pLangBarMgr)
4337 {
4340 }
4341}
4342
4344{
4346 return FALSE;
4347
4349 if (!(style & WS_VISIBLE) || (style & WS_CAPTION))
4350 return FALSE;
4351
4353 if (exstyle & WS_EX_LAYERED)
4354 return FALSE;
4355
4356 if ((exstyle & WS_EX_TOOLWINDOW) && (hWnd == m_ShellWndThread.GetWndProgman()))
4357 return FALSE;
4358
4359 return !!cicIsFullScreenSize(hWnd);
4360}
4361
4363{
4365 return IsSkipRedrawHKL(hKL);
4366}
4367
4369{
4370 if (pTarget->m_dwThreadId == m_dwChangingThreadId)
4371 return TRUE;
4372 return pTarget->IsDirtyItem();
4373}
4374
4376{
4377 m_ThreadCreatingList.Add(pThread);
4378}
4379
4381{
4383 if (iItem >= 0)
4385}
4386
4388{
4389 m_dwTipbarWndFlags |= 0x40;
4390
4391 RECT rcWorkArea;
4392 ::SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
4393
4394 if (bFlag)
4395 {
4396 m_nLeft = rcWorkArea.right - 38;
4397 m_dwTipbarWndFlags &= ~0x80;
4398 }
4399 else
4400 {
4401 RECT Rect;
4403 m_nLeft = rcWorkArea.right + Rect.left - Rect.right;
4404 m_dwTipbarWndFlags |= 0x80;
4405 }
4406
4407 m_nTop = rcWorkArea.bottom - m_cyDlgFrameX2 - GetTipbarHeight();
4408
4409 if (m_pFocusThread)
4411}
4412
4414{
4415 m_dwTipbarWndFlags &= 0x3F;
4416 KillTimer(1);
4417 KillTimer(2);
4418}
4419
4422{
4423 return 0;
4424}
4425
4427{
4428 if (m_dwTipbarWndFlags & 2)
4429 return 0;
4430
4432 return 5;
4433
4434 INT width = -1;
4435 SIZE partSize;
4436 HDC hDC = ::GetDC(m_hWnd);
4437 if (SUCCEEDED(m_pTipbarGripper->GetThemePartSize(hDC, 1, 0, TS_TRUE, &partSize)))
4438 {
4439 INT cx = partSize.cx;
4440 if (m_dwTipbarWndFlags & 4)
4441 cx = partSize.cy;
4442 width = cx + 4;
4443 }
4445
4446 return ((width < 0) ? 5 : width);
4447}
4448
4450{
4451 SIZE size = { 0, 0 };
4452 if (m_pWndFrame)
4455 if (cy < 6)
4456 cy = 6;
4457 return m_cySmallIcon + cy + (2 * size.cy);
4458}
4459
4461{
4463 !m_pFocusThread ||
4464 (m_pFocusThread->m_dwFlags1 & 0x800))
4465 {
4466 return FALSE;
4467 }
4468
4469 DWORD dwOldWndFlags = m_dwTipbarWndFlags;
4470 m_dwTipbarWndFlags &= ~0x8000;
4471
4472 if (!AdjustDeskBandSize(!(dwOldWndFlags & 0x8000)))
4473 return FALSE;
4474
4476 return TRUE;
4477}
4478
4481{
4482 return 0;
4483}
4484
4487{
4488}
4489
4491{
4492 RECT rcWorkArea;
4494 if (!GetWorkArea(&rc, &rcWorkArea))
4495 return;
4496
4497 INT x = m_nLeft, y = m_nTop;
4499 x = rcWorkArea.left;
4501 y = rcWorkArea.top;
4503 x = rcWorkArea.right - m_nWidth;
4505 y = rcWorkArea.bottom - m_nHeight;
4506 if (x != m_nLeft || y != m_nTop)
4508}
4509
4511{
4512 if (bVertical)
4514 else
4515 m_dwTipbarWndFlags &= ~TIPBAR_VERTICAL;
4516
4517 if (m_pTipbarGripper)
4518 {
4520 if (bVertical)
4521 style |= 0x1;
4522 else
4523 style &= 0x1;
4524 m_pTipbarGripper->SetStyle(style);
4525 }
4526
4527 if (g_fTaskbarTheme)
4528 SetActiveTheme(L"TASKBAR", !!(m_dwTipbarWndFlags & TIPBAR_VERTICAL), 1);
4529
4531 {
4533 {
4535 }
4536 else
4537 {
4539 }
4540 }
4541
4542 if (m_hWnd)
4543 {
4544 KillTimer(7);
4546 }
4547}
4548
4550{
4552 return;
4553
4554 RECT rc = { m_nLeft, m_nTop, m_nLeft + m_nWidth, m_nTop + m_nHeight }, rcWorkArea;
4555 if (!GetWorkArea(&rc, &rcWorkArea))
4556 return;
4557
4558 if (rcWorkArea.left + 2 < m_nLeft)
4559 m_dwTipbarWndFlags &= ~TIPBAR_LEFTFIT;
4560 else
4562
4563 if (rcWorkArea.top + 2 < m_nTop)
4564 m_dwTipbarWndFlags &= ~TIPBAR_TOPFIT;
4565 else
4567
4568 if (m_nLeft + m_nWidth < rcWorkArea.right - 2)
4569 m_dwTipbarWndFlags &= ~TIPBAR_RIGHTFIT;
4570 else
4572
4573 if (m_nTop + m_nHeight < rcWorkArea.bottom - 2)
4574 m_dwTipbarWndFlags &= ~TIPBAR_BOTTOMFIT;
4575 else
4577}
4578
4580{
4581 if (!m_pThread)
4582 return;
4583
4584 CTipbarWnd *pTipbarWnd = m_pThread->m_pTipbarWnd;
4585 if (pTipbarWnd)
4586 {
4587 if (pTipbarWnd->m_pLangBarMgr)
4589 }
4590
4593}
4594
4596{
4597 return (prc1->top < prc2->top + 5) && (prc2->right <= prc1->right + (5 * m_ButtonWidth));
4598}
4599
4601{
4603 if (m_pFocusThread)
4605}
4606
4608{
4609 if (!m_hWnd)
4610 return NULL;
4611
4612 CUIFTheme theme;
4613 theme.m_iPartId = 1;
4614 theme.m_iStateId = 0;
4615 theme.m_pszClassList = L"TOOLBAR";
4616
4617 LOGFONTW lf;
4618 if (FAILED(theme.InternalOpenThemeData(m_hWnd)) ||
4619 FAILED(::GetThemeFont(theme.m_hTheme, NULL, theme.m_iPartId, 0, 210, &lf)))
4620 {
4622 }
4623
4624 lf.lfEscapement = lf.lfOrientation = 2700;
4626
4627 if (CheckEAFonts())
4628 {
4629 WCHAR szText[LF_FACESIZE];
4630 szText[0] = L'@';
4631 StringCchCopyW(&szText[1], _countof(szText) - 1, lf.lfFaceName);
4633 }
4634
4635 return ::CreateFontIndirectW(&lf);
4636}
4637
4639{
4641 {
4642 if (m_hTextFont)
4643 {
4645 SetFontToThis(NULL);
4646 m_hTextFont = NULL;
4647 }
4649 SetFontToThis(m_hTextFont);
4650 }
4651 else
4652 {
4653 SetFontToThis(NULL);
4654 }
4655}
4656
4659{
4660 //FIXME: CTipbarCtrlButtonHolder
4661}
4662
4664{
4665 if (m_pBalloon)
4666 {
4667 if (::IsWindow(*m_pBalloon))
4669 delete m_pBalloon;
4670 m_pBalloon = NULL;
4671 }
4672}
4673
4675{
4676 if (::IsWindow(m_hWnd))
4678}
4679
4681{
4682 DWORD dwThreadId = 0;
4683 if (m_pFocusThread)
4685 return ::GetKeyboardLayout(dwThreadId);
4686}
4687
4689{
4690 DWORD dwChangingThreadId = m_dwChangingThreadId;
4692 KillTimer(4);
4693
4694 if (dwChangingThreadId)
4695 {
4696 CTipbarThread *pThread = _FindThread(dwChangingThreadId);
4697 if (pThread)
4698 pThread->m_dwUnknown34 |= 0x1;
4699 }
4700}
4701
4703{
4704 if (::IsWindow(m_hWnd))
4705 return ::SetTimer(m_hWnd, nIDEvent, uElapse, NULL);
4706 return 0;
4707}
4708
4710{
4711 if (::IsWindow(m_hWnd))
4712 return ::KillTimer(m_hWnd, uIDEvent);
4713 return FALSE;
4714}
4715
4718{
4720 {
4721 //FIXME
4722 }
4723}
4724
4726{
4727 if (lpPoint)
4728 ::ClientToScreen(m_hWnd, lpPoint);
4729
4730 if (prc)
4731 {
4734 }
4735}
4736
4738{
4739 CicRegKey regKey;
4740 if (regKey.Create(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\MSUTB\\")))
4741 {
4742 POINT pt = { 0, 0 };
4744 regKey.SetDword(TEXT("Left"), pt.x);
4745 regKey.SetDword(TEXT("Top"), pt.y);
4746 regKey.SetDword(TEXT("Vertical"), !!(m_dwTipbarWndFlags & TIPBAR_VERTICAL));
4747 }
4748}
4749
4751void CTipbarWnd::SetAlpha(BYTE bAlpha, BOOL bFlag)
4752{
4753}
4754
4756{
4757 if (bDeskBand == !!(m_dwShowType & TF_SFT_DESKBAND))
4758 return TRUE;
4759
4760 BOOL ret = TRUE;
4761 HWND hwndTray = m_ShellWndThread.GetWndTray();
4762 if (bFlag2 && hwndTray)
4763 {
4764 DWORD_PTR dwResult;
4765 HWND hImeWnd = ::ImmGetDefaultIMEWnd(hwndTray);
4766 if (hImeWnd)
4767 ::SendMessageTimeout(hImeWnd, WM_IME_SYSTEM, 0x24 - bDeskBand, (LPARAM)hwndTray,
4768 (SMTO_BLOCK | SMTO_ABORTIFHUNG), 5000, &dwResult);
4769 else
4770 ::SendMessageTimeout(hwndTray, 0x505, 0, bDeskBand,
4771 (SMTO_BLOCK | SMTO_ABORTIFHUNG), 5000, &dwResult);
4772 }
4773 else
4774 {
4775 ret = FALSE;
4776 }
4777
4778 if (!(m_dwTipbarWndFlags & TIPBAR_CHILD) && bDeskBand)
4779 {
4780 KillTimer(7);
4782 }
4783
4784 return ret;
4785}
4786
4787void CTipbarWnd::SetMoveRect(INT X, INT Y, INT nWidth, INT nHeight)
4788{
4790 {
4791 m_nWidth = nWidth;
4793 return;
4794 }
4795
4796 ++m_bInCallOn;
4797
4799
4800 m_X = X;
4801 m_Y = Y;
4802 m_CX = nWidth;
4803 m_CY = nHeight;
4804
4805 RECT rc;
4806 SIZE size = { 0, 0 };
4807 if (m_pWndFrame)
4808 {
4810 m_pWndFrame->SetRect(&rc);
4812 }
4813
4814 if (m_pTipbarGripper)
4815 {
4817 {
4818 INT GripperWidth = GetGripperWidth();
4819 ::SetRect(&rc, size.cx, size.cy, nWidth - m_cxDlgFrameX2 - size.cx, size.cy + GripperWidth);
4820 }
4821 else
4822 {
4823 INT GripperWidth = GetGripperWidth();
4824 INT y1 = nHeight - m_cyDlgFrameX2 - size.cy;
4825 ::SetRect(&rc, size.cx, size.cy, size.cx + GripperWidth, y1);
4826 }
4827 m_pTipbarGripper->SetRect(&rc);
4828 }
4829
4830 --m_bInCallOn;
4831}
4832
4834{
4835 if (bShow)
4837 else
4838 m_dwTipbarWndFlags &= ~TIPBAR_HIGHCONTRAST;
4839
4840 if (m_pFocusThread)
4842
4844}
4845
4847{
4849 m_dwTipbarWndFlags &= ~TIPBAR_TRAYICON;
4850 else
4852
4854 {
4855 KillTimer(10);
4857 }
4858 else if (g_pTrayIconWnd)
4859 {
4862 }
4863}
4864
4866{
4867 AddRef();
4868
4869 RECT rc;
4870 if (!prc)
4871 {
4872 rc = { pt.x, pt.y, pt.x, pt.y };
4873 prc = &rc;
4874 }
4875
4876 if (m_pFocusThread)
4877 {
4878 CUTBContextMenu *pContextMenu = new(cicNoThrow) CUTBContextMenu(this);
4879 if (pContextMenu)
4880 {
4881 if (pContextMenu->Init())
4882 {
4885
4886 m_pModalMenu = pContextMenu;
4887 DWORD dwCommandId = pContextMenu->ShowPopup(GetWindow(), pt, prc, bFlag);
4889
4890 if (m_pThread)
4892
4893 m_pThread = NULL;
4894
4895 if (dwCommandId != (DWORD)-1)
4896 pContextMenu->SelectMenuItem(dwCommandId);
4897 }
4898
4899 delete pContextMenu;
4900 }
4901 }
4902
4903 Release();
4904}
4905
4907{
4908 UINT uTime = ::GetDoubleClickTime();
4909 ::SetTimer(m_hWnd, 3, 3 * uTime, NULL);
4910}
4911
4913{
4915 return FALSE;
4917 m_nID = IDOfItem;
4918 if (!IDOfItem || IDOfItem == -1)
4919 return FALSE;
4920 KillTimer(11);
4922 return TRUE;
4923}
4924
4926{
4927 if (!m_pLangBarMgr)
4928 return;
4929
4931 if (g_pTrayIconWnd)
4933
4934 DWORD dwCurThreadId = ::GetCurrentThreadId();
4935 m_pLangBarMgr->SetModalInput(pSink, dwCurThreadId, 1);
4936}
4937
4939{
4940 if (!m_pLangBarMgr)
4941 return;
4942
4944 if (g_pTrayIconWnd)
4946
4947 DWORD dwCurThreadId = ::GetCurrentThreadId();
4948 m_pLangBarMgr->SetModalInput(NULL, dwCurThreadId, 0);
4949}
4950
4952{
4953 if (g_pTipbarWnd && (g_pTipbarWnd->m_dwShowType & TF_SFT_DESKBAND))
4954 return 0;
4955
4957 return STATUS_TIMEOUT;
4958
4959 DWORD dwFlags1 = 0, dwFlags2 = 0;
4960 if (!TF_GetThreadFlags(dwThreadId, &dwFlags1, &dwFlags2, NULL) && dwFlags2)
4961 return -1;
4962
4963 return TF_CheckThreadInputIdle(dwThreadId, dwMilliseconds);
4964}
4965
4967{
4969 if (pTarget)
4970 return pTarget;
4971
4973
4974 pTarget = new(cicNoThrow) CTipbarThread(this);
4975 if (!pTarget)
4976 return NULL;
4977
4979
4981
4983
4984 if (SUCCEEDED(hr) && !m_Threads.Add(pTarget))
4985 {
4986 pTarget->_UninitItemList(TRUE);
4987 pTarget->m_pTipbarWnd = NULL;
4988 pTarget->_Release();
4989 return NULL;
4990 }
4991
4992 return pTarget;
4993}
4994
4996{
4997 if (g_bWinLogon)
4998 return NULL;
4999
5001 for (size_t iItem = 0; iItem < m_Threads.size(); ++iItem)
5002 {
5003 CTipbarThread *pThread = m_Threads[iItem];
5004 if (pThread && pThread->m_dwThreadId == dwThreadId)
5005 {
5006 pTarget = pThread;
5007 break;
5008 }
5009 }
5010
5011 if (!pTarget)
5012 return NULL;
5013
5014 DWORD dwFlags1, dwFlags2, dwFlags3;
5015 TF_GetThreadFlags(dwThreadId, &dwFlags1, &dwFlags2, &dwFlags3);
5016
5017 if (!dwFlags2 || (dwFlags2 != pTarget->m_dwFlags2) || (dwFlags3 != pTarget->m_dwFlags3))
5018 {
5020 return NULL;
5021 }
5022
5023 return pTarget;
5024}
5025
5027{
5029 return;
5030
5032
5033 HWND hwndFore = ::GetForegroundWindow();
5034 if (!hwndFore)
5035 return;
5036
5038 if (dwThreadId)
5040
5041 m_dwTipbarWndFlags &= ~TIPBAR_ENSURING;
5042}
5043
5045{
5046 if (pFocusThread == m_pFocusThread)
5047 return S_OK;
5048
5051
5052 if (m_pFocusThread)
5053 {
5056 }
5057
5058 m_dwTipbarWndFlags &= ~TIPBAR_ATTACHED;
5059 m_pFocusThread = pFocusThread;
5060 return S_OK;
5061}
5062
5064{
5066 return S_FALSE;
5067
5068 if (m_pFocusThread)
5069 {
5073 }
5074
5075 return S_OK;
5076}
5077
5078void CTipbarWnd::RestoreLastFocus(DWORD *pdwThreadId, BOOL fPrev)
5079{
5080 if (m_pLangBarMgr)
5081 m_pLangBarMgr->RestoreLastFocus(pdwThreadId, fPrev);
5082}
5083
5085{
5086 if (bRemove)
5087 {
5088 ssize_t iItem = m_Threads.Find(pThread);
5089 if (iItem >= 0)
5090 m_Threads.Remove(iItem);
5091 }
5092
5093 if (pThread == m_pFocusThread)
5095
5096 if (pThread == m_pThread)
5097 m_pThread = NULL;
5098
5099 if (pThread == m_pUnknownThread)
5101}
5102
5104{
5105 const size_t cItems = m_Threads.size();
5106
5107 DWORD *pdwThreadIds = new(cicNoThrow) DWORD[cItems];
5108 if (!pdwThreadIds)
5109 return;
5110
5111 for (size_t iItem = 0; iItem < cItems; ++iItem)
5112 {
5113 pdwThreadIds[iItem] = 0;
5114 CTipbarThread* pThread = m_Threads[iItem];
5115 if (pThread && (bFlag || (pThread != m_pFocusThread)))
5116 {
5117 pdwThreadIds[iItem] = pThread->m_dwThreadId;
5118 }
5119 }
5120
5121 for (size_t iItem = 0; iItem < cItems; ++iItem)
5122 {
5123 if (pdwThreadIds[iItem])
5124 OnThreadTerminateInternal(pdwThreadIds[iItem]);
5125 }
5126
5127 delete[] pdwThreadIds;
5128}
5129
5131{
5132 static const QITAB c_tab[] =
5133 {
5136 { NULL }
5137 };
5138 return ::QISearch(this, c_tab, riid, ppvObj);
5139}
5140
5142{
5143 return ++m_cRefs;
5144}
5145
5147{
5148 if (--m_cRefs == 0)
5149 {
5150 delete this;
5151 return 0;
5152 }
5153 return m_cRefs;
5154}
5155
5158{
5159 return E_NOTIMPL;
5160}
5161
5163{
5164 HRESULT hr;
5165 ++m_bInCallOn;
5166 AddRef();
5167 {
5169 if (!m_pFocusThread)
5171 }
5172 --m_bInCallOn;
5173 Release();
5174 return hr;
5175}
5176
5178{
5179 for (size_t iItem = 0; iItem < m_Threads.size(); ++iItem)
5180 {
5181 CTipbarThread *pThread = m_Threads[iItem];
5182 if (pThread && pThread->m_dwThreadId == dwThreadId)
5183 {
5184 m_Threads.Remove(iItem);
5185 pThread->RemoveUIObjs();
5186 CleanUpThreadPointer(pThread, FALSE);
5187 pThread->_UninitItemList(TRUE);
5188 pThread->m_pTipbarWnd = NULL;
5189 pThread->_Release();
5190 break;
5191 }
5192 }
5193
5194 return S_OK;
5195}
5196
5198{
5200 return S_OK;
5201 if (!(m_dwTipbarWndFlags & TIPBAR_CHILD) && (m_dwShowType & TF_SFT_DESKBAND))
5202 return S_OK;
5203
5205 if (pThread)
5206 {
5207 if ((!m_dwUnknown23 || m_dwUnknown23 == dwThreadId) && pThread == m_pFocusThread)
5208 {
5211 KillTimer(6);
5213 }
5214 else
5215 {
5216 pThread->m_dwUnknown34 |= 0x1;
5217 }
5218 }
5219 else
5220 {
5221 for (size_t iItem = 0; iItem < m_ThreadCreatingList.size(); ++iItem)
5222 {
5223 CTipbarThread *pItem = m_ThreadCreatingList[iItem];
5224 if (pItem && pItem->m_dwThreadId == dwThreadId)
5225 {
5226 pItem->m_dwUnknown34 |= 0x1;
5227 }
5228 }
5229 }
5230
5231 return S_OK;
5232}
5233
5235{
5236 switch (uMsg)
5237 {
5238 case WM_NCLBUTTONDOWN:
5239 case WM_NCRBUTTONDOWN:
5240 case WM_NCMBUTTONDOWN:
5241 case WM_LBUTTONUP:
5242 case WM_RBUTTONUP:
5243 case WM_MBUTTONUP:
5244 break;
5245
5246 case WM_NCLBUTTONUP:
5247 case WM_NCRBUTTONUP:
5248 case WM_NCMBUTTONUP:
5249 if (m_pThread)
5250 {
5252 if (pMenuUI)
5253 {
5254 HWND hWnd = *pMenuUI;
5255 if (hWnd)
5256 {
5261 }
5262 }
5263 }
5264 break;
5265
5266 default:
5267 {
5268 if (uMsg == WM_KEYDOWN || uMsg == WM_KEYUP)
5269 {
5270 if (m_pThread)
5272 }
5273 else
5274 {
5275 CancelMenu();
5276 }
5277 break;
5278 }
5279 }
5280
5281 return 0;
5282}
5283
5286{
5287 return E_NOTIMPL;
5288}
5289
5291{
5293 return E_UNEXPECTED;
5294
5296 return E_FAIL;
5297
5298 for (size_t iItem = 0; iItem < m_pFocusThread->m_UIObjects.size(); ++iItem)
5299 {
5300 CTipbarItem* pItem = m_pFocusThread->m_UIObjects[iItem];
5301 if (pItem)
5302 {
5303 if ((pItem->m_dwItemFlags & 0x8) && IsEqualGUID(pItem->m_ItemInfo.guidItem, rguid))
5304 {
5305 pItem->OnUnknown57(prc);
5306 return S_OK;
5307 }
5308 }
5309 }
5310
5311 return E_FAIL;
5312}
5313
5316{
5317 return E_NOTIMPL;
5318}
5319
5320STDMETHODIMP_(BSTR) CTipbarWnd::GetAccName()
5321{
5322 WCHAR szText[256];
5323 ::LoadStringW(g_hInst, IDS_LANGUAGEBAR, szText, _countof(szText));
5324 return ::SysAllocString(szText);
5325}
5326
5327STDMETHODIMP_(void) CTipbarWnd::GetAccLocation(LPRECT lprc)
5328{
5329 GetRect(lprc);
5330}
5331
5332STDMETHODIMP_(void) CTipbarWnd::PaintObject(HDC hDC, LPCRECT prc)
5333{
5335 {
5336 Move(m_X, m_Y, m_CX, m_CY);
5337 m_dwTipbarWndFlags &= ~TIPBAR_UPDATING;
5338 }
5339
5341 {
5343 if (g_pTipbarWnd)
5344 CUIFWindow::PaintObject(hDC, prc);
5345 }
5346}
5347
5348STDMETHODIMP_(DWORD) CTipbarWnd::GetWndStyle()
5349{
5350 return CUIFWindow::GetWndStyle() & ~WS_BORDER;
5351}
5352
5353STDMETHODIMP_(void) CTipbarWnd::Move(INT x, INT y, INT nWidth, INT nHeight)
5354{
5355 CUIFWindow::Move(x, y, nWidth, nHeight);
5356}
5357
5358STDMETHODIMP_(void) CTipbarWnd::OnMouseOutFromWindow(LONG x, LONG y)
5359{
5361 if ((m_dwTipbarWndFlags & 0x40) && (m_dwTipbarWndFlags & 0x80))
5363}
5364
5366STDMETHODIMP_(void) CTipbarWnd::OnCreate(HWND hWnd)
5367{
5368}
5369
5370STDMETHODIMP_(void) CTipbarWnd::OnDestroy(HWND hWnd)
5371{
5372 CancelMenu();
5373
5375 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_DESTROY, GetAccItem());
5376
5379 {
5383 }
5384
5386
5387 if (m_pLangBarMgr)
5389}
5390
5392STDMETHODIMP_(void) CTipbarWnd::OnTimer(WPARAM wParam)
5393{
5394 AddRef();
5395 switch (wParam)
5396 {
5397 case 1:
5398 KillTimer(1);
5400 break;
5401 case 2:
5402 KillTimer(2);
5404 break;
5405 case 3:
5406 KillTimer(3);
5408 break;
5409 case 4:
5410 {
5412 if (status)
5413 {
5414 if (status != STATUS_TIMEOUT)
5415 {
5416 KillTimer(4);
5418 }
5419 }
5420 else if (!m_pThread)
5421 {
5422 KillTimer(4);
5423 DWORD dwOldThreadId = m_dwChangingThreadId;
5425 OnThreadItemChangeInternal(dwOldThreadId);
5426 }
5427 break;
5428 }
5429 case 5:
5430 KillTimer(5);
5432 break;
5433 case 6:
5434 KillTimer(6);
5435 if (m_pFocusThread)
5436 {
5439 {
5440 if (m_pFocusThread)
5442 }
5443 }
5444 break;
5445 case 7:
5446 {
5447 DWORD dwThreadId = 0;
5448 if (KillTimer(7))
5449 {
5450 if (m_pFocusThread)
5452
5455
5456 if (dwThreadId)
5458
5459 InitMetrics();
5460 // FIXME: CTipbarCtrlButtonHolder
5461
5463 SetAlpha(0xFF, TRUE);
5465 }
5466 break;
5467 }
5468 case 8:
5469 KillTimer(8);
5470 UpdateUI(NULL);
5471 break;
5472 case 9:
5473 KillTimer(9);
5474 //FIXME
5476 Show(!!(m_dwUnknown23_5[3] & 0x80000000));
5478 if ((m_dwUnknown23_5[3] & 0x2))
5480 break;
5481 case 10:
5482 KillTimer(10);
5483 MoveToTray();
5484 break;
5485 case 11:
5486 KillTimer(11);
5488 {
5489 if (m_nID)
5490 {
5492 m_nID = 0;
5493 }
5494 }
5495 break;
5496 case 12:
5497 KillTimer(12);
5499 break;
5500 case 13:
5501#ifdef ENABLE_DESKBAND
5502 if (!m_pDeskBand || !m_pDeskBand->m_dwUnknown19)
5503 {
5504 KillTimer(13);
5505 if (!m_pFocusThread)
5507 }
5508#endif
5509 break;
5510 case 14:
5511 if (SetLangBand(TRUE, TRUE))
5512 {
5513 m_dwShowType = TF_SFT_DESKBAND;
5514 KillTimer(14);
5515 }
5516 break;
5517 default:
5518 {
5519 if (10000 <= wParam && wParam < 10050)
5520 {
5522 if (pItem)
5523 {
5524 auto& clsid = pItem->m_clsid;
5525 m_LangBarItemList.SetDemoteLevel(pItem->m_clsid, 2);
5526 if (m_pFocusThread)
5527 {
5528 auto *pThreadItem = m_pFocusThread->GetItem(clsid);
5529 if (pThreadItem)
5530 pThreadItem->AddRemoveMeToUI(FALSE);
5531 }
5532 }
5533 }
5534 break;
5535 }
5536 }
5537
5538 Release();
5539}
5540
5541STDMETHODIMP_(void) CTipbarWnd::OnSysColorChange()
5542{
5543 KillTimer(7);
5545}
5546
5548{
5553 SavePosition();
5554}
5555
5556STDMETHODIMP_(void) CTipbarWnd::OnEndSession(HWND hWnd, WPARAM wParam, LPARAM lParam)
5557{
5558 if (!g_bWinLogon)
5560
5561 if (wParam) // End session?
5562 {
5563 if (lParam & ENDSESSION_LOGOFF)
5564 {
5565 KillTimer(9);
5566 Show(FALSE);
5567 }
5568 else
5569 {
5571
5572 AddRef();
5574 Release();
5575 }
5576 }
5577}
5578
5579STDMETHODIMP_(void) CTipbarWnd::OnUser(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5580{
5581 if (uMsg == WM_USER + 1)
5582 {
5586 }
5587 else if (uMsg == g_wmTaskbarCreated)
5588 {
5590 }
5591}
5592
5594CTipbarWnd::OnWindowPosChanged(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5595{
5596 if (m_pFocusThread)
5597 {
5598 for (size_t iItem = 0; iItem < m_pFocusThread->m_UIObjects.size(); ++iItem)
5599 {
5600 CTipbarItem *pItem = m_pFocusThread->m_UIObjects[iItem];
5601 if (pItem)
5602 pItem->OnUnknown44();
5603 }
5604 }
5605
5606 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
5607}
5608
5610CTipbarWnd::OnWindowPosChanging(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5611{
5613 if (!(pWP->flags & SWP_NOZORDER))
5614 {
5616 pWP->hwndInsertAfter = NULL;
5617 }
5618 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
5619}
5620
5622CTipbarWnd::OnShowWindow(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5623{
5625 {
5626 if (wParam) // Show?
5627 {
5628 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_SHOW, GetAccItem());
5629 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_FOCUS, GetAccItem());
5630 }
5631 else
5632 {
5633 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_HIDE, GetAccItem());
5634 }
5635 }
5636 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
5637}
5638
5640CTipbarWnd::OnSettingChange(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5641{
5642 if (!wParam || wParam == SPI_SETNONCLIENTMETRICS || wParam == SPI_SETHIGHCONTRAST)
5643 {
5644 KillTimer(7);
5646 }
5647 return 0;
5648}
5649
5651CTipbarWnd::OnDisplayChange(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5652{
5654 {
5655 KillTimer(12);
5657 }
5658 return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
5659}
5660
5662CTipbarWnd::OnGetObject(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5663{
5664 if (lParam != -4)
5665 return S_OK;
5667 return E_OUTOFMEMORY;
5668
5671
5672 HRESULT hr = S_OK;
5674 {
5676 if (FAILED(hr))
5677 {
5680 return hr;
5681 }
5682
5683 m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_CREATE, GetAccItem());
5685 }
5686
5687 return hr;
5688}
5689
5690STDMETHODIMP_(BOOL) CTipbarWnd::OnEraseBkGnd(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5691{
5692 return TRUE;
5693}
5694
5695STDMETHODIMP_(void) CTipbarWnd::OnThemeChanged(HWND hWnd, WPARAM wParam, LPARAM lParam)
5696{
5697 CUIFWindow::OnThemeChanged(hWnd, wParam, lParam);
5698}
5699
5700STDMETHODIMP_(void) CTipbarWnd::UpdateUI(LPCRECT prc)
5701{
5702 KillTimer(8);
5703
5705 {
5707 return;
5708 }
5709
5711 {
5712 ++m_bInCallOn;
5713 Move(m_X, m_Y, m_CX, m_CY);
5714 m_dwTipbarWndFlags &= ~TIPBAR_UPDATING;
5715 --m_bInCallOn;
5716 }
5717
5718 CUIFWindow::UpdateUI(NULL);
5719}
5720
5722STDMETHODIMP_(void) CTipbarWnd::HandleMouseMsg(UINT uMsg, LONG x, LONG y)
5723{
5724}
5725
5726/***********************************************************************
5727 * CTipbarThread
5728 */
5729
5731{
5732 m_pTipbarWnd = pTipbarWnd;
5733 m_dwThreadId = 0;
5735 m_cRefs = 1;
5736}
5737
5739{
5740 if (m_pTipbarWnd)
5741 {
5742 RemoveUIObjs();
5744 }
5745
5746 _UninitItemList(1);
5747
5749 {
5752 }
5753}
5754
5756{
5759 return E_FAIL;
5760 if (m_dwFlags1 & 0x8)
5761 return S_OK;
5764 &dwThreadId);
5765}
5766
5769{
5770 return E_NOTIMPL;
5771}
5772
5774{
5775 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5776 {
5777 CTipbarItem* pItem = m_UIObjects[iItem];
5778 if (pItem)
5779 pItem->m_dwItemFlags |= 0x10;
5780 }
5781
5782 HRESULT hr = S_OK;
5783 if (bUnAdvise)
5784 {
5787 }
5788
5789 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5790 {
5791 CTipbarItem* pItem = m_UIObjects[iItem];
5792 if (pItem)
5793 {
5794 if (m_pTipbarWnd)
5796
5797 pItem->ClearConnections();
5798
5799 if (m_pTipbarWnd)
5800 pItem->OnUnknown50();
5801 else
5802 pItem->OnUnknown51();
5803
5804 pItem->OnUnknown59();
5805 pItem->OnUnknown42();
5806 }
5807 }
5808
5810
5812
5813 return hr;
5814}
5815
5817{
5818 for (size_t iItem = 0; iItem < m_Separators.size(); ++iItem)
5819 {
5820 CUIFObject *pItem = m_Separators[iItem];
5821 if (pItem)
5822 m_pTipbarWnd->AddUIObj(pItem);
5823 }
5824}
5825
5827{
5828 for (size_t iItem = 0; iItem < m_Separators.size(); ++iItem)
5829 {
5830 CUIFObject *pItem = m_Separators[iItem];
5831 if (pItem)
5832 {
5833 if (m_pTipbarWnd)
5834 m_pTipbarWnd->RemoveUIObj(pItem);
5835 delete pItem;
5836 }
5837 }
5839}
5840
5842{
5843 _AddRef();
5844
5845 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5846 {
5847 CTipbarItem* pItem = m_UIObjects[iItem];
5848 if (pItem && (pItem->m_dwItemFlags & 0x8))
5849 {
5851 }
5852 }
5853
5855 MyMoveWnd(0, 0);
5856
5857 _Release();
5858}
5859
5861{
5862 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5863 {
5864 CTipbarItem* pItem = m_UIObjects[iItem];
5865 if (pItem)
5866 {
5868 }
5869 }
5871}
5872
5874{
5875 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5876 {
5877 auto *pItem = m_UIObjects[iItem];
5878 if (pItem && IsEqualCLSID(pItem->m_ItemInfo.guidItem, rclsid))
5879 return pItem;
5880 }
5881 return NULL;
5882}
5883
5885{
5887
5888 HGDIOBJ hFontOld = NULL;
5889
5890 HDC hDC = ::GetDC(hWnd);
5892 {
5894 if (hFont)
5895 hFontOld = ::SelectObject(hDC, hFont);
5896 INT cch = ::SysStringLen(bstr);
5897 ::GetTextExtentPoint32W(hDC, bstr, cch, pSize);
5898 if (hFontOld)
5899 ::SelectObject(hDC, hFontOld);
5900 }
5901 else
5902 {
5903 CUIFTheme theme;
5904 theme.m_iPartId = 1;
5905 theme.m_iStateId = 0;
5906 theme.m_pszClassList = L"TOOLBAR";
5907
5908 HFONT hFont = NULL;
5909
5911 {
5912 LOGFONTW lf;
5913 if (SUCCEEDED(::GetThemeFont(theme.m_hTheme, NULL, theme.m_iPartId, 0, 210, &lf)))
5914 {
5916 if (hFont)
5917 hFontOld = ::SelectObject(hDC, hFont);
5918 }
5919
5920 RECT rc;
5921 INT cch = ::SysStringLen(bstr);
5922 ::GetThemeTextExtent(theme.m_hTheme, hDC, theme.m_iPartId, 0, bstr, cch, 0, NULL, &rc);
5923
5924 pSize->cx = rc.right;
5925 pSize->cy = rc.bottom;
5926 }
5927
5928 if (hFontOld)
5929 ::SelectObject(hDC, hFontOld);
5930 if (hFont)
5932 }
5933
5935}
5936
5938{
5939 DWORD dwDirty = 0;
5940 for (size_t iItem = 0; iItem < m_UIObjects.size(); ++iItem)
5941 {
5942 CTipbarItem* pItem = m_UIObjects[iItem];
5943 if (pItem)
5944 dwDirty |= pItem->m_dwDirty;
5945 }
5946 return dwDirty;
5947}
5948
5950{
5951 if (!m_pTipbarWnd)
5952 return FALSE;
5953 return this == m_pTipbarWnd->m_pFocusThread;
5954}
5955
5957{
5958 if (!m_pTipbarWnd)
5959 return FALSE;
5961}
5962
5965{
5966}
5967
5969{
5970 if (--m_cRefs == 0)
5971 {
5972 delete this;
5973 return 0;
5974 }
5975 return m_cRefs;
5976}
5977
5979{
5980 if (!m_pLangBarItemMgr)
5981 return E_FAIL;
5982
5983 DWORD *pdwCoolkies = new(cicNoThrow) DWORD[m_UIObjects.size()];
5984 if (!pdwCoolkies)
5985 return E_OUTOFMEMORY;
5986
5987 const size_t cItems = m_UIObjects.size();
5988 for (size_t iItem = 0; iItem < cItems; ++iItem)
5989 {
5990 CTipbarItem* pItem = m_UIObjects[iItem];
5991 if (pItem)
5992 pdwCoolkies[iItem] = pItem->m_dwCookie;
5993 }
5994
5995 HRESULT hr = m_pLangBarItemMgr->UnadviseItemsSink((LONG)cItems, pdwCoolkies);
5996
5997 delete[] pdwCoolkies;
5998
5999 return hr;
6000}
6001
6003{
6004 if (!m_pTipbarWnd || (m_pTipbarWnd->m_pFocusThread != this))
6005 return;
6006
6007 RECT Rect, rcWorkArea;
6008 m_pTipbarWnd->GetRect(&Rect);
6009 POINT pt = { Rect.left, Rect.top };
6010 cicGetWorkAreaRect(pt, &rcWorkArea);
6011
6013
6014 LONG X0 = Rect.left + xDelta, Y0 = Rect.top + yDelta;
6015 if (m_pTipbarWnd->m_dwTipbarWndFlags & 0x1000)
6016 {
6018 {
6019 X0 = rcWorkArea.right - (3 * m_pTipbarWnd->m_ButtonWidth +
6021 Y0 = 0;
6022 }
6023 else
6024 {
6025 m_pTipbarWnd->m_dwTipbarWndFlags &= ~0x1000;
6026 }
6027 }
6028
6029 if (IsVertical())
6030 {
6034 }
6035 else
6036 {
6040 }
6041
6042 SIZE frameSize = { 0, 0 };
6045
6048}
6049
6050/***********************************************************************
6051 * CTipbarItem
6052 */
6053
6055 CTipbarThread *pThread,
6056 ITfLangBarItem *pLangBarItem,
6057 TF_LANGBARITEMINFO *pItemInfo,
6058 DWORD dwUnknown16)
6059{
6060 m_dwUnknown19[1] = 0;
6061 m_dwUnknown19[2] = 0;
6062 m_dwUnknown19[3] = 0;
6063 m_pTipbarThread = pThread;
6064 m_ItemInfo = *pItemInfo;
6065 m_pLangBarItem = pLangBarItem;
6067 m_dwItemFlags = 0;
6068 m_dwUnknown16 = dwUnknown16;
6069 m_dwDirty = 0x1001F;
6070}
6071
6073{
6074 if (g_pTipbarWnd)
6075 {
6078 }
6079
6080 if (m_pLangBarItem)
6082}
6083
6085{
6086 if (!IsConnected())
6087 return;
6088
6089 OnUnknown41();
6090
6091 m_dwItemFlags |= 0x2;
6092
6094 if (m_dwDirty)
6095 {
6096 if (m_dwDirty & 0x10000)
6098 else
6099 dwStatus = 0;
6100 OnUnknown45(m_dwDirty, dwStatus);
6101 m_dwDirty = 0;
6102 }
6103
6104 if (m_pTipbarThread)
6105 {
6107 if (pTipbarWnd)
6108 {
6109 CTipbarAccessible *pTipbarAccessible = pTipbarWnd->m_pTipbarAccessible;
6110 if (pTipbarAccessible)
6111 pTipbarAccessible->AddAccItem(this);
6112 }
6113 }
6114
6115 OnUnknown42();
6116}
6117
6119{
6120 m_dwItemFlags &= ~0x2;
6121
6122 if (g_pTipbarWnd)
6123 {
6125 if (pAccessible)
6126 pAccessible->RemoveAccItem(this);
6127 }
6128}
6129
6131{
6132 if (!IsConnected())
6133 return;
6134
6136
6137 if (!IsConnected())
6138 return;
6139
6141
6143 if (bFlag)
6144 OnUnknown46(pTipbarWnd ? pTipbarWnd->GetWindow() : NULL);
6145 else
6146 OnUnknown47(pTipbarWnd ? pTipbarWnd->GetWindow() : NULL);
6147}
6148
6150{
6151 return (!(m_dwItemFlags & 0x10) && m_pTipbarThread && m_pTipbarThread->m_pTipbarWnd &&
6153}
6154
6156{
6158 if (m_pLangBarItem)
6159 {
6162 }
6163}
6164
6167{
6168 if (!g_bIntelliSense)
6169 return;
6170
6171 if (!m_pTipbarThread)
6172 return;
6173
6175 if (!pTipbarWnd)
6176 return;
6177
6178 //FIXME
6179}
6180
6181STDMETHODIMP_(BOOL) CTipbarItem::DoAccDefaultAction()
6182{
6183 if (!m_pTipbarThread)
6184 return FALSE;
6186 if (!pTipbarWnd)
6187 return FALSE;
6188 pTipbarWnd->StartDoAccDefaultActionTimer(this);
6189 return TRUE;
6190}
6191
6193STDMETHODIMP_(void) CTipbarItem::OnUpdateHandler(ULONG, ULONG)
6194{
6195}
6196
6197STDMETHODIMP_(void) CTipbarItem::GetAccLocation(LPRECT prc)
6198{
6200}
6201
6202STDMETHODIMP_(BSTR) CTipbarItem::GetAccName()
6203{
6204 return ::SysAllocString(m_ItemInfo.szDescription);
6205}
6206
6207STDMETHODIMP_(LPCWSTR) CTipbarItem::GetToolTip()
6208{
6209 OnUnknown41();
6210
6211 if (!(m_dwItemFlags & 0x1))
6212 {
6213 m_dwItemFlags |= 0x1;
6214
6215 BSTR bstrString;
6216 if (FAILED(m_pLangBarItem->GetTooltipString(&bstrString)))
6217 return NULL;
6218
6219 if (bstrString)
6220 {
6221 OnUnknown53(bstrString);
6222 ::SysFreeString(bstrString);
6223 }
6224 }
6225
6226 LPCWSTR pszToolTip = OnUnknown55();
6227
6228 OnUnknown42();
6229
6230 return pszToolTip;
6231}
6232
6234{
6235 if (!IsConnected())
6236 return S_OK;
6237
6238 m_dwDirty |= dwDirty;
6239 m_dwItemFlags |= 0x20;
6240
6241 if ((dwDirty & 0x10000) || (m_dwItemFlags & 0x6))
6242 {
6243 if (m_pTipbarThread)
6244 {
6246 if (pTipBarWnd && *pTipBarWnd)
6247 {
6248 pTipBarWnd->KillTimer(6);
6249 pTipBarWnd->SetTimer(6, g_uTimerElapseONUPDATECALLED);
6250 }
6251 }
6252 }
6253
6254 return S_OK;
6255}
6256
6258{
6259 if (!m_pTipbarThread)
6260 return;
6263}
6264
6265/***********************************************************************
6266 * GetTipbarInternal
6267 */
6269{
6270 BOOL bParent = !!(dwFlags & 0x80000000);
6271 g_bWinLogon = !!(dwFlags & 0x1);
6272
6273 InitFromReg();
6274
6275 if (!g_bShowTipbar)
6276 return FALSE;
6277
6278 if (bParent)
6279 {
6281 if (!g_pTrayIconWnd)
6282 return FALSE;
6284 }
6285
6287 if (!g_pTipbarWnd || !g_pTipbarWnd->Initialize())
6288 return FALSE;
6289
6290 g_pTipbarWnd->Init(!bParent, pDeskBand);
6291 g_pTipbarWnd->CreateWnd(hWnd);
6292
6293 ::SetWindowText(*g_pTipbarWnd, TEXT("TF_FloatingLangBar_WndTitle"));
6294
6295 DWORD dwOldStatus = 0;
6296 if (!bParent)
6297 {
6299 g_pTipbarWnd->m_pLangBarMgr->ShowFloating(TF_SFT_DESKBAND);
6300 }
6301
6305
6306 if (!bParent && (dwOldStatus & TF_SFT_DESKBAND))
6308
6310 return TRUE;
6311}
6312
6313/***********************************************************************
6314 * GetLibTls (MSUTB.@)
6315 *
6316 * @implemented
6317 */
6320{
6321 TRACE("()\n");
6322 return &g_libTLS;
6323}
6324
6325/***********************************************************************
6326 * GetPopupTipbar (MSUTB.@)
6327 *
6328 * @implemented
6329 */
6332{
6333 TRACE("(%p, %d)\n", hWnd, fWinLogon);
6334
6335 if (!fWinLogon)
6337
6338 return GetTipbarInternal(hWnd, fWinLogon | 0x80000000, NULL);
6339}
6340
6341/***********************************************************************
6342 * SetRegisterLangBand (MSUTB.@)
6343 *
6344 * @implemented
6345 */
6348{
6349 TRACE("(%d)\n", bRegister);
6350
6351 if (!g_bEnableDeskBand || !(g_dwOSInfo & CIC_OSINFO_XPPLUS)) // Desk band is for XP+
6352 return E_FAIL;
6353
6354 BOOL bDeskBand = IsDeskBandFromReg();
6355 if (bDeskBand == bRegister)
6356 return S_OK;
6357
6358 SetDeskBandToReg(bRegister);
6359
6360 if (!RegisterComCat(CLSID_MSUTBDeskBand, CATID_DeskBand, bRegister))
6361 return TF_E_NOLOCK;
6362
6363 return S_OK;
6364}
6365
6366/***********************************************************************
6367 * ClosePopupTipbar (MSUTB.@)
6368 *
6369 * @implemented
6370 */
6373{
6374 TRACE("()\n");
6375
6377 return;
6378
6380
6381 if (g_pTipbarWnd)
6382 {
6387 }
6388
6389 if (g_pTrayIconWnd)
6390 {
6392 delete g_pTrayIconWnd;
6394 }
6395
6397
6399}
6400
6401/***********************************************************************
6402 * DllRegisterServer (MSUTB.@)
6403 *
6404 * @implemented
6405 */
6407{
6408 TRACE("()\n");
6409 return gModule.DllRegisterServer(FALSE);
6410}
6411
6412/***********************************************************************
6413 * DllUnregisterServer (MSUTB.@)
6414 *
6415 * @implemented
6416 */
6418{
6419 TRACE("()\n");
6420 return gModule.DllUnregisterServer(FALSE);
6421}
6422
6423/***********************************************************************
6424 * DllCanUnloadNow (MSUTB.@)
6425 *
6426 * @implemented
6427 */
6429{
6430 TRACE("()\n");
6431 return gModule.DllCanUnloadNow() && (g_DllRefCount == 0);
6432}
6433
6434/***********************************************************************
6435 * DllGetClassObject (MSUTB.@)
6436 *
6437 * @implemented
6438 */
6440{
6441 TRACE("()\n");
6442 return gModule.DllGetClassObject(rclsid, riid, ppv);
6443}
6444
6448 REFCLSID rclsid,
6449 LPUNKNOWN pUnkOuter,
6450 DWORD dwClsContext,
6451 REFIID iid,
6452 LPVOID *ppv)
6453{
6458 return cicRealCoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, ppv);
6459}
6460
6461BEGIN_OBJECT_MAP(ObjectMap)
6462#ifdef ENABLE_DESKBAND
6463 OBJECT_ENTRY(CLSID_MSUTBDeskBand, CDeskBand) // FIXME: Implement this
6464#endif
6466
6468{
6469 // Do nothing
6470}
6471
6474{
6476
6477 g_hInst = hinstDLL;
6478
6480
6482 cicInitUIFLib();
6483
6485
6486 g_wmTaskbarCreated = RegisterWindowMessageW(L"TaskbarCreated");
6487
6488 gModule.Init(ObjectMap, hinstDLL, NULL);
6490
6491 return TRUE;
6492}
6493
6496{
6497 cicDoneUIFLib();
6498 TFUninitLib();
6500 gModule.Term();
6501}
6502
6506 _In_ HINSTANCE hinstDLL,
6509{
6510 switch (dwReason)
6511 {
6512 case DLL_PROCESS_ATTACH:
6513 {
6514 TRACE("(%p, %lu, %p)\n", hinstDLL, dwReason, lpvReserved);
6515 if (!ProcessAttach(hinstDLL))
6516 {
6517 ProcessDetach(hinstDLL);
6518 return FALSE;
6519 }
6520 break;
6521 }
6522 case DLL_PROCESS_DETACH:
6523 {
6524 ProcessDetach(hinstDLL);
6525 break;
6526 }
6527 }
6528 return TRUE;
6529}
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
STDAPI DllRegisterServer(void)
Definition: misc.cpp:161
STDAPI DllUnregisterServer(void)
Definition: misc.cpp:177
HRESULT WINAPI DllCanUnloadNow(void)
Definition: misc.cpp:154
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:97
#define STDAPI
Definition: basetyps.h:41
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
#define STDMETHOD(m)
Definition: basetyps.h:62
HBITMAP hbmp
EXTERN_C HRESULT cicRealCoCreateInstance(_In_ REFCLSID rclsid, _In_ LPUNKNOWN pUnkOuter, _In_ DWORD dwClsContext, _In_ REFIID iid, _Out_ LPVOID *ppv)
Definition: cicbase.cpp:206
EXTERN_C void cicGetOSInfo(LPUINT puACP, LPDWORD pdwOSInfo)
Definition: cicbase.cpp:82
EXTERN_C BOOL TFInitLib(FN_CoCreateInstance fnCoCreateInstance)
Definition: cicbase.cpp:251
#define cicNoThrow
Definition: cicbase.h:34
#define CIC_OSINFO_XPPLUS
Definition: cicbase.h:51
void cicInitUIFLib(void)
Definition: cicuif.cpp:5459
BOOL cicGetIconBitmaps(HICON hIcon, HBITMAP *hbm1, HBITMAP *hbm2, const SIZE *pSize)
Definition: cicuif.cpp:1375
BOOL cicIsFullScreenSize(HWND hWnd)
Definition: cicuif.cpp:5365
void cicGetScreenRect(POINT pt, LPRECT prc)
Definition: cicuif.cpp:5353
void cicGetWorkAreaRect(POINT pt, LPRECT prc)
Definition: cicuif.cpp:5340
void cicDoneUIFLib(void)
Definition: cicuif.cpp:5466
@ UIF_WINDOW_NOMOUSEMSG
Definition: cicuif.h:503
@ UIF_WINDOW_CHILD
Definition: cicuif.h:494
@ UIF_WINDOW_LAYOUTRTL
Definition: cicuif.h:502
@ UIF_WINDOW_TOPMOST
Definition: cicuif.h:495
@ UIF_WINDOW_TOOLWINDOW
Definition: cicuif.h:496
@ UIF_WINDOW_WORKAREA
Definition: cicuif.h:500
@ UIF_WINDOW_MONITOR
Definition: cicuif.h:501
@ UIF_WINDOW_DLGFRAME
Definition: cicuif.h:497
@ UIF_WINDOW_ENABLETHEMED
Definition: cicuif.h:507
@ UIF_WINDOW_SHADOW
Definition: cicuif.h:499
@ UIF_WINDOW_TOOLTIP
Definition: cicuif.h:498
void TFUninitLib_Thread(PCIC_LIBTHREAD pLibThread)
Definition: cicutb.h:44
CButtonIconItem(CTrayIconWnd *pWnd, DWORD dwUnknown24)
Definition: msutb.cpp:3119
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:1969
BOOL Init(UINT uId, DWORD dwFlags, HBITMAP hbmp, HBITMAP hbmpMask, const WCHAR *pch, ULONG cch, ITfMenu *pMenu)
Definition: msutb.cpp:1993
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:2019
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:1874
STDMETHOD() AddMenuItem(UINT uId, DWORD dwFlags, HBITMAP hbmp, HBITMAP hbmpMask, const WCHAR *pch, ULONG cch, ITfMenu **ppSubMenu) override
Definition: msutb.cpp:1918
STDMETHOD() QueryInterface(REFIID riid, LPVOID *ppvObj) override
Definition: msutb.cpp:1883
STDMETHOD_(CCicLibMenuItem *, CreateMenuItem)()
Language Bar international item.
Definition: msutb.cpp:1277
CLBarInatItem(DWORD dwThreadId)
Definition: msutb.cpp:3761
DWORD m_dwThreadId
Definition: msutb.cpp:1280
STDMETHOD() GetText(BSTR *pbstr) override
Definition: msutb.cpp:3786
STDMETHOD() OnMenuSelect(INT nCommandId)
Definition: msutb.cpp:3835
STDMETHOD() InitMenu(ITfMenu *pMenu) override
Definition: msutb.cpp:3799
STDMETHOD() GetIcon(HICON *phIcon) override
Definition: msutb.cpp:3776
TF_LANGBARITEMINFO m_NewUIInfo
Definition: msutb.cpp:1208
virtual ~CLBarItemBase()
Definition: msutb.cpp:3467
HRESULT GetInfo(TF_LANGBARITEMINFO *pInfo)
Definition: msutb.cpp:3535
HRESULT AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie)
Definition: msutb.cpp:3474
HRESULT GetStatus(DWORD *pdwStatus)
Definition: msutb.cpp:3541
LONG m_cRefs
Definition: msutb.cpp:1210
HRESULT GetTooltipString(BSTR *pbstrToolTip)
Definition: msutb.cpp:3552
WCHAR m_szToolTipText[256]
Definition: msutb.cpp:1209
void InitNuiInfo(REFIID clsidService, REFGUID guidItem, DWORD dwStyle, DWORD ulSort, LPCWSTR Source)
Definition: msutb.cpp:3502
HRESULT UnadviseSink(DWORD dwCookie)
Definition: msutb.cpp:3488
HRESULT Show(BOOL fShow)
Definition: msutb.cpp:3547
DWORD m_dwItemStatus
Definition: msutb.cpp:1207
ITfLangBarItemSink * m_pLangBarItemSink
Definition: msutb.cpp:1211
HRESULT ShowInternal(BOOL bShow, BOOL bUpdate)
Definition: msutb.cpp:3517
STDMETHOD() OnClick(TfLBIClick click, POINT pt, LPCRECT prc) override
@unimplemented
Definition: msutb.cpp:3688
STDMETHOD() AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie) override
Definition: msutb.cpp:3744
STDMETHOD() QueryInterface(REFIID riid, void **ppvObject) override
Definition: msutb.cpp:3660
STDMETHOD() GetStatus(DWORD *pdwStatus) override
Definition: msutb.cpp:3729
STDMETHOD() GetInfo(TF_LANGBARITEMINFO *pInfo) override
Definition: msutb.cpp:3724
STDMETHOD() GetTooltipString(BSTR *pbstrToolTip) override
Definition: msutb.cpp:3739
STDMETHOD_(ULONG, Release)() override
STDMETHOD() InitMenu(ITfMenu *pMenu) override
Definition: msutb.cpp:3701
~CLBarItemButtonBase() override
Definition: msutb.cpp:3651
STDMETHOD() UnadviseSink(DWORD dwCookie) override
Definition: msutb.cpp:3752
STDMETHOD() Show(BOOL fShow) override
Definition: msutb.cpp:3734
STDMETHOD() GetIcon(HICON *phIcon) override
Definition: msutb.cpp:3711
STDMETHOD() GetText(BSTR *pbstr) override
Definition: msutb.cpp:3716
STDMETHOD_(ULONG, AddRef)() override
STDMETHOD() OnMenuSelect(UINT wID) override
Definition: msutb.cpp:3706
void SaveItem(CicRegKey *pRegKey, const LANGBARITEMSTATE *pState)
Definition: msutb.cpp:4034
BOOL SetDemoteLevel(REFCLSID rclsid, DWORD dwDemoteLevel)
Definition: msutb.cpp:3953
BOOL IsStartedIntentionally(REFCLSID rclsid)
Definition: msutb.cpp:3918
LANGBARITEMSTATE * AddItem(REFCLSID rclsid)
Definition: msutb.cpp:3926
UINT_PTR FindDemotingTimerId()
Definition: msutb.cpp:4113
LANGBARITEMSTATE * GetItemStateFromTimerId(UINT_PTR nTimerID)
Definition: msutb.cpp:3987
LANGBARITEMSTATE * FindItem(REFCLSID rclsid)
Definition: msutb.cpp:3976
void StartDemotingTimer(REFCLSID rclsid, BOOL bIntentional)
Definition: msutb.cpp:4072
STDMETHOD_(BOOL, OnDelayMsg)(UINT uMsg) override
CMainIconItem(CTrayIconWnd *pWnd)
@implemented
Definition: msutb.cpp:3155
BOOL Init(HWND hWnd)
@implemented
Definition: msutb.cpp:3161
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:2799
CUTBMenuItem * InsertItem(CUTBMenuWnd *pMenuUI, INT nCommandId, INT nStringID)
Definition: msutb.cpp:2779
CModalMenu()
Definition: msutb.cpp:990
void CancelMenu()
Definition: msutb.cpp:2804
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:2573
STDMETHOD() get_accDefaultAction(VARIANT varID, BSTR *action)
Definition: msutb.cpp:2410
virtual ~CTipbarAccessible()
Definition: msutb.cpp:2078
CTipbarAccessible(CTipbarAccItem *pItem)
Definition: msutb.cpp:2066
STDMETHOD() put_accName(VARIANT varID, BSTR name)
Definition: msutb.cpp:2568
INT GetIDOfItem(CTipbarAccItem *pTarget)
Definition: msutb.cpp:2147
STDMETHOD() get_accChildCount(LONG *pcountChildren)
Definition: msutb.cpp:2276
STDMETHOD() accDoDefaultAction(VARIANT varID)
Definition: msutb.cpp:2558
STDMETHOD_(ULONG, AddRef)()
HRESULT RemoveAccItem(CTipbarAccItem *pItem)
Definition: msutb.cpp:2122
STDMETHOD() get_accHelp(VARIANT varID, BSTR *help)
Definition: msutb.cpp:2364
STDMETHOD() get_accFocus(VARIANT *pvarID)
Definition: msutb.cpp:2382
STDMETHOD() get_accKeyboardShortcut(VARIANT varID, BSTR *shortcut)
Definition: msutb.cpp:2377
BOOL AddAccItem(CTipbarAccItem *pItem)
Definition: msutb.cpp:2117
STDMETHOD() get_accValue(VARIANT varID, BSTR *pszValue)
Definition: msutb.cpp:2312
CTipbarAccItem * AccItemFromID(INT iItem)
Definition: msutb.cpp:2140
void NotifyWinEvent(DWORD event, CTipbarAccItem *pItem)
Definition: msutb.cpp:2170
void ClearAccItems()
Definition: msutb.cpp:2135
BOOL m_bInitialized
Definition: msutb.cpp:770
STDMETHOD() get_accParent(IDispatch **ppdispParent)
Definition: msutb.cpp:2271
STDMETHOD() get_accState(VARIANT varID, VARIANT *state)
Definition: msutb.cpp:2350
STDMETHOD() GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: msutb.cpp:2221
STDMETHOD() Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: msutb.cpp:2250
STDMETHOD() accLocation(LONG *left, LONG *top, LONG *width, LONG *height, VARIANT varID)
Definition: msutb.cpp:2450
STDMETHOD() accSelect(LONG flagsSelect, VARIANT varID)
Definition: msutb.cpp:2430
STDMETHOD() get_accDescription(VARIANT varID, BSTR *description)
Definition: msutb.cpp:2327
STDMETHOD() accNavigate(LONG dir, VARIANT varStart, VARIANT *pvarEnd)
Definition: msutb.cpp:2474
STDMETHOD() GetTypeInfoCount(UINT *pctinfo)
Definition: msutb.cpp:2213
void SetWindow(HWND hWnd)
Definition: msutb.cpp:2179
STDMETHOD() QueryInterface(REFIID riid, void **ppvObject)
Definition: msutb.cpp:2184
IAccessible * m_pStdAccessible
Definition: msutb.cpp:768
STDMETHOD() get_accRole(VARIANT varID, VARIANT *role)
Definition: msutb.cpp:2336
STDMETHOD() get_accSelection(VARIANT *pvarID)
Definition: msutb.cpp:2390
STDMETHOD_(ULONG, Release)()
LONG_PTR CreateRefToAccObj(WPARAM wParam)
Definition: msutb.cpp:2157
STDMETHOD() get_accName(VARIANT varID, BSTR *pszName)
Definition: msutb.cpp:2297
STDMETHOD() GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: msutb.cpp:2238
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:2287
STDMETHOD() accHitTest(LONG left, LONG top, VARIANT *pvarID)
Definition: msutb.cpp:2523
HRESULT Initialize()
Definition: msutb.cpp:2094
STDMETHOD() get_accHelpTopic(BSTR *helpfile, VARIANT varID, LONG *pidTopic)
Definition: msutb.cpp:2369
BOOL DoDefaultActionReal(INT nID)
Definition: msutb.cpp:2162
HRESULT EnsureCoInit()
Definition: msutb.cpp:901
BOOL m_bInDebugMenu
Definition: msutb.cpp:1062
CTipbarGripper(CTipbarWnd *pTipbarWnd, LPCRECT prc, DWORD style)
Definition: msutb.cpp:3866
CTipbarWnd * m_pTipbarWnd
Definition: msutb.cpp:1061
STDMETHOD_(void, OnRButtonUp)(LONG x
void AddRemoveMeToUI(BOOL bFlag)
Definition: msutb.cpp:6130
STDMETHOD() OnUnknown46(CUIFWindow *pWindow)
Definition: msutb.cpp:1407
DWORD m_dwCookie
Definition: msutb.cpp:1363
STDMETHOD() OnUpdate(DWORD dwDirty)
Definition: msutb.cpp:6233
void StartDemotingTimer(BOOL bStarted)
@unimplemented
Definition: msutb.cpp:6166
DWORD m_dwDirty
Definition: msutb.cpp:1371
STDMETHOD_(void, OnUnknown59)()
Definition: msutb.cpp:1420
TF_LANGBARITEMINFO m_ItemInfo
Definition: msutb.cpp:1364
CTipbarItem(CTipbarThread *pThread, ITfLangBarItem *pLangBarItem, TF_LANGBARITEMINFO *pItemInfo, DWORD dwUnknown16)
Definition: msutb.cpp:6054
DWORD m_dwUnknown18[2]
Definition: msutb.cpp:1369
STDMETHOD() OnUnknown42()
Definition: msutb.cpp:1401
ITfLangBarItem * m_pLangBarItem
Definition: msutb.cpp:1368
void ClearConnections()
Definition: msutb.cpp:6155
BOOL IsConnected()
Definition: msutb.cpp:6149
STDMETHOD() OnUnknown52()
Definition: msutb.cpp:1413
DWORD m_dwUnknown19[4]
Definition: msutb.cpp:1372
STDMETHOD() OnUnknown40()
Definition: msutb.cpp:1399
STDMETHOD_(BOOL, DoAccDefaultAction)() override
STDMETHOD_(BSTR, GetAccName)() override
STDMETHOD() OnUnknown50()
Definition: msutb.cpp:1411
void _RemovedToUI()
Definition: msutb.cpp:6118
STDMETHOD() OnUnknown57(LPRECT prc)
Definition: msutb.cpp:1418
STDMETHOD() OnUnknown48()
Definition: msutb.cpp:1409
DWORD dwStatus
Definition: msutb.cpp:1405
STDMETHOD() OnUnknown63()
Definition: msutb.cpp:1424
STDMETHOD_(LPCWSTR, OnUnknown55)()
Definition: msutb.cpp:1415
STDMETHOD() OnUnknown58()
Definition: msutb.cpp:1419
DWORD m_dwUnknown17
Definition: msutb.cpp:1366
STDMETHOD() OnUnknown56()
Definition: msutb.cpp:1416
CTipbarThread * m_pTipbarThread
Definition: msutb.cpp:1367
void _AddedToUI()
Definition: msutb.cpp:6084
~CTipbarItem() override
Definition: msutb.cpp:6072
STDMETHOD_(void, OnUnknown60)()
Definition: msutb.cpp:1421
DWORD m_dwUnknown16
Definition: msutb.cpp:1365
DWORD m_dwItemFlags
Definition: msutb.cpp:1370
STDMETHOD() OnUnknown49()
Definition: msutb.cpp:1410
STDMETHOD_(void, GetAccLocation)(LPRECT prc) override
STDMETHOD_(void, OnUnknown62)(HWND)
Definition: msutb.cpp:1423
STDMETHOD() OnUnknown43()
Definition: msutb.cpp:1402
STDMETHOD_(LPCWSTR, GetToolTip)()
STDMETHOD_(void, OnUnknown61)(HWND)
Definition: msutb.cpp:1422
STDMETHOD() OnUnknown51()
Definition: msutb.cpp:1412
STDMETHOD() OnUnknown47(CUIFWindow *pWindow)
Definition: msutb.cpp:1408
STDMETHOD() OnUnknown41()
Definition: msutb.cpp:1400
STDMETHOD() OnUnknown44()
Definition: msutb.cpp:1404
void MyClientToScreen(LPRECT prc)
Definition: msutb.cpp:1394
void MyClientToScreen(LPPOINT ppt, LPRECT prc)
Definition: msutb.cpp:6257
STDMETHOD() OnUnknown53(BSTR bstr)
Definition: msutb.cpp:1414
CTipbarThread(CTipbarWnd *pTipbarWnd)
Definition: msutb.cpp:5730
HRESULT Init(DWORD dwThreadId)
Definition: msutb.cpp:5755
DWORD m_dwThreadId
Definition: msutb.cpp:1304
CTipbarItem * GetItem(REFCLSID rclsid)
Definition: msutb.cpp:5873
void AddUIObjs()
Definition: msutb.cpp:5841
DWORD m_dwFlags2
Definition: msutb.cpp:1306
CTipbarWnd * m_pTipbarWnd
Definition: msutb.cpp:1299
ITfLangBarItemMgr * m_pLangBarItemMgr
Definition: msutb.cpp:1300
void MyMoveWnd(LONG xDelta, LONG yDelta)
Definition: msutb.cpp:6002
virtual ~CTipbarThread()
Definition: msutb.cpp:5738
LONG _Release()
Definition: msutb.cpp:5968
DWORD IsDirtyItem()
Definition: msutb.cpp:5937
void GetTextSize(BSTR bstr, LPSIZE pSize)
Definition: msutb.cpp:5884
void RemoveAllSeparators()
Definition: msutb.cpp:5826
HRESULT _UnadviseItemsSink()
Definition: msutb.cpp:5978
BOOL IsFocusThread()
Definition: msutb.cpp:5949
HRESULT InitItemList()
@unimplemented
Definition: msutb.cpp:5768
void LocateItems()
@unimplemented
Definition: msutb.cpp:5964
void AddAllSeparators()
Definition: msutb.cpp:5816
HRESULT CallOnUpdateHandler()
@unimplemented
Definition: msutb.cpp:1350
BOOL SetFocus(CTipbarBalloonItem *pTarget)
@unimplemented
Definition: msutb.cpp:1344
HRESULT _UninitItemList(BOOL bUnAdvise)
Definition: msutb.cpp:5773
LONG _AddRef()
Definition: msutb.cpp:1340
CicArray< CUIFObject * > m_Separators
Definition: msutb.cpp:1302
DWORD m_dwFlags1
Definition: msutb.cpp:1305
DWORD m_dwUnknown34
Definition: msutb.cpp:1310
LONG m_cRefs
Definition: msutb.cpp:1311
CicArray< CTipbarItem * > m_UIObjects
Definition: msutb.cpp:1301
void RemoveUIObjs()
Definition: msutb.cpp:5860
DWORD m_dwUnknown32
Definition: msutb.cpp:1303
BOOL IsVertical()
Definition: msutb.cpp:5956
DWORD m_dwFlags3
Definition: msutb.cpp:1309
STDMETHOD_(ULONG, AddRef)()
~CTipbarWnd() override
Definition: msutb.cpp:4189
CUIFWindow * GetWindow()
Definition: msutb.cpp:1511
HFONT CreateVerticalFont()
Definition: msutb.cpp:4607
CTipbarThread * _FindThread(DWORD dwThreadId)
Definition: msutb.cpp:4995
void UpdateVerticalFont()
Definition: msutb.cpp:4638
CTipbarThread * m_pThread
Definition: msutb.cpp:1459
STDMETHOD() OnThreadItemChange(DWORD dwThreadId) override
Definition: msutb.cpp:5197
LONG m_X
Definition: msutb.cpp:1485
void StartModalInput(ITfLangBarEventSink *pSink, DWORD dwThreadId)
Definition: msutb.cpp:4925
HFONT m_hMarlettFont
Definition: msutb.cpp:1476
BOOL CheckExcludeCaptionButtonMode(LPRECT prc1, LPCRECT prc2)
Definition: msutb.cpp:4595
STDMETHOD_(void, UpdateUI)(LPCRECT prc) override
INT GetTipbarHeight()
Definition: msutb.cpp:4449
STDMETHOD_(HRESULT, OnGetObject)(HWND hWnd
MARGINS m_Margins
Definition: msutb.cpp:1491
WPARAM wParam
Definition: msutb.cpp:1626
BOOL IsInItemChangeOrDirty(CTipbarThread *pTarget)
Definition: msutb.cpp:4368
void SetAlpha(BYTE bAlpha, BOOL bFlag)
@unimplemented
Definition: msutb.cpp:4751
void MoveToTray()
@unimplemented
Definition: msutb.cpp:4717
void AdjustPosOnDisplayChange()
Definition: msutb.cpp:4490
STDMETHOD_(DWORD, GetWndStyle)() override
INT m_nID
Definition: msutb.cpp:1490
STDMETHOD_(void, OnTimer)(WPARAM wParam) override
friend class CTipbarThread
Definition: msutb.cpp:1499
void ClearLBItemList()
Definition: msutb.cpp:4600
HRESULT AttachFocusThread()
Definition: msutb.cpp:5063
void OnTerminateToolbar()
Definition: msutb.cpp:5547
LONG m_ButtonWidth
Definition: msutb.cpp:1469
friend class CUTBContextMenu
Definition: msutb.cpp:1497
void InitHighContrast()
Definition: msutb.cpp:4249
STDMETHOD_(void, OnThemeChanged)(HWND hWnd
STDMETHOD() OnModalInput(DWORD dwThreadId, UINT uMsg, WPARAM wParam, LPARAM lParam) override
Definition: msutb.cpp:5234
BOOL SetLangBand(BOOL bDeskBand, BOOL bFlag2)
Definition: msutb.cpp:4755
HKL GetFocusKeyboardLayout()
Definition: msutb.cpp:4680
CTipbarAccessible * m_pTipbarAccessible
Definition: msutb.cpp:1489
STDMETHOD() GetItemFloatingRect(DWORD dwThreadId, REFGUID rguid, RECT *prc) override
Definition: msutb.cpp:5290
CModalMenu * m_pModalMenu
Definition: msutb.cpp:1458
BOOL StartDoAccDefaultActionTimer(CTipbarItem *pTarget)
Definition: msutb.cpp:4912
void EnsureFocusThread()
Definition: msutb.cpp:5026
BOOL IsHKLToSkipRedrawOnNoItem()
Definition: msutb.cpp:4362
INT INT nWidth
Definition: msutb.cpp:1620
friend class CTipbarGripper
Definition: msutb.cpp:1498
DWORD m_dwUnknown23_5[4]
Definition: msutb.cpp:1492
void StopModalInput(DWORD dwThreadId)
Definition: msutb.cpp:4938
HRESULT OnThreadTerminateInternal(DWORD dwThreadId)
Definition: msutb.cpp:5177
void ShowOverScreenSizeBalloon()
@unimplemented
Definition: msutb.cpp:4658
LONG m_cRefs
Definition: msutb.cpp:1496
INT GetCtrlButtonWidth()
@unimplemented
Definition: msutb.cpp:4421
STDMETHOD_(LRESULT, OnShowWindow)(HWND hWnd
void DestroyWnd()
Definition: msutb.cpp:4674
LONG m_CY
Definition: msutb.cpp:1488
HRESULT SetFocusThread(CTipbarThread *pFocusThread)
Definition: msutb.cpp:5044
friend VOID WINAPI ClosePopupTipbar(VOID)
Definition: msutb.cpp:6372
CTipbarAccItem * GetAccItem()
Definition: msutb.cpp:1516
void LocateCtrlButtons()
@unimplemented
Definition: msutb.cpp:4486
friend LONG MyWaitForInputIdle(DWORD dwThreadId, DWORD dwMilliseconds)
Definition: msutb.cpp:4951
STDMETHOD_(void, OnSysColorChange)() override
UINT uMsg
Definition: msutb.cpp:1627
void StartBackToAlphaTimer()
Definition: msutb.cpp:4906
void DestroyOverScreenSizeBalloon()
Definition: msutb.cpp:4663
STDMETHOD_(ULONG, Release)()
void TerminateAllThreads(BOOL bFlag)
Definition: msutb.cpp:5103
CUIFWndFrame * m_pWndFrame
Definition: msutb.cpp:1462
STDMETHOD_(void, GetAccLocation)(LPRECT lprc) override
STDMETHOD() QueryInterface(REFIID riid, void **ppvObj)
Definition: msutb.cpp:5130
CicArray< CTipbarThread * > m_Threads
Definition: msutb.cpp:1465
void ShowContextMenu(POINT pt, LPCRECT prc, BOOL bFlag)
Definition: msutb.cpp:4865
void InitMetrics()
Definition: msutb.cpp:4261
BOOL IsFullScreenWindow(HWND hWnd)
Definition: msutb.cpp:4343
DWORD m_dwUnknown20
Definition: msutb.cpp:1461
STDMETHOD_(LRESULT, OnWindowPosChanged)(HWND hWnd
INT m_cxSmallIcon
Definition: msutb.cpp:1472
ITfLangBarMgr_P * m_pLangBarMgr
Definition: msutb.cpp:1478
void AddThreadToThreadCreatingList(CTipbarThread *pThread)
Definition: msutb.cpp:4375
CTipbarCtrlButtonHolder * m_pTipbarCtrlButtonHolder
Definition: msutb.cpp:1480
CUIFWindow * m_pBalloon
Definition: msutb.cpp:1482
void UnInit()
Definition: msutb.cpp:4318
INT m_cyDlgFrameX2
Definition: msutb.cpp:1475
CTipbarThread * _CreateThread(DWORD dwThreadId)
Definition: msutb.cpp:4966
CicArray< CTipbarThread * > m_ThreadCreatingList
Definition: msutb.cpp:1466
void MyClientToScreen(LPPOINT lpPoint, LPRECT prc)
Definition: msutb.cpp:4725
BOOL KillTimer(UINT_PTR uIDEvent)
Definition: msutb.cpp:4709
DWORD m_dwUnknown23
Definition: msutb.cpp:1479
DWORD m_dwSinkCookie
Definition: msutb.cpp:1457
DWORD m_dwUnknown23_1[8]
Definition: msutb.cpp:1481
STDMETHOD_(void, OnDestroy)(HWND hWnd) override
DWORD m_dwTipbarWndFlags
Definition: msutb.cpp:1468
void RemoveThredFromThreadCreatingList(CTipbarThread *pTarget)
Definition: msutb.cpp:4380
CLangBarItemList m_LangBarItemList
Definition: msutb.cpp:1460
CTipbarCoInitialize m_coInit
Definition: msutb.cpp:1456
INT AdjustDeskBandSize(BOOL bFlag)
@unimplemented
Definition: msutb.cpp:4480
INT m_cySmallIcon
Definition: msutb.cpp:1473
UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT uElapse)
Definition: msutb.cpp:4702
STDMETHOD_(BOOL, OnEraseBkGnd)(HWND hWnd
STDMETHOD() OnSetFocus(DWORD dwThreadId) override
@unimplemented
Definition: msutb.cpp:5157
void SetVertical(BOOL bVertical)
Definition: msutb.cpp:4510
CTipbarThread * m_pUnknownThread
Definition: msutb.cpp:1493
DWORD m_dwShowType
Definition: msutb.cpp:1470
void SetMoveRect(INT X, INT Y, INT nWidth, INT nHeight)
Definition: msutb.cpp:4787
CTipbarThread * m_pFocusThread
Definition: msutb.cpp:1464
void RestoreLastFocus(DWORD *pdwThreadId, BOOL fPrev)
Definition: msutb.cpp:5078
CDeskBand * m_pDeskBand
Definition: msutb.cpp:1494
STDMETHOD_(LRESULT, OnWindowPosChanging)(HWND hWnd
HRESULT OnThreadItemChangeInternal(DWORD dwThreadId)
@unimplemented
Definition: msutb.cpp:1592
void SetShowText(BOOL bShow)
Definition: msutb.cpp:4833
void KillOnTheadItemChangeTimer()
Definition: msutb.cpp:4688
void CleanUpThreadPointer(CTipbarThread *pThread, BOOL bRemove)
Definition: msutb.cpp:5084
void SetShowTrayIcon(BOOL bShow)
Definition: msutb.cpp:4846
void CancelMenu()
Definition: msutb.cpp:4579
STDMETHOD_(BSTR, GetAccName)() override
void MoveToStub(BOOL bFlag)
Definition: msutb.cpp:4387
LONG m_CX
Definition: msutb.cpp:1487
CTipbarGripper * m_pTipbarGripper
Definition: msutb.cpp:1463
DWORD m_dwUnknown21
Definition: msutb.cpp:1471
LONG x
Definition: msutb.cpp:1637
LONG m_bInCallOn
Definition: msutb.cpp:1484
STDMETHOD() OnLangBarUpdate(TfLBIClick click, BOOL bFlag) override
@unimplemented
Definition: msutb.cpp:5315
void InitThemeMargins()
Definition: msutb.cpp:4283
LONG m_Y
Definition: msutb.cpp:1486
void UpdatePosFlags()
Definition: msutb.cpp:4549
STDMETHOD_(LRESULT, OnDisplayChange)(HWND hWnd
void RestoreFromStub()
Definition: msutb.cpp:4413
void SavePosition()
Definition: msutb.cpp:4737
friend BOOL GetTipbarInternal(HWND hWnd, DWORD dwFlags, CDeskBand *pDeskBand)
Definition: msutb.cpp:6268
CShellWndThread m_ShellWndThread
Definition: msutb.cpp:1495
DWORD m_dwChangingThreadId
Definition: msutb.cpp:1483
STDMETHOD() ShowFloating(DWORD dwFlags) override
@unimplemented
Definition: msutb.cpp:5285
CTipbarWnd(DWORD style)
@unimplemented
Definition: msutb.cpp:4142
STDMETHOD() OnThreadTerminate(DWORD dwThreadId) override
Definition: msutb.cpp:5162
BOOL AutoAdjustDeskBandSize()
Definition: msutb.cpp:4460
STDMETHOD_(LRESULT, OnSettingChange)(HWND hWnd
DWORD m_dwAlphaValue
Definition: msutb.cpp:1467
void Init(BOOL bChild, CDeskBand *pDeskBand)
@unimplemented
Definition: msutb.cpp:4202
HFONT m_hTextFont
Definition: msutb.cpp:1477
STDMETHOD_(void, OnCreate)(HWND hWnd) override
INT m_cxDlgFrameX2
Definition: msutb.cpp:1474
INT GetGripperWidth()
Definition: msutb.cpp:4426
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:3048
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:3055
BOOL UpdateMenuRectPoint()
Definition: msutb.cpp:3105
RECT m_rcMenu
Definition: msutb.cpp:1158
LPARAM lParam
Definition: msutb.cpp:1171
LPCWSTR pszTip
Definition: msutb.cpp:1170
BOOL RemoveIcon()
Definition: msutb.cpp:3068
DWORD m_dwUnknown25
Definition: msutb.cpp:1156
HWND m_hNotifyWnd
Definition: msutb.cpp:1106
static BOOL RegisterClass()
Definition: msutb.cpp:3309
static LRESULT CALLBACK _WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: msutb.cpp:3422
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:3349
static CTrayIconWnd * GetThis(HWND hWnd)
Definition: msutb.cpp:3408
BOOL SetMainIcon(HKL hKL)
Definition: msutb.cpp:3377
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:3354
void CallOnDelayMsg()
Definition: msutb.cpp:3207
void RemoveAllIcon(DWORD dwFlags)
Definition: msutb.cpp:3321
BOOL FindTrayEtc()
Definition: msutb.cpp:3266
HWND CreateWnd()
Definition: msutb.cpp:3220
static void SetThis(HWND hWnd, LPCREATESTRUCT pCS)
Definition: msutb.cpp:3413
UINT m_uMsg
Definition: msutb.cpp:1102
void DestroyWnd()
Definition: msutb.cpp:3236
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:3289
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:3255
HWND GetNotifyWnd()
Definition: msutb.cpp:3281
static BOOL CALLBACK EnumChildWndProc(HWND hWnd, LPARAM lParam)
Definition: msutb.cpp:3242
DWORD m_dwProgmanThreadId
Definition: msutb.cpp:1110
HWND m_hTrayWnd
Definition: msutb.cpp:1105
HBITMAP m_hbmMask
Definition: cicuif.h:744
HBITMAP m_hbmColor
Definition: cicuif.h:743
LPWSTR m_pszMenuItemLeft
Definition: cicuif.h:737
void Check(BOOL bChecked)
Definition: cicuif.h:767
CUIFMenu * m_pSubMenu
Definition: cicuif.h:750
void Gray(BOOL bGrayed)
Definition: cicuif.h:768
BOOL Init(UINT nMenuItemID, LPCWSTR pszText)
Definition: cicuif.cpp:4911
void ShowSubPopup()
Definition: cicuif.cpp:5274
UINT ShowModalPopup(CUIFWindow *pWindow, LPCRECT prc, BOOL bFlag)
Definition: cicuif.cpp:4820
BOOL InsertItem(CUIFMenuItem *pItem)
Definition: cicuif.cpp:4635
void PostKey(BOOL bUp, WPARAM wParam, LPARAM lParam)
Definition: cicuif.cpp:4763
void CancelMenu()
Definition: cicuif.cpp:4384
BOOL InsertSeparator()
Definition: cicuif.cpp:4644
DWORD m_style
Definition: cicuif.h:188
HFONT m_hFont
Definition: cicuif.h:192
LPCRECT prc
Definition: cicuif.h:230
LONG y
Definition: cicuif.h:217
STDMETHOD() GetThemeFont(HDC hDC, int iStateId, int iPropId, LOGFONTW *pFont)
Definition: cicuif.cpp:186
HRESULT CloseThemeData()
Definition: cicuif.cpp:84
LPCWSTR m_pszClassList
Definition: cicuif.h:90
STDMETHOD() GetThemeMargins(HDC hDC, int iStateId, int iPropId, LPRECT prc, MARGINS *pMargins)
Definition: cicuif.cpp:178
HRESULT InternalOpenThemeData(HWND hWnd)
Definition: cicuif.cpp:66
INT m_iStateId
Definition: cicuif.h:92
INT m_iPartId
Definition: cicuif.h:91
STDMETHOD() GetThemePartSize(HDC hDC, int iStateId, LPRECT prc, THEMESIZE eSize, SIZE *psz)
Definition: cicuif.cpp:154
HTHEME m_hTheme
Definition: cicuif.h:93
HRESULT EnsureThemeData(HWND hWnd)
Definition: cicuif.cpp:77
BOOL m_bShowToolTip
Definition: cicuif.h:615
UINT WPARAM LPARAM lParam
Definition: cicuif.h:590
INT m_nWidth
Definition: cicuif.h:516
INT m_nHeight
Definition: cicuif.h:515
INT m_nTop
Definition: cicuif.h:514
CUIFToolTip * m_pToolTip
Definition: cicuif.h:524
INT INT INT nHeight
Definition: cicuif.h:563
BOOL GetWorkArea(LPCRECT prcWnd, LPRECT prcWorkArea)
Definition: cicuif.cpp:2013
INT m_nLeft
Definition: cicuif.h:513
HWND m_hWnd
Definition: cicuif.h:518
DWORD dwFlags
Definition: cicuif.h:564
void GetFrameSize(LPSIZE pSize)
Definition: cicuif.cpp:3649
STDMETHOD_(BOOL, DoModal)(HWND hDlg) override
static BOOL s_bIsDlgShown
Definition: msutb.cpp:679
STDMETHOD_(BOOL, IsDlgShown)() override
STDMETHOD_(void, SetDlgShown)(BOOL bShown) override
CUTBContextMenu(CTipbarWnd *pTipbarWnd)
Definition: msutb.cpp:2814
CUTBMenuWnd * CreateMenuUI(BOOL bFlag)
@unimplemented
Definition: msutb.cpp:2827
CTipbarThread * m_pTipbarThread
Definition: msutb.cpp:1006
UINT ShowPopup(CUIFWindow *pWindow, POINT pt, LPCRECT prc, BOOL bFlag)
Definition: msutb.cpp:2924
BOOL Init()
@implemented
Definition: msutb.cpp:2820
BOOL SelectMenuItem(UINT nCommandId)
@unimplemented
Definition: msutb.cpp:2952
CTipbarWnd * m_pTipbarWnd
Definition: msutb.cpp:1005
CUTBLBarMenu * m_pLBarMenu
Definition: msutb.cpp:1049
BOOL InsertToUI(CUTBMenuWnd *pMenuUI)
@unimplemented
Definition: msutb.cpp:3629
CUTBMenuWnd * m_pMenuUI
Definition: msutb.cpp:1030
CUTBLBarMenu(HINSTANCE hInst)
Definition: msutb.cpp:3565
STDMETHOD_(CCicLibMenuItem *, CreateMenuItem)() override
~CUTBLBarMenu() override
Definition: msutb.cpp:3570
INT ShowPopup(CUIFWindow *pWindow, POINT pt, LPCRECT prcExclude)
Definition: msutb.cpp:3604
CUTBMenuWnd * CreateMenuUI()
Definition: msutb.cpp:3583
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:1709
WPARAM wParam
Definition: msutb.cpp:666
BOOL StartThread()
Definition: msutb.cpp:1669
LONG _Release()
Definition: msutb.cpp:1689
STDMETHOD_(BOOL, DoModal)(HWND hDlg)=0
static DWORD WINAPI s_ThreadProc(LPVOID pParam)
Definition: msutb.cpp:1664
static void SetThis(HWND hDlg, CUTBLangBarDlg *pThis)
Definition: msutb.cpp:1659
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:1654
STDMETHOD_(BOOL, DoAccDefaultActionReal)() override
CUTBMenuWnd * m_pMenuUI
Definition: msutb.cpp:961
STDMETHOD_(BSTR, GetAccDefaultAction)() override
CUTBMenuItem(CUTBMenuWnd *pMenuUI)
Definition: msutb.cpp:2709
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:2715
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:2587
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:2582
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
#define ERROR_SUCCESS
Definition: deptool.c:10
DLGPROC DlgProc
Definition: desk.c:122
#define LF_FACESIZE
Definition: dimm.idl:39
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDS_LANGUAGE
Definition: resource.h:52
static HBITMAP hBitmap
Definition: timezone.c:26
#define APIENTRY
Definition: api.h:79
#define Y(I)
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1605
#define CloseHandle
Definition: compat.h:739
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define CP_ACP
Definition: compat.h:109
HANDLE HWND
Definition: compat.h:19
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
@ VT_I4
Definition: compat.h:2298
@ VT_EMPTY
Definition: compat.h:2295
#define lstrlenW
Definition: compat.h:750
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
Definition: ime.c:890
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
LANGID WINAPI GetUserDefaultUILanguage(void)
Definition: locale.c:1375
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1666
EXTERN_C HRESULT WINAPI TF_RunInputCPL(VOID)
Definition: utils.cpp:317
const WCHAR * action
Definition: action.c:7509
#define IDD_MINIMIZELANGBAR
Definition: resource.h:49
#define ID_CLOSELANGBAR
Definition: resource.h:37
#define ID_ADJUSTDESKBAND
Definition: resource.h:42
#define ID_VERTICAL
Definition: resource.h:41
#define ID_NOTRANS
Definition: resource.h:33
#define IDC_MINIMIZELANGBAR_CHECK
Definition: resource.h:52
#define IDS_LANGUAGEBUTTON
Definition: resource.h:19
#define IDS_MINIMIZE
Definition: resource.h:22
#define IDS_SETTINGS
Definition: resource.h:16
#define ID_EXTRAICONS
Definition: resource.h:38
#define IDS_LEFTCLICK
Definition: resource.h:30
#define IDD_MINIMIZELANGBARNOBAND
Definition: resource.h:48
#define ID_LABELS
Definition: resource.h:34
#define IDS_TRANSPARENCY
Definition: resource.h:20
#define IDD_CLOSELANGBAR
Definition: resource.h:47
#define IDS_TEXTLABELS
Definition: resource.h:21
#define ID_RESTORELANGBAR
Definition: resource.h:40
#define IDS_ADJUSTLANGBAND
Definition: resource.h:29
#define ID_NOLABELS
Definition: resource.h:35
#define ID_TRANS
Definition: resource.h:32
#define IDD_CLOSELANGBARNOBAND
Definition: resource.h:46
#define ID_NOEXTRAICONS
Definition: resource.h:39
#define IDS_RESTORELANGBAR
Definition: resource.h:17
#define IDS_LANGUAGEBAR
Definition: resource.h:25
#define IDC_CLOSELANGBAR_CHECK
Definition: resource.h:51
#define ID_DESKBAND
Definition: resource.h:36
#define IDS_RESTORELANGBAR2
Definition: resource.h:26
#define IDS_CLOSELANGBAR
Definition: resource.h:23
#define IDS_MENUWND
Definition: resource.h:27
#define IDS_EXTRAICONS
Definition: resource.h:24
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
HRESULT WINAPI CreateStdAccessibleObject(HWND hwnd, LONG idObject, REFIID riidInterface, void **ppvObject)
Definition: main.c:154
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:531
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
Definition: typelib.c:458
static void CharSet(RTF_Info *info)
Definition: reader.c:2420
UINT_PTR WINAPI SHAppBarMessage(DWORD msg, PAPPBARDATA data)
Definition: appbar.c:65
HRESULT WINAPI GetThemeTextExtent(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, const RECT *pBoundingRect, RECT *pExtentRect)
Definition: draw.c: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:57
HINSTANCE hInst
Definition: dxdiag.c:13
DWORD dwThreadId
Definition: fdebug.c:31
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FxIoTarget * pTarget
Definition: fxdeviceapi.cpp:97
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
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)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
#define _tcstoul
Definition: tchar.h:595
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT accLocation([out] long *left, [out] long *top, [out] long *width, [out] long *height, [in, optional] VARIANT varID)
HRESULT RegisterClassImplCategories([in] REFCLSID rclsid, [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[])
HRESULT UnRegisterClassImplCategories([in] REFCLSID rclsid, [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[])
HRESULT SetValue([in] TfClientId tid, [in] const VARIANT *pvarValue)
HRESULT GetValue([out] VARIANT *pvarValue)
HRESULT UnadviseItemsSink([in] ULONG ulCount, [in, size_is(ulCount)] DWORD *pdwCookie)
HRESULT OnUpdate([in] DWORD dwFlags)
HRESULT GetStatus([out] DWORD *pdwStatus)
HRESULT GetTooltipString([out] BSTR *pbstrToolTip)
HRESULT SetModalInput([in] ITfLangBarEventSink *pSink, [in] DWORD dwThreadId, [in] DWORD dwFlags)
HRESULT GetShowFloatingStatus([out] DWORD *pdwFlags)
HRESULT RestoreLastFocus([out] DWORD *dwThreadId, [in] BOOL fPrev)
HRESULT GetThreadLangBarItemMgr([in] DWORD dwThreadId, [out] ITfLangBarItemMgr **pplbie, [out] DWORD *pdwThreadid)
HRESULT UnAdviseEventSink([in] DWORD dwCookie)
HRESULT ShowFloating([in] DWORD dwFlags)
const DWORD TF_LBMENUF_SUBMENU
Definition: ctfutb.idl:431
HRESULT Invoke([in] PVOID pvInstance, [in] MEMBERID memid, [in] WORD wFlags, [in, out] DISPPARAMS *pDispParams, [out] VARIANT *pVarResult, [out] EXCEPINFO *pExcepInfo, [out] UINT *puArgErr)
HRESULT GetIDsOfNames([in, size_is(cNames)] LPOLESTR *rgszNames, [in] UINT cNames, [out, size_is(cNames)] MEMBERID *pMemId)
HRESULT GetTypeInfoOfGuid([in] REFGUID guid, [out] ITypeInfo **ppTinfo)
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
nsrefcnt Release()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define TEXT(s)
Definition: k32.h:26
#define END_OBJECT_MAP()
Definition: atlcom.h:691
#define OBJECT_ENTRY(clsid, class)
Definition: atlcom.h:693
#define BEGIN_OBJECT_MAP(x)
Definition: atlcom.h:689
USHORT LANGID
Definition: mui.h:9
static IN DWORD IN LPVOID lpvReserved
#define error(str)
Definition: mkdosfs.c:1605
#define pch(ap)
Definition: match.c:418
EXTERN_C BOOL WINAPI TF_GetMlngHKL(_In_ INT iKL, _Out_opt_ HKL *phKL, _Out_opt_ LPWSTR pszDesc, _In_ INT cchDesc)
Definition: mlng.cpp:664
EXTERN_C INT WINAPI TF_GetMlngIconIndex(_In_ INT iKL)
Definition: mlng.cpp:640
EXTERN_C HICON WINAPI TF_InatExtractIcon(_In_ INT iKL)
Definition: mlng.cpp:629
EXTERN_C INT WINAPI TF_MlngInfoCount(VOID)
Definition: mlng.cpp:614
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
static HICON
Definition: imagelist.c:80
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static IAdviseSinkEx AdviseSink
Definition: htmldoc.c:5184
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:52
static ATOM item
Definition: dde.c:856
BOOL OnCreate(HWND hWnd)
Definition: msconfig.c:83
HICON hIcon
Definition: msconfig.c:44
HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr)
Definition: msctf.c:670
HRESULT WINAPI TF_InitMlngInfo(void)
Definition: msctf.c:706
REFCLSID clsid
Definition: msctf.c:82
HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm)
Definition: msctf.c:688
EXTERN_C HRESULT WINAPI TF_GetGlobalCompartment(_Out_ ITfCompartmentMgr **ppCompMgr)
EXTERN_C BOOL WINAPI TF_GetThreadFlags(_In_ DWORD dwThreadId, _Out_ LPDWORD pdwFlags1, _Out_ LPDWORD pdwFlags2, _Out_ LPDWORD pdwFlags3)
EXTERN_C HRESULT WINAPI TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat)
UINT_PTR HKL
Definition: msctf.idl:143
EXTERN_C LONG WINAPI TF_CheckThreadInputIdle(_In_ DWORD dwThreadId, _In_ DWORD dwMilliseconds)
EXTERN_C HRESULT WINAPI TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam)
EXTERN_C HICON WINAPI TF_GetLangIcon(_In_ LANGID LangID, _Out_ LPWSTR pszText, _In_ INT cchText)
EXTERN_C const CLSID CLSID_TF_CategoryMgr
Definition: msctf.idl:84
EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_OPENCLOSE
Definition: msctf.idl:92
EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD
Definition: msctf.idl:99
EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr
Definition: msctf.idl:85
EXTERN_C BOOL WINAPI TF_IsInMarshaling(_In_ DWORD dwThreadId)
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
UINT g_uTimerElapseSHOWWINDOW
Definition: msutb.cpp:68
EXTERN_C VOID TFUninitLib(VOID)
Definition: msutb.cpp:6467
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
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:6319
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:4951
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:6473
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:6439
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
@ TIPBAR_HIGHCONTRAST
Definition: msutb.cpp:1438
@ TIPBAR_VERTICAL
Definition: msutb.cpp:1437
@ TIPBAR_CHILD
Definition: msutb.cpp:1436
@ TIPBAR_NODESKBAND
Definition: msutb.cpp:1442
@ TIPBAR_TOOLBARENDED
Definition: msutb.cpp:1443
@ TIPBAR_ATTACHED
Definition: msutb.cpp:1435
@ TIPBAR_UPDATING
Definition: msutb.cpp:1440
@ TIPBAR_LEFTFIT
Definition: msutb.cpp:1447
@ TIPBAR_RIGHTFIT
Definition: msutb.cpp:1446
@ TIPBAR_ENSURING
Definition: msutb.cpp:1441
@ TIPBAR_TRAYICON
Definition: msutb.cpp:1439
@ TIPBAR_TOPFIT
Definition: msutb.cpp:1444
@ TIPBAR_BOTTOMFIT
Definition: msutb.cpp:1445
HRESULT APIENTRY MsUtbCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
@implemented
Definition: msutb.cpp:6447
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:6347
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:6505
void InitSkipRedrawHKLArray(void)
Definition: msutb.cpp:149
CTrayIconWnd * g_pTrayIconWnd
Definition: msutb.cpp:100
STDMETHODIMP_(void) CUTBCloseLangBarDlg
@unimplemented
Definition: msutb.cpp:1791
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:6372
VOID ProcessDetach(HINSTANCE hinstDLL)
@implemented
Definition: msutb.cpp:6495
EXTERN_C BOOL WINAPI GetPopupTipbar(HWND hWnd, BOOL fWinLogon)
Definition: msutb.cpp:6331
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:6268
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
static LPUNKNOWN
Definition: ndr_ole.c:49
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:1041
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#define L(x)
Definition: ntvdm.h:50
#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
int ssize_t
Definition: rosdhcp.h:48
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_CHINESE_TRADITIONAL
Definition: nls.h:208
#define SUBLANG_CHINESE_SIMPLIFIED
Definition: nls.h:209
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define LANG_CHINESE
Definition: nls.h:42
DWORD LCID
Definition: nls.h:13
#define LANG_JAPANESE
Definition: nls.h:76
#define LANG_KOREAN
Definition: nls.h:84
#define ABM_GETTASKBARPOS
Definition: shellapi.h:67
#define NIM_DELETE
Definition: shellapi.h:97
#define NIM_MODIFY
Definition: shellapi.h:96
#define NIF_ICON
Definition: shellapi.h:107
#define NIF_MESSAGE
Definition: shellapi.h:106
#define NIM_ADD
Definition: shellapi.h:95
#define NIF_TIP
Definition: shellapi.h:108
HRESULT hr
Definition: shlfolder.c:183
#define QITABENT(Cthis, Ifoo)
Definition: shlwapi.h:2139
#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
WCHAR szDescription[TF_LBI_DESC_MAXLEN]
Definition: ctfutb.idl:194
HWND hWnd
Definition: shellapi.h:219
Definition: bl.h:1331
Definition: scsiwmi.h:51
Definition: misc.c:279
int cyBottomHeight
Definition: misc.c:283
int cyTopHeight
Definition: misc.c:282
WCHAR szTip[128]
Definition: shellapi.h:268
UINT uCallbackMessage
Definition: shellapi.h:262
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
UINT flags
Definition: winuser.h:3605
HWND hwndInsertAfter
Definition: winuser.h:3600
HINSTANCE hInstance
Definition: winuser.h:3217
HCURSOR hCursor
Definition: winuser.h:3219
UINT style
Definition: winuser.h:3213
WNDPROC lpfnWndProc
Definition: winuser.h:3214
LPCSTR lpszClassName
Definition: winuser.h:3222
Definition: name.c:39
Definition: ps.c:97
FONTSIGNATURE fs
Definition: wingdi.h:1548
LPVOID lpCreateParams
Definition: winuser.h:2951
LOGFONTA elfLogFont
Definition: wingdi.h:2686
DWORD fsCsb[2]
Definition: wingdi.h:1543
DWORD lsCsbSupported[2]
Definition: wingdi.h:2613
DWORD lsUsb[4]
Definition: wingdi.h:2611
CHAR lfFaceName[LF_FACESIZE]
Definition: wingdi.h:1894
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG cx
Definition: windef.h:334
LONG cy
Definition: windef.h:335
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
BOOL WINAPI InitializeCriticalSectionAndSpinCount(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount)
Definition: synch.c:765
BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW pnid)
Definition: systray.cpp:128
bool SetIcon(HWND hConsoleWindow, HANDLE hIcon, LPARAM *pOldBIcon, LPARAM *pOldSIcon, const char *icondir)
Definition: tnmisc.cpp:136
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT_PTR
Definition: typedefs.h:64
uint32_t DWORD_PTR
Definition: typedefs.h:65
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define WM_IME_SYSTEM
Definition: undocuser.h:60
Definition: pdh_main.c:96
#define AddItem
Definition: userenv.h:209
int ret
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
Definition: wdfusb.h:1083
static LRESULT OnDestroy(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: welcome.c:1552
#define OBJID_CLIENT
Definition: winable.h:19
#define ZeroMemory
Definition: winbase.h:1743
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
#define lstrcmp
Definition: winbase.h:3903
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
#define CopyMemory
Definition: winbase.h:1741
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3709
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
const char * description
Definition: directx.c:2497
#define S_FALSE
Definition: winerror.h:2357
#define TYPE_E_ELEMENTNOTFOUND
Definition: winerror.h:2539
#define DISP_E_MEMBERNOTFOUND
Definition: winerror.h:2512
#define E_UNEXPECTED
Definition: winerror.h:2456
#define CreateDC
Definition: wingdi.h:4441
HGDIOBJ WINAPI GetStockObject(_In_ int)
FONTENUMPROCA FONTENUMPROC
Definition: wingdi.h:2902
int WINAPI GetTextCharsetInfo(_In_ HDC, _Out_opt_ LPFONTSIGNATURE, _In_ DWORD)
#define OUT_TT_ONLY_PRECIS
Definition: wingdi.h:422
#define TRUETYPE_FONTTYPE
Definition: wingdi.h:1109
#define DEFAULT_GUI_FONT
Definition: wingdi.h:909
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c: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:4468
BOOL WINAPI DeleteDC(_In_ HDC)
#define EnumFonts
Definition: wingdi.h:4452
BOOL WINAPI TranslateCharsetInfo(_Inout_ PDWORD, _Out_ LPCHARSETINFO, _In_ DWORD)
#define SYMBOL_CHARSET
Definition: wingdi.h:385
BOOL WINAPI GetTextExtentPoint32W(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE psizl)
static INT_PTR CALLBACK OnSettingChange(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: winmain.c:1403
#define LOCALE_FONTSIGNATURE
Definition: winnls.h:127
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegDeleteValue
Definition: winreg.h:508
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define CS_VREDRAW
Definition: winuser.h:666
#define SendMessageTimeout
Definition: winuser.h:5865
#define CreateWindowEx
Definition: winuser.h:5775
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define HCF_HIGHCONTRASTON
Definition: winuser.h:2145
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:4019
#define WM_KEYUP
Definition: winuser.h:1727
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:5797
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1619
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define LR_COPYFROMRESOURCE
Definition: winuser.h:1110
#define GetClassName
Definition: winuser.h:5803
#define SMTO_BLOCK
Definition: winuser.h:1235
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1789
#define SWP_NOMOVE
Definition: winuser.h:1255
#define WM_COMMAND
Definition: winuser.h:1751
#define CS_HREDRAW
Definition: winuser.h:661
#define IDC_ARROW
Definition: winuser.h:695
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:3033
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define WM_RBUTTONUP
Definition: winuser.h:1791
#define SM_CYSMICON
Definition: winuser.h:1024
#define WM_RBUTTONDBLCLK
Definition: winuser.h:1792
#define SWP_NOSIZE
Definition: winuser.h:1256
#define RDW_UPDATENOW
Definition: winuser.h:1231
#define WM_NCMBUTTONUP
Definition: winuser.h:1710
#define DialogBoxParam
Definition: winuser.h:5784
#define WM_INITDIALOG
Definition: winuser.h:1750
#define WM_LBUTTONDOWN
Definition: winuser.h:1787
HANDLE WINAPI CopyImage(_In_ HANDLE, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2276
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:1790
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:5857
UINT WINAPI GetKeyboardLayoutList(_In_ int nBuff, _Out_writes_to_opt_(nBuff, return) HKL FAR *lpList)
#define WM_NCMBUTTONDOWN
Definition: winuser.h:1709
#define WM_TIMER
Definition: winuser.h:1753
#define SM_CXBORDER
Definition: winuser.h:975
_In_ int cchText
Definition: winuser.h:4476
#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:5832
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:1788
#define PostMessage
Definition: winuser.h:5852
#define SMTO_ABORTIFHUNG
Definition: winuser.h:1234
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
_In_ int _Inout_ LPRECT lprc
Definition: winuser.h:4477
#define WM_NCLBUTTONUP
Definition: winuser.h:1704
#define SW_RESTORE
Definition: winuser.h:790
#define WM_USER
Definition: winuser.h:1906
#define SM_CYDLGFRAME
Definition: winuser.h:979
#define WM_DESTROY
Definition: winuser.h:1620
#define WM_NCRBUTTONUP
Definition: winuser.h:1707
#define SetWindowText
Definition: winuser.h:5877
#define WM_KEYDOWN
Definition: winuser.h:1726
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:5878
#define WM_MBUTTONUP
Definition: winuser.h:1794
#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:2413
int WINAPI GetSystemMetrics(_In_ int)
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1703
#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:1706
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define GWL_EXSTYLE
Definition: winuser.h:862
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2391
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
static void Initialize()
Definition: xlate.c:212
char TCHAR
Definition: xmlstorage.h:189
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
CHAR * LPTSTR
Definition: xmlstorage.h:192
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193