Commit da9c5237 authored by Ilya Shpigor's avatar Ilya Shpigor Committed by Alexandre Julliard

user32: Destroy EDITSTATE structure in the WM_NCDESTROY message processing.

parent 1eb07756
...@@ -4691,10 +4691,10 @@ static LRESULT EDIT_WM_Create(EDITSTATE *es, LPCWSTR name) ...@@ -4691,10 +4691,10 @@ static LRESULT EDIT_WM_Create(EDITSTATE *es, LPCWSTR name)
/********************************************************************* /*********************************************************************
* *
* WM_DESTROY * WM_NCDESTROY
* *
*/ */
static LRESULT EDIT_WM_Destroy(EDITSTATE *es) static LRESULT EDIT_WM_NCDestroy(EDITSTATE *es)
{ {
LINEDEF *pc, *pp; LINEDEF *pc, *pp;
...@@ -4762,7 +4762,7 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg, ...@@ -4762,7 +4762,7 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
if (!es && msg != WM_NCCREATE) if (!es && msg != WM_NCCREATE)
return DefWindowProcT(hwnd, msg, wParam, lParam, unicode); return DefWindowProcT(hwnd, msg, wParam, lParam, unicode);
if (es && (msg != WM_DESTROY)) EDIT_LockBuffer(es); if (es && (msg != WM_NCDESTROY)) EDIT_LockBuffer(es);
switch (msg) { switch (msg) {
case EM_GETSEL16: case EM_GETSEL16:
...@@ -5102,8 +5102,8 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg, ...@@ -5102,8 +5102,8 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
result = EDIT_WM_NCCreate(hwnd, (LPCREATESTRUCTW)lParam, unicode); result = EDIT_WM_NCCreate(hwnd, (LPCREATESTRUCTW)lParam, unicode);
break; break;
case WM_DESTROY: case WM_NCDESTROY:
result = EDIT_WM_Destroy(es); result = EDIT_WM_NCDestroy(es);
es = NULL; es = NULL;
break; break;
......
...@@ -1239,6 +1239,45 @@ static void test_edit_control_5(void) ...@@ -1239,6 +1239,45 @@ static void test_edit_control_5(void)
DestroyWindow(hWnd); DestroyWindow(hWnd);
} }
/* Test WM_GETTEXT processing
* after destroy messages
*/
static void test_edit_control_6(void)
{
static const char *str = "test\r\ntest";
char buf[MAXLEN];
LONG ret;
HWND hWnd;
hWnd = CreateWindowEx(0,
"EDIT",
"Test",
0,
10, 10, 1, 1,
NULL, NULL, hinst, NULL);
assert(hWnd);
ret = SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str);
ok(ret == TRUE, "Expected %d, got %d\n", TRUE, ret);
ret = SendMessageA(hWnd, WM_GETTEXT, MAXLEN, (LPARAM)buf);
ok(ret == lstrlen(str), "Expected %s, got len %d\n", str, ret);
ok(!lstrcmp(buf, str), "Expected %s, got %s\n", str, buf);
buf[0] = 0;
ret = SendMessageA(hWnd, WM_DESTROY, 0, 0);
ok(ret == 0, "Expected 0, got %d\n", ret);
ret = SendMessageA(hWnd, WM_GETTEXT, MAXLEN, (LPARAM)buf);
ok(ret == lstrlen(str), "Expected %s, got len %d\n", str, ret);
ok(!lstrcmp(buf, str), "Expected %s, got %s\n", str, buf);
buf[0] = 0;
ret = SendMessageA(hWnd, WM_NCDESTROY, 0, 0);
ok(ret == 0, "Expected 0, got %d\n", ret);
ret = SendMessageA(hWnd, WM_GETTEXT, MAXLEN, (LPARAM)buf);
ok(ret == 0, "Expected 0, got len %d\n", ret);
ok(!lstrcmp(buf, ""), "Expected empty string, got %s\n", buf);
DestroyWindow(hWnd);
}
static void test_edit_control_limittext(void) static void test_edit_control_limittext(void)
{ {
HWND hwEdit; HWND hwEdit;
...@@ -2270,6 +2309,7 @@ START_TEST(edit) ...@@ -2270,6 +2309,7 @@ START_TEST(edit)
test_edit_control_3(); test_edit_control_3();
test_edit_control_4(); test_edit_control_4();
test_edit_control_5(); test_edit_control_5();
test_edit_control_6();
test_edit_control_limittext(); test_edit_control_limittext();
test_margins(); test_margins();
test_margins_font_change(); test_margins_font_change();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment