Author: jimtabor Date: Mon Apr 14 20:26:59 2014 New Revision: 62750
URL: http://svn.reactos.org/svn/reactos?rev=62750&view=rev Log: [WineTests|User32] - Sync Edit to wine head.
Modified: trunk/rostests/winetests/user32/edit.c
Modified: trunk/rostests/winetests/user32/edit.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/edit.c?re... ============================================================================== --- trunk/rostests/winetests/user32/edit.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/edit.c [iso-8859-1] Mon Apr 14 20:26:59 2014 @@ -1299,6 +1299,7 @@ len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); DestroyWindow(hWnd); + DestroyWindow(parentWnd); }
/* Test WM_GETTEXT processing @@ -1423,6 +1424,8 @@ RECT old_rect, new_rect; INT old_right_margin; DWORD old_margins, new_margins; + LOGFONTA lf; + HFONT hfont;
hwEdit = create_editcontrol(WS_BORDER | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0);
@@ -1470,6 +1473,46 @@ ok(new_rect.bottom == old_rect.bottom, "The bottom border of the rectangle has changed\n");
DestroyWindow (hwEdit); + + memset(&lf, 0, sizeof(lf)); + lf.lfHeight = -11; + lf.lfWeight = FW_NORMAL; + lf.lfCharSet = DEFAULT_CHARSET; + strcpy(lf.lfFaceName, "Tahoma"); + + hfont = CreateFontIndirectA(&lf); + ok(hfont != NULL, "got %p\n", hfont); + + /* Empty window rectangle */ + hwEdit = CreateWindowExA(0, "Edit", "A", WS_POPUP, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL); + ok(hwEdit != NULL, "got %p\n", hwEdit); + GetClientRect(hwEdit, &old_rect); + ok(IsRectEmpty(&old_rect), "got rect %d,%d-%d,%d\n", old_rect.left, old_rect.top, old_rect.right, old_rect.bottom); + + old_margins = SendMessageA(hwEdit, EM_GETMARGINS, 0, 0); + ok(old_margins == 0, "got %x\n", old_margins); + + SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont, MAKELPARAM(TRUE, 0)); + old_margins = SendMessageA(hwEdit, EM_GETMARGINS, 0, 0); + ok(HIWORD(old_margins) > 0 && LOWORD(old_margins) > 0, "got %d, %d\n", HIWORD(old_margins), LOWORD(old_margins)); + + DestroyWindow(hwEdit); + + /* Size is not enough to display a text, but not empty */ + hwEdit = CreateWindowExA(0, "Edit", "A", WS_POPUP, 0, 0, 2, 2, NULL, NULL, NULL, NULL); + ok(hwEdit != NULL, "got %p\n", hwEdit); + GetClientRect(hwEdit, &old_rect); + ok(!IsRectEmpty(&old_rect), "got rect %d,%d-%d,%d\n", old_rect.left, old_rect.top, old_rect.right, old_rect.bottom); + + old_margins = SendMessageA(hwEdit, EM_GETMARGINS, 0, 0); + ok(old_margins == 0, "got %x\n", old_margins); + + SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont, MAKELPARAM(TRUE, 0)); + old_margins = SendMessageA(hwEdit, EM_GETMARGINS, 0, 0); + ok(old_margins == 0, "got %d, %d\n", HIWORD(old_margins), LOWORD(old_margins)); + + DeleteObject(hfont); + DestroyWindow(hwEdit); }
static INT CALLBACK find_font_proc(const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam) @@ -2132,8 +2175,8 @@ destroy_child_editcontrol(hwEdit); }
-static int got_en_setfocus = 0; -static int got_wm_capturechanged = 0; +static BOOL got_en_setfocus = FALSE; +static BOOL got_wm_capturechanged = FALSE; static LRESULT (CALLBACK *p_edit_proc)(HWND, UINT, WPARAM, LPARAM);
static LRESULT CALLBACK edit4_wnd_procA(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) @@ -2142,14 +2185,14 @@ case WM_COMMAND: switch (HIWORD(wParam)) { case EN_SETFOCUS: - got_en_setfocus = 1; + got_en_setfocus = TRUE; break; } break; case WM_CAPTURECHANGED: if (hWnd != (HWND)lParam) { - got_wm_capturechanged = 1; + got_wm_capturechanged = TRUE; pEndMenu(); } break; @@ -2200,9 +2243,49 @@ return p_edit_proc(hWnd, msg, wParam, lParam); }
+struct context_menu_messages +{ + unsigned int wm_command, em_setsel; +}; + +static struct context_menu_messages menu_messages; + +static LRESULT CALLBACK child_edit_menu_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_ENTERIDLE: + if (wParam == MSGF_MENU) { + HWND hwndMenu = (HWND)lParam; + MENUBARINFO mbi = { sizeof(MENUBARINFO) }; + if (pGetMenuBarInfo(hwndMenu, OBJID_CLIENT, 0, &mbi)) { + MENUITEMINFOA mii = { sizeof(MENUITEMINFOA), MIIM_STATE }; + if (GetMenuItemInfoA(mbi.hMenu, EM_SETSEL, FALSE, &mii)) { + if (mii.fState & MFS_HILITE) { + PostMessageA(hwnd, WM_KEYDOWN, VK_RETURN, 0x1c0001); + PostMessageA(hwnd, WM_KEYUP, VK_RETURN, 0x1c0001); + } + else { + PostMessageA(hwnd, WM_KEYDOWN, VK_DOWN, 0x500001); + PostMessageA(hwnd, WM_KEYUP, VK_DOWN, 0x500001); + } + } + } + } + break; + case WM_COMMAND: + menu_messages.wm_command++; + break; + case EM_SETSEL: + menu_messages.em_setsel++; + break; + } + return CallWindowProcA(p_edit_proc, hwnd, msg, wParam, lParam); +} + static void test_contextmenu(void) { HWND hwndMain, hwndEdit; + MSG msg;
hwndMain = CreateWindowA(szEditTest4Class, "ET4", WS_OVERLAPPEDWINDOW|WS_VISIBLE, 0, 0, 200, 200, NULL, NULL, hinst, NULL); @@ -2225,6 +2308,25 @@ p_edit_proc = (void*)SetWindowLongPtrA(hwndEdit, GWLP_WNDPROC, (ULONG_PTR)edit_proc_proxy); SendMessageA(hwndEdit, WM_CONTEXTMENU, (WPARAM)hwndEdit, MAKEWORD(10, 10)); } + + DestroyWindow (hwndEdit); + + hwndEdit = CreateWindowA("EDIT", "Test Text", + WS_CHILD | WS_BORDER | WS_VISIBLE, + 0, 0, 100, 100, + hwndMain, NULL, hinst, NULL); + memset(&menu_messages, 0, sizeof(menu_messages)); + p_edit_proc = (void*)SetWindowLongPtrA(hwndEdit, GWLP_WNDPROC, + (ULONG_PTR)child_edit_menu_proc); + + SetFocus(hwndEdit); + SendMessageA(hwndEdit, WM_SETTEXT, 0, (LPARAM)"foo"); + SendMessageA(hwndEdit, WM_CONTEXTMENU, (WPARAM)hwndEdit, MAKEWORD(-1, -1)); + while (PeekMessageA(&msg, hwndEdit, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); + ok(menu_messages.wm_command == 0, + "Expected no WM_COMMAND messages, got %d\n", menu_messages.wm_command); + ok(menu_messages.em_setsel == 1, + "Expected 1 EM_SETSEL message, got %d\n", menu_messages.em_setsel);
DestroyWindow (hwndEdit); DestroyWindow (hwndMain);