Module: wine Branch: master Commit: 906db769f14eb237be503726e03b35951a5bf07d URL: http://source.winehq.org/git/wine.git/?a=commit;h=906db769f14eb237be503726e0... Author: Vincent Povirk <vincent(a)codeweavers.com> Date: Mon Mar 14 16:13:57 2016 -0500 user32: Skip menu loop for empty popup menus. Signed-off-by: Vincent Povirk <vincent(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/user32/menu.c | 3 +++ dlls/user32/tests/menu.c | 14 +++++++------- dlls/user32/tests/msg.c | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index 76fcd70..7a49ac0 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -3033,6 +3033,9 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, if (!(wFlags & TPM_POPUPMENU)) set_capture_window( mt.hOwnerWnd, GUI_INMENUMODE, NULL ); + if ((wFlags & TPM_POPUPMENU) && menu->nItems == 0) + return FALSE; + __TRY while (!fEndMenu) { menu = MENU_GetMenu( mt.hCurrentMenu ); diff --git a/dlls/user32/tests/menu.c b/dlls/user32/tests/menu.c index 88b9df9..65c8e93 100644 --- a/dlls/user32/tests/menu.c +++ b/dlls/user32/tests/menu.c @@ -3820,25 +3820,25 @@ static void test_emptypopup(void) ok(gflag_initmenupopup == 1, "got %i\n", gflag_initmenupopup); ok(gflag_entermenuloop == 1, "got %i\n", gflag_entermenuloop); ok(gflag_initmenu == 1, "got %i\n", gflag_initmenu); - todo_wine ok(gflag_enteridle == 0, "got %i\n", gflag_initmenu); + ok(gflag_enteridle == 0, "got %i\n", gflag_initmenu); - todo_wine ok(selectitem_wp == 0xdeadbeef, "got %lx\n", selectitem_wp); - todo_wine ok(selectitem_lp == 0xdeadbeef, "got %lx\n", selectitem_lp); + ok(selectitem_wp == 0xdeadbeef, "got %lx\n", selectitem_wp); + ok(selectitem_lp == 0xdeadbeef, "got %lx\n", selectitem_lp); gflag_initmenupopup = gflag_entermenuloop = gflag_initmenu = gflag_enteridle = 0; selectitem_wp = 0xdeadbeef; selectitem_lp = 0xdeadbeef; ret = TrackPopupMenu( hmenu, 0, 100,100, 0, hwnd, NULL); - todo_wine ok(ret == 0, "got %i\n", ret); + ok(ret == 0, "got %i\n", ret); ok(gflag_initmenupopup == 1, "got %i\n", gflag_initmenupopup); ok(gflag_entermenuloop == 1, "got %i\n", gflag_entermenuloop); ok(gflag_initmenu == 1, "got %i\n", gflag_initmenu); - todo_wine ok(gflag_enteridle == 0, "got %i\n", gflag_initmenu); + ok(gflag_enteridle == 0, "got %i\n", gflag_initmenu); - todo_wine ok(selectitem_wp == 0xdeadbeef, "got %lx\n", selectitem_wp); - todo_wine ok(selectitem_lp == 0xdeadbeef, "got %lx\n", selectitem_lp); + ok(selectitem_wp == 0xdeadbeef, "got %lx\n", selectitem_wp); + ok(selectitem_lp == 0xdeadbeef, "got %lx\n", selectitem_lp); SetWindowLongPtrA( hwnd, GWLP_WNDPROC, (LONG_PTR)menu_fill_in_init); diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 47d754f..97bf443 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -15373,7 +15373,7 @@ static void test_TrackPopupMenuEmpty(void) flush_sequence(); ret = TrackPopupMenu(hpopupmenu, 0, 100,100, 0, hwnd, NULL); ok_sequence(WmTrackPopupMenuEmpty, "TrackPopupMenuEmpty", TRUE); - todo_wine ok(ret == 0, "TrackPopupMenu succeeded\n"); + ok(ret == 0, "TrackPopupMenu succeeded\n"); DestroyMenu(hpopupmenu); DestroyWindow(hwnd);