mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 00:43:21 +00:00
- hide the keyboard focus when appropriate
- add missing definitions to w32api svn path=/trunk/; revision=16408
This commit is contained in:
parent
0140b609d9
commit
8e3b9a7f21
|
@ -50,6 +50,7 @@ typedef struct _CHECKLISTWND
|
|||
PCHECKITEM FocusedCheckItem;
|
||||
UINT FocusedCheckItemBox;
|
||||
BOOL FocusedPushed;
|
||||
BOOL FocusVisible;
|
||||
|
||||
COLORREF TextColor[2];
|
||||
UINT CheckBoxLeft[2];
|
||||
|
@ -840,7 +841,7 @@ PaintControl(IN PCHECKLISTWND infoPtr,
|
|||
((Item->State & CIS_ALLOW) ? DFCS_CHECKED : 0) |
|
||||
(IsPushed ? DFCS_PUSHED : 0));
|
||||
}
|
||||
if (Item == infoPtr->FocusedCheckItem &&
|
||||
if (Item == infoPtr->FocusedCheckItem && infoPtr->FocusVisible &&
|
||||
infoPtr->HasFocus &&
|
||||
infoPtr->FocusedCheckItemBox != CLB_DENY)
|
||||
{
|
||||
|
@ -895,7 +896,7 @@ PaintControl(IN PCHECKLISTWND infoPtr,
|
|||
((Item->State & CIS_DENY) ? DFCS_CHECKED : 0) |
|
||||
(IsPushed ? DFCS_PUSHED : 0));
|
||||
}
|
||||
if (infoPtr->HasFocus &&
|
||||
if (infoPtr->HasFocus && infoPtr->FocusVisible &&
|
||||
Item == infoPtr->FocusedCheckItem &&
|
||||
infoPtr->FocusedCheckItemBox == CLB_DENY)
|
||||
{
|
||||
|
@ -995,8 +996,8 @@ UpdateCheckItemBox(IN PCHECKLISTWND infoPtr,
|
|||
|
||||
rcUpdate.left = rcClient.left + infoPtr->CheckBoxLeft[ItemBox] - (infoPtr->ItemHeight / 2);
|
||||
rcUpdate.right = rcUpdate.left + infoPtr->ItemHeight;
|
||||
rcUpdate.top = ((Index - VisibleFirst) * infoPtr->ItemHeight) + CI_TEXT_MARGIN_HEIGHT;
|
||||
rcUpdate.bottom = rcUpdate.top + infoPtr->ItemHeight - (2 * CI_TEXT_MARGIN_HEIGHT);
|
||||
rcUpdate.top = ((Index - VisibleFirst) * infoPtr->ItemHeight);
|
||||
rcUpdate.bottom = rcUpdate.top + infoPtr->ItemHeight;
|
||||
|
||||
RedrawWindow(infoPtr->hSelf,
|
||||
&rcUpdate,
|
||||
|
@ -1727,6 +1728,15 @@ CheckListWndProc(IN HWND hwnd,
|
|||
Shift,
|
||||
&NewFocusBox);
|
||||
|
||||
if (!infoPtr->FocusVisible)
|
||||
{
|
||||
/* change the UI status */
|
||||
SendMessage(GetAncestor(hwnd, GA_ROOT),
|
||||
WM_CHANGEUISTATE,
|
||||
MAKEWPARAM(UIS_INITIALIZE, UISF_HIDEFOCUS),
|
||||
0);
|
||||
}
|
||||
|
||||
ChangeCheckItemFocus(infoPtr,
|
||||
NewFocus,
|
||||
NewFocusBox);
|
||||
|
@ -1852,6 +1862,35 @@ CheckListWndProc(IN HWND hwnd,
|
|||
TRUE);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_UPDATEUISTATE:
|
||||
{
|
||||
BOOL OldFocusVisible = infoPtr->FocusVisible;
|
||||
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case UIS_CLEAR:
|
||||
{
|
||||
infoPtr->FocusVisible = (HIWORD(wParam) & UISF_HIDEFOCUS);
|
||||
break;
|
||||
}
|
||||
case UIS_SET:
|
||||
case UIS_INITIALIZE:
|
||||
{
|
||||
infoPtr->FocusVisible = !(HIWORD(wParam) & UISF_HIDEFOCUS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (infoPtr->FocusVisible != OldFocusVisible &&
|
||||
infoPtr->FocusedCheckItem != NULL)
|
||||
{
|
||||
UpdateCheckItemBox(infoPtr,
|
||||
infoPtr->FocusedCheckItem,
|
||||
infoPtr->FocusedCheckItemBox);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_CREATE:
|
||||
{
|
||||
|
@ -1908,6 +1947,11 @@ CheckListWndProc(IN HWND hwnd,
|
|||
infoPtr->ThemeHandle = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
infoPtr->FocusVisible = !(SendMessage(hwnd,
|
||||
WM_QUERYUISTATE,
|
||||
0,
|
||||
0) & UISF_HIDEFOCUS);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1316,7 +1316,24 @@ extern "C" {
|
|||
#define WM_CANCELMODE 31
|
||||
#define WM_CAPTURECHANGED 533
|
||||
#define WM_CHANGECBCHAIN 781
|
||||
|
||||
#if (WINVER >= 0x0500)
|
||||
#define WM_CHANGEUISTATE 295
|
||||
#define WM_UPDATEUISTATE 296
|
||||
#define WM_QUERYUISTATE 297
|
||||
|
||||
#define UIS_SET 1
|
||||
#define UIS_CLEAR 2
|
||||
#define UIS_INITIALIZE 3
|
||||
|
||||
#define UISF_HIDEFOCUS 0x1
|
||||
#define UISF_HIDEACCEL 0x2
|
||||
#if (WINVER >= 0x0501)
|
||||
#define UISF_ACTIVE 0x4
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#define WM_CHAR 258
|
||||
#define WM_CHARTOITEM 47
|
||||
#define WM_CHILDACTIVATE 34
|
||||
|
|
Loading…
Reference in a new issue