Module: wine Branch: master Commit: 93ff3fde8a7f04f7a363c4ee71d020ff2a51e911 URL: http://source.winehq.org/git/wine.git/?a=commit;h=93ff3fde8a7f04f7a363c4ee71...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Tue Dec 1 04:13:38 2015 +0300
oledlg: Replace existing menu item in case of empty object too.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/oledlg/oledlg_main.c | 1 + dlls/oledlg/tests/main.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+)
diff --git a/dlls/oledlg/oledlg_main.c b/dlls/oledlg/oledlg_main.c index 87df968..8ba9f17 100644 --- a/dlls/oledlg/oledlg_main.c +++ b/dlls/oledlg/oledlg_main.c @@ -184,6 +184,7 @@ BOOL WINAPI OleUIAddVerbMenuW(IOleObject *object, LPCWSTR shorttype, LoadStringW(OLEDLG_hInstance, IDS_VERBMENU_OBJECT, resstrW, sizeof(resstrW)/sizeof(WCHAR)); /* no object, or object without enumeration support */ if (!object || !enumverbs) { + RemoveMenu(hMenu, uPos, MF_BYPOSITION); InsertMenuW(hMenu, uPos, MF_BYPOSITION|MF_STRING|MF_GRAYED, idmin, resstrW); return FALSE; } diff --git a/dlls/oledlg/tests/main.c b/dlls/oledlg/tests/main.c index 9c5e4bd..5d452f1 100644 --- a/dlls/oledlg/tests/main.c +++ b/dlls/oledlg/tests/main.c @@ -303,6 +303,7 @@ static IOleObject oleobject = { &oleobjectvtbl };
static void test_OleUIAddVerbMenu(void) { + static const WCHAR cadabraW[] = {'c','a','d','a','b','r','a',0}; HMENU hMenu, verbmenu; MENUITEMINFOW info; WCHAR buffW[50]; @@ -418,6 +419,72 @@ static void test_OleUIAddVerbMenu(void) ok(count == 5, "got %d\n", count);
DestroyMenu(hMenu); + + /* try to add verb menu repeatedly, with same id */ + hMenu = CreatePopupMenu(); + + count = GetMenuItemCount(hMenu); + ok(count == 0, "got %d\n", count); + + verbmenu = NULL; + ret = OleUIAddVerbMenuW(NULL, NULL, hMenu, 0, 5, 10, TRUE, 3, &verbmenu); + ok(!ret, "got %d\n", ret); + ok(verbmenu == NULL, "got %p\n", verbmenu); + + count = GetMenuItemCount(hMenu); + ok(count == 1, "got %d\n", count); + + verbmenu = NULL; + ret = OleUIAddVerbMenuW(NULL, NULL, hMenu, 0, 5, 10, TRUE, 3, &verbmenu); + ok(!ret, "got %d\n", ret); + ok(verbmenu == NULL, "got %p\n", verbmenu); + + count = GetMenuItemCount(hMenu); + ok(count == 1, "got %d\n", count); + + /* same position, different id */ + verbmenu = NULL; + ret = OleUIAddVerbMenuW(NULL, NULL, hMenu, 0, 6, 10, TRUE, 3, &verbmenu); + ok(!ret, "got %d\n", ret); + ok(verbmenu == NULL, "got %p\n", verbmenu); + + count = GetMenuItemCount(hMenu); + ok(count == 1, "got %d\n", count); + + /* change added item string and state */ + memset(&info, 0, sizeof(info)); + info.cbSize = sizeof(info); + info.fMask = MIIM_STRING|MIIM_STATE; + info.fState = MFS_ENABLED; + info.dwTypeData = buffW; + lstrcpyW(buffW, cadabraW); + ret = SetMenuItemInfoW(hMenu, 0, TRUE, &info); + ok(ret, "got %d\n", ret); + + buffW[0] = 0; + GetMenuStringW(hMenu, 0, buffW, sizeof(buffW)/sizeof(buffW[0]), MF_BYPOSITION); + ok(!lstrcmpW(buffW, cadabraW), "got %s\n", wine_dbgstr_w(buffW)); + + verbmenu = NULL; + ret = OleUIAddVerbMenuW(NULL, NULL, hMenu, 0, 5, 10, TRUE, 3, &verbmenu); + ok(!ret, "got %d\n", ret); + ok(verbmenu == NULL, "got %p\n", verbmenu); + + memset(&info, 0, sizeof(info)); + info.cbSize = sizeof(info); + info.fMask = MIIM_STRING|MIIM_STATE; + buffW[0] = 0; + info.dwTypeData = buffW; + info.cch = sizeof(buffW)/sizeof(WCHAR); + ret = GetMenuItemInfoW(hMenu, 0, TRUE, &info); + ok(ret, "got %d\n", ret); + ok(lstrcmpW(buffW, cadabraW), "got %s\n", wine_dbgstr_w(buffW)); + ok(info.fState == MF_GRAYED, "got state 0x%08x\n", info.fState); + + count = GetMenuItemCount(hMenu); + ok(count == 1, "got %d\n", count); + + DestroyMenu(hMenu); }
START_TEST(main)