https://git.reactos.org/?p=reactos.git;a=commitdiff;h=db10ce0f9f1e23e9de8ef867cacd0758bd5e0f23

commit db10ce0f9f1e23e9de8ef867cacd0758bd5e0f23
Author:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
AuthorDate: Wed Dec 13 07:04:52 2023 +0900
Commit:     GitHub <nore...@github.com>
CommitDate: Wed Dec 13 07:04:52 2023 +0900

    [USER32] Skip STATIC controls on arrow keys (#6142)
    
    - Skip DLGC_STATIC controls on array keys.
    - Avoid infinite loop by using hwndFirst variable.
    CORE-6127
---
 win32ss/user/user32/windows/dialog.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/win32ss/user/user32/windows/dialog.c 
b/win32ss/user/user32/windows/dialog.c
index 359cfd150c6..842aeb5b0a3 100644
--- a/win32ss/user/user32/windows/dialog.c
+++ b/win32ss/user/user32/windows/dialog.c
@@ -2624,7 +2624,17 @@ IsDialogMessageW(
              if (!(dlgCode & DLGC_WANTARROWS))
              {
                  BOOL fPrevious = (lpMsg->wParam == VK_LEFT || lpMsg->wParam 
== VK_UP);
-                 HWND hwndNext = GetNextDlgGroupItem( hDlg, lpMsg->hwnd, 
fPrevious );
+
+                 /* Skip STATIC elements when arrow-moving through a list of 
controls */
+                 HWND hwndNext, hwndFirst = lpMsg->hwnd;
+                 for (hwndNext = GetNextDlgGroupItem(hDlg, hwndFirst, 
fPrevious);
+                      hwndNext && hwndFirst != hwndNext;
+                      hwndNext = GetNextDlgGroupItem(hDlg, hwndNext, 
fPrevious))
+                  {
+                      if (!(SendMessageW(hwndNext, WM_GETDLGCODE, 0, 0) & 
DLGC_STATIC))
+                          break;
+                  }
+
                  if (hwndNext && SendMessageW( hwndNext, WM_GETDLGCODE, 
lpMsg->wParam, (LPARAM)lpMsg ) == (DLGC_BUTTON | DLGC_RADIOBUTTON))
                  {
                      SetFocus( hwndNext );

Reply via email to