[PATCH] user32: edit control should respond to ctrl + z (try 4)

Lei Zhang thestig at google.com
Mon Sep 10 18:29:30 CDT 2007


Hi,

This patch lets users hit ctrl + Z in edit controls to trigger an
undo. The test case has been improved to check for both the return
values and the content of the edit control. (and this time it actually
compiles!)
-------------- next part --------------
From 103bf8a23f1db510a2f1180f727d90ff327aed11 Mon Sep 17 00:00:00 2001
From: Lei Zhang <thestig at google.com>
Date: Mon, 10 Sep 2007 16:28:10 -0700
Subject: [PATCH] user32: edit control should respond to ctrl + z
---
 dlls/user32/edit.c       |    4 ++++
 dlls/user32/tests/edit.c |   51 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index 77ecf32..b11bf10 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -4036,6 +4036,10 @@ static void EDIT_WM_Char(EDITSTATE *es, 
 	        if (!((es->style & ES_READONLY) || (es->style & ES_PASSWORD)))
 		    SendMessageW(es->hwndSelf, WM_CUT, 0, 0);
 		break;
+	case 0x1A: /* ^Z */
+	        if (!(es->style & ES_READONLY))
+		    SendMessageW(es->hwndSelf, WM_UNDO, 0, 0);
+		break;
 
 	default:
 		/*If Edit control style is ES_NUMBER allow users to key in only numeric values*/
diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c
index 534bd9b..957fc47 100644
--- a/dlls/user32/tests/edit.c
+++ b/dlls/user32/tests/edit.c
@@ -1047,6 +1047,56 @@ static void test_espassword(void)
     DestroyWindow (hwEdit);
 }
 
+static void test_undo(void)
+{
+    HWND hwEdit;
+    LONG r;
+    char buffer[1024];
+    const char* text = "undo this";
+
+    hwEdit = create_editcontrol(0, 0);
+    r = get_edit_style(hwEdit);
+    ok(r == 0, "Wrong style expected 0x%x got: 0x%x\n", 0, r);
+    /* set text */
+    r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) text);
+    ok(r == TRUE, "Expected: %d, got: %d\n", TRUE, r);
+
+    /* select all, */
+    SendMessage(hwEdit, EM_SETSEL, 0, -1);
+
+    /* cut (ctrl-x) */
+    r = SendMessage(hwEdit, WM_CHAR, 24, 0);
+    todo_wine { ok(r == 1, "Expected: %d, got: %d\n", 1, r); }
+
+    /* get text */
+    buffer[0] = 0;
+    r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
+    ok(r == 0, "Expected: %d, got len %d\n", 0, r);
+    ok(strcmp(buffer, "") == 0, "expected %s, got %s\n", "", buffer);
+
+    /* undo (ctrl-z) */
+    r = SendMessage(hwEdit, WM_CHAR, 26, 0);
+    todo_wine { ok(r == 1, "Expected: %d, got: %d\n", 1, r); }
+
+    /* get text */
+    buffer[0] = 0;
+    r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
+    ok(r == strlen(text), "Expected: %d, got len %d\n", strlen(text), r);
+    ok(strcmp(buffer, text) == 0, "expected %s, got %s\n", text, buffer);
+
+    /* undo again (ctrl-z) */
+    r = SendMessage(hwEdit, WM_CHAR, 26, 0);
+    todo_wine { ok(r == 1, "Expected: %d, got: %d\n", 1, r); }
+
+    /* get text */
+    buffer[0] = 0;
+    r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
+    ok(r == 0, "Expected: %d, got len %d\n", 0, r);
+    ok(strcmp(buffer, "") == 0, "expected %s, got %s\n", "", buffer);
+
+    DestroyWindow (hwEdit);
+}
+
 static BOOL RegisterWindowClasses (void)
 {
     WNDCLASSA test2;
@@ -1113,6 +1163,7 @@ START_TEST(edit)
     test_margins_font_change();
     test_text_position();
     test_espassword();
+    test_undo();
 
     UnregisterWindowClasses();
 }
-- 
1.4.1


More information about the wine-patches mailing list