[PATCH v2 4/6] user32: Reimplement GetMenuStringA on top of NtUserThunkedMenuItemInfo.
Jacek Caban
wine at gitlab.winehq.org
Tue Jun 21 08:10:01 CDT 2022
From: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
---
dlls/user32/menu.c | 45 ++++++++++++---------------------------------
1 file changed, 12 insertions(+), 33 deletions(-)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index df260b063d9..29a266d2312 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -476,42 +476,21 @@ BOOL WINAPI ChangeMenuW( HMENU hMenu, UINT pos, LPCWSTR data,
/*******************************************************************
* GetMenuStringA (USER32.@)
*/
-INT WINAPI GetMenuStringA(
- HMENU hMenu, /* [in] menuhandle */
- UINT wItemID, /* [in] menu item (dep. on wFlags) */
- LPSTR str, /* [out] outbuffer. If NULL, func returns entry length*/
- INT nMaxSiz, /* [in] length of buffer. if 0, func returns entry len*/
- UINT wFlags /* [in] MF_ flags */
-)
+INT WINAPI GetMenuStringA( HMENU menu, UINT item, char *str, INT count, UINT flags )
{
- POPUPMENU *menu;
- MENUITEM *item;
- UINT pos;
- INT ret;
-
- TRACE("menu=%p item=%04x ptr=%p len=%d flags=%04x\n", hMenu, wItemID, str, nMaxSiz, wFlags );
- if (str && nMaxSiz) str[0] = '\0';
-
- if (!(menu = find_menu_item(hMenu, wItemID, wFlags, &pos)))
- {
- SetLastError( ERROR_MENU_ITEM_NOT_FOUND);
- return 0;
- }
- item = &menu->items[pos];
+ MENUITEMINFOA info;
+ int ret;
- if (!item->text)
- ret = 0;
- else if (!str || !nMaxSiz)
- ret = WideCharToMultiByte( CP_ACP, 0, item->text, -1, NULL, 0, NULL, NULL );
- else
- {
- if (!WideCharToMultiByte( CP_ACP, 0, item->text, -1, str, nMaxSiz, NULL, NULL ))
- str[nMaxSiz-1] = 0;
- ret = strlen(str);
- }
- release_menu_ptr(menu);
+ TRACE( "menu=%p item=%04x ptr=%p len=%d flags=%04x\n", menu, item, str, count, flags );
- TRACE("returning %s\n", debugstr_a(str));
+ info.cbSize = sizeof(info);
+ info.fMask = MIIM_STRING;
+ info.dwTypeData = str;
+ info.cch = count;
+ ret = NtUserThunkedMenuItemInfo( menu, item, flags, NtUserGetMenuItemInfoA,
+ (MENUITEMINFOW *)&info, NULL );
+ if (ret) ret = info.cch;
+ TRACE( "returning %s %d\n", debugstr_a( str ), ret );
return ret;
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/294
More information about the wine-devel
mailing list