[5/5] user32: Skip menu loop for empty popup menus.
Vincent Povirk
madewokherd at gmail.com
Tue Jun 24 15:07:51 CDT 2014
-------------- next part --------------
From 31d99a2c6301a9ea7be3acf5bf8a4e8218733005 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Thu, 6 Mar 2014 16:10:54 -0600
Subject: [PATCH 5/5] user32: Skip menu loop for empty popup menus.
---
dlls/user32/menu.c | 3 +++
dlls/user32/tests/menu.c | 14 +++++++-------
dlls/user32/tests/msg.c | 4 ++--
3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index b9c1508..6bc7411 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -3031,6 +3031,9 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y,
set_capture_window( capture_win, 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 eaa93a5..fc154fe 100644
--- a/dlls/user32/tests/menu.c
+++ b/dlls/user32/tests/menu.c
@@ -3580,25 +3580,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 0da2731..f34582a 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -14462,8 +14462,8 @@ static void test_TrackPopupMenuEmpty(void)
flush_events();
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_sequence(WmTrackPopupMenuEmpty, "TrackPopupMenuEmpty", FALSE);
+ ok(ret == 0, "TrackPopupMenu succeeded\n");
DestroyMenu(hpopupmenu);
DestroyWindow(hwnd);
--
1.8.3.2
More information about the wine-patches
mailing list