[PATCH] user32: edit control should respond to ctrl + z (try 5)
Lei Zhang
thestig at google.com
Wed Sep 12 00:14:08 CDT 2007
Hi,
This patch lets users hit ctrl + z in edit controls to trigger an
undo. The test case checks to make sure each action taken does what
it's suppose to.
-------------- next part --------------
From 902fc1166763ccd19790a79cd7b2dc20971158d9 Mon Sep 17 00:00:00 2001
From: Lei Zhang <thestig at google.com>
Date: Tue, 11 Sep 2007 21:34:10 -0700
Subject: [PATCH] user32: edit control should respond to ctrl + z
---
dlls/user32/edit.c | 4 +++
dlls/user32/tests/edit.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 62 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..c74f6d7 100644
--- a/dlls/user32/tests/edit.c
+++ b/dlls/user32/tests/edit.c
@@ -1047,6 +1047,63 @@ static void test_espassword(void)
DestroyWindow (hwEdit);
}
+static void test_undo(void)
+{
+ HWND hwEdit;
+ LONG r;
+ DWORD cpMin, cpMax;
+ char buffer[1024];
+ const char* text = "undo this";
+
+ hwEdit = create_editcontrol(0, 0);
+ r = get_edit_style(hwEdit);
+ ok(0 == r, "Wrong style expected 0x%x got: 0x%x\n", 0, r);
+
+ /* set text */
+ r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) text);
+ ok(TRUE == r, "Expected: %d, got: %d\n", TRUE, r);
+
+ /* select all, */
+ cpMin = cpMax = 0xdeadbeef;
+ SendMessage(hwEdit, EM_SETSEL, 0, -1);
+ r = SendMessage(hwEdit, EM_GETSEL, (WPARAM) &cpMin, (LPARAM) &cpMax);
+ ok((strlen(text) << 16) == r, "Unexpected length %d\n", r);
+ ok(0 == cpMin, "Expected: %d, got %d\n", 0, cpMin);
+ ok(9 == cpMax, "Expected: %d, got %d\n", 9, cpMax);
+
+ /* cut (ctrl-x) */
+ r = SendMessage(hwEdit, WM_CHAR, 24, 0);
+ todo_wine { ok(1 == r, "Expected: %d, got: %d\n", 1, r); }
+
+ /* get text */
+ buffer[0] = 0;
+ r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
+ ok(0 == r, "Expected: %d, got len %d\n", 0, r);
+ ok(0 == strcmp(buffer, ""), "expected %s, got %s\n", "", buffer);
+
+ /* undo (ctrl-z) */
+ r = SendMessage(hwEdit, WM_CHAR, 26, 0);
+ todo_wine { ok(1 == r, "Expected: %d, got: %d\n", 1, r); }
+
+ /* get text */
+ buffer[0] = 0;
+ r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
+ ok(strlen(text) == r, "Unexpected length %d\n", r);
+ ok(0 == strcmp(buffer, text), "expected %s, got %s\n", text, buffer);
+
+ /* undo again (ctrl-z) */
+ r = SendMessage(hwEdit, WM_CHAR, 26, 0);
+ todo_wine { ok(1 == r, "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(0 == strcmp(buffer, ""), "expected %s, got %s\n", "", buffer);
+
+ DestroyWindow (hwEdit);
+}
+
static BOOL RegisterWindowClasses (void)
{
WNDCLASSA test2;
@@ -1113,6 +1170,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