Module: wine Branch: master Commit: d4707dbb603459c98e74d07aaed3ba8ac297ba0a URL: http://source.winehq.org/git/wine.git/?a=commit;h=d4707dbb603459c98e74d07aae...
Author: Sergey Khodych khodych@gmail.com Date: Mon Aug 24 01:47:15 2009 +0300
user32: edit: Improve handling of WM_KEYDOWN VK_TAB in a dialog mode.
---
dlls/user32/edit.c | 3 ++- dlls/user32/tests/edit.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c index a96120a..eef07da 100644 --- a/dlls/user32/edit.c +++ b/dlls/user32/edit.c @@ -3641,7 +3641,8 @@ static LRESULT EDIT_WM_KeyDown(EDITSTATE *es, INT key) PostMessageW(es->hwndParent, WM_CLOSE, 0, 0); break; case VK_TAB: - SendMessageW(es->hwndParent, WM_NEXTDLGCTL, shift, 0); + if ((es->style & ES_MULTILINE) && EDIT_IsInsideDialog(es)) + SendMessageW(es->hwndParent, WM_NEXTDLGCTL, shift, 0); break; } return TRUE; diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c index 1509b1f..68afb27 100644 --- a/dlls/user32/tests/edit.c +++ b/dlls/user32/tests/edit.c @@ -2192,12 +2192,36 @@ static void test_dialogmode(void) test_dm_messages(0, 0, 0, 0); zero_dm_messages();
+ r = SendMessage(hwEdit, WM_KEYDOWN, VK_TAB, 0xf0001); + ok(1 == r, "expected 1, got %d\n", r); + test_dm_messages(0, 0, 0, 0); + zero_dm_messages(); + + msg.hwnd = hwEdit; + msg.message = WM_KEYDOWN; + msg.wParam = VK_TAB; + msg.lParam = 0xf0001; + r = SendMessage(hwEdit, WM_GETDLGCODE, VK_TAB, (LPARAM)&msg); + ok(0x89 == r, "expected 0x89, got 0x%x\n", r); + test_dm_messages(0, 0, 0, 0); + zero_dm_messages(); + + r = SendMessage(hwEdit, WM_KEYDOWN, VK_TAB, 0xf0001); + ok(1 == r, "expected 1, got %d\n", r); + test_dm_messages(0, 0, 0, 0); + zero_dm_messages(); + destroy_child_editcontrol(hwEdit);
hwEdit = create_child_editcontrol(ES_MULTILINE, 0); hwParent = GetParent(hwEdit); SetWindowLongPtr(hwParent, GWLP_WNDPROC, (LONG_PTR)dialog_mode_wnd_proc);
+ r = SendMessage(hwEdit, WM_KEYDOWN, VK_TAB, 0xf0001); + ok(1 == r, "expected 1, got %d\n", r); + test_dm_messages(0, 0, 0, 0); + zero_dm_messages(); + msg.hwnd = hwEdit; msg.message = WM_KEYDOWN; msg.wParam = VK_ESCAPE; @@ -2212,6 +2236,11 @@ static void test_dialogmode(void) test_dm_messages(0, 0, 0, 0); zero_dm_messages();
+ r = SendMessage(hwEdit, WM_KEYDOWN, VK_TAB, 0xf0001); + ok(1 == r, "expected 1, got %d\n", r); + test_dm_messages(0, 0, 0, 1); + zero_dm_messages(); + destroy_child_editcontrol(hwEdit); }