From: katahiromz Subject: [PATCH] comctl32: Accept Tab key on IP Address controls. Message-Id: Date: Thu, 1 Oct 2020 19:51:27 +0900 Tab key and Shift+Tab key could not work on IP Address controls (SysIPAddress32). From 9026cf2dae10a39a7f9db8443f80195864cc5785 Mon Sep 17 00:00:00 2001 From: Hirofumi Katayama Date: Thu, 1 Oct 2020 19:44:29 +0900 Subject: [PATCH] comctl32: Accept Tab key on IP Address controls. Tab key and Shift+Tab key could not work on IP Address controls (SysIPAddress32). Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49924 Signed-off-by: Hirofumi Katayama --- https://jira.reactos.org/browse/CORE-3479 https://github.com/reactos/reactos/commit/3f30b1eda7e51dae1df0b411e75b99a03e9fbca2 https://github.com/reactos/reactos/commit/0a8fb87d845482db5909fe9034e0d5ebac8c5b3c --- dlls/comctl32/ipaddress.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/dlls/comctl32/ipaddress.c b/dlls/comctl32/ipaddress.c index c75a1085650..79e97dc2a0e 100644 --- a/dlls/comctl32/ipaddress.c +++ b/dlls/comctl32/ipaddress.c @@ -6,6 +6,7 @@ * Copyright 1999 James Abbatiello * Copyright 1998, 1999 Eric Kohl * Copyright 1998 Alex Priem + * Copyright 2020 Katayama Hirofumi MZ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -555,6 +556,21 @@ IPADDRESS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return 0; } break; + case VK_TAB: + if (GetKeyState(VK_SHIFT) < 0) { + /* Shift+Tab */ + if (index == 0) + SetFocus(GetNextDlgTabItem(GetParent(infoPtr->Self), infoPtr->Self, TRUE)); + else + IPADDRESS_GotoNextField(infoPtr, index - 2, POS_SELALL); + } else { + /* Tab */ + if (index == 3) + SetFocus(GetNextDlgTabItem(GetParent(infoPtr->Self), infoPtr->Self, FALSE)); + else + IPADDRESS_GotoNextField(infoPtr, index, POS_SELALL); + } + break; } break; case WM_KILLFOCUS: @@ -565,6 +581,12 @@ IPADDRESS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if (IPADDRESS_GetPartIndex(infoPtr, (HWND)wParam) < 0) IPADDRESS_Notify(infoPtr, EN_SETFOCUS); break; + case WM_GETDLGCODE: + { + LRESULT result = CallWindowProcW(part->OrigProc, hwnd, uMsg, wParam, lParam); + result |= DLGC_WANTALLKEYS | DLGC_WANTCHARS | DLGC_WANTTAB; + return result; + } } return CallWindowProcW (part->OrigProc, hwnd, uMsg, wParam, lParam); } @@ -594,6 +616,10 @@ IPADDRESS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_PAINT: return IPADDRESS_Paint (infoPtr, (HDC)wParam); + case WM_SETFOCUS: + IPADDRESS_GotoNextField(infoPtr, -1, POS_SELALL); + return 0; + case WM_COMMAND: switch(wParam >> 16) { case EN_CHANGE: -- 2.27.0