Sergey Khodych : user32: edit: Improve handling of WM_KEYDOWN VK_TAB in a dialog mode.

Alexandre Julliard julliard at winehq.org
Wed Aug 26 10:45:44 CDT 2009


Module: wine
Branch: master
Commit: d4707dbb603459c98e74d07aaed3ba8ac297ba0a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d4707dbb603459c98e74d07aaed3ba8ac297ba0a

Author: Sergey Khodych <khodych at 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);
 }
 




More information about the wine-cvs mailing list