Fabian Maurer : user32: Don' t send WM_CHAR when a menu gets VK_ESCAPE and add tests.
Module: wine Branch: stable Commit: 695c91a78a67d7532a9fe1f4914d1698339f34c2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=695c91a78a67d7532a9fe1f491... Author: Fabian Maurer <dark.shadow4(a)web.de> Date: Thu Feb 2 16:33:54 2017 +0100 user32: Don't send WM_CHAR when a menu gets VK_ESCAPE and add tests. Signed-off-by: Fabian Maurer <dark.shadow4(a)web.de> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 115bbf424cc0f5ea325e3052aed8ad8106045294) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/user32/menu.c | 2 +- dlls/user32/tests/msg.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index 59fcd9c..827bee7 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -3077,7 +3077,6 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, break; } - TranslateMessage( &msg ); mt.pt = msg.pt; if ( (msg.hwnd==menu->hWnd) || (msg.message!=WM_TIMER) ) @@ -3206,6 +3205,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, } default: + TranslateMessage( &msg ); break; } break; /* WM_KEYDOWN */ diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index eba949b..51009ad 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -1942,6 +1942,10 @@ static const struct message WmTrackPopupMenu[] = { { 0 } }; +static const struct message WmTrackPopupMenuEsc[] = { + { 0 } +}; + static const struct message WmTrackPopupMenuCapture[] = { { HCBT_CREATEWND, hook }, { WM_ENTERMENULOOP, sent|wparam|lparam, TRUE, 0 }, @@ -16071,6 +16075,7 @@ static LRESULT WINAPI cancel_init_proc(HWND hwnd, UINT message, WPARAM wParam, L static void test_TrackPopupMenu(void) { + MSG msg; HWND hwnd; BOOL ret; @@ -16093,6 +16098,20 @@ static void test_TrackPopupMenu(void) ok_sequence(WmTrackPopupMenu, "TrackPopupMenu", TRUE); ok(ret == 1, "TrackPopupMenu failed with error %i\n", GetLastError()); + /* Test popup closing with an ESC-press */ + flush_events(); + PostMessageW(hwnd, WM_KEYDOWN, VK_ESCAPE, 0); + ret = TrackPopupMenu(hpopupmenu, 0, 100,100, 0, hwnd, NULL); + ok(ret == 1, "TrackPopupMenu failed with error %i\n", GetLastError()); + PostQuitMessage(0); + flush_sequence(); + while ( PeekMessageA(&msg, 0, 0, 0, PM_REMOVE) ) + { + TranslateMessage(&msg); + DispatchMessageA(&msg); + } + ok_sequence(WmTrackPopupMenuEsc, "TrackPopupMenuEsc", FALSE); /* Shouldn't get any message */ + SetWindowLongPtrA( hwnd, GWLP_WNDPROC, (LONG_PTR)cancel_init_proc); flush_events();
participants (1)
-
Alexandre Julliard