Converted menu string handling to Unicode.

This commit is contained in:
Aric Stewart 2000-10-24 21:28:19 +00:00 committed by Alexandre Julliard
parent 4162315eac
commit c946b1cccd
1 changed files with 69 additions and 67 deletions

View File

@ -31,6 +31,7 @@
#include "message.h" #include "message.h"
#include "queue.h" #include "queue.h"
#include "tweak.h" #include "tweak.h"
#include "wine/unicode.h"
#include "debugtools.h" #include "debugtools.h"
@ -51,7 +52,7 @@ typedef struct {
HMENU hSubMenu; /* Pop-up menu. */ HMENU hSubMenu; /* Pop-up menu. */
HBITMAP hCheckBit; /* Bitmap when checked. */ HBITMAP hCheckBit; /* Bitmap when checked. */
HBITMAP hUnCheckBit; /* Bitmap when unchecked. */ HBITMAP hUnCheckBit; /* Bitmap when unchecked. */
LPSTR text; /* Item text or bitmap handle. */ LPWSTR text; /* Item text or bitmap handle. */
DWORD dwItemData; /* Application defined. */ DWORD dwItemData; /* Application defined. */
DWORD dwTypeData; /* depends on fMask */ DWORD dwTypeData; /* depends on fMask */
HBITMAP hbmpItem; /* bitmap in win98 style menus */ HBITMAP hbmpItem; /* bitmap in win98 style menus */
@ -250,7 +251,7 @@ static void do_debug_print_menuitem(const char *prefix, MENUITEM * mp,
if (typ == MFT_STRING) { if (typ == MFT_STRING) {
if (mp->text) if (mp->text)
DPRINTF( ", Text=\"%s\"", mp->text); DPRINTF( ", Text=\"%s\"", debugstr_w(mp->text));
else else
DPRINTF( ", Text=Null"); DPRINTF( ", Text=Null");
} else if (mp->text == NULL) } else if (mp->text == NULL)
@ -705,10 +706,10 @@ static UINT MENU_FindItemByKey( HWND hwndOwner, HMENU hmenu,
{ {
if (item->text && (IS_STRING_ITEM(item->fType))) if (item->text && (IS_STRING_ITEM(item->fType)))
{ {
char *p = item->text - 2; WCHAR *p = item->text - 2;
do do
{ {
p = strchr (p + 2, '&'); p = strchrW (p + 2, '&');
} }
while (p != NULL && p [1] == '&'); while (p != NULL && p [1] == '&');
if (p && (toupper(p[1]) == key)) return i; if (p && (toupper(p[1]) == key)) return i;
@ -771,7 +772,7 @@ static HBITMAP MENU_LoadMagicItem(UINT id, BOOL hilite, DWORD dwItemData)
static void MENU_CalcItemSize( HDC hdc, MENUITEM *lpitem, HWND hwndOwner, static void MENU_CalcItemSize( HDC hdc, MENUITEM *lpitem, HWND hwndOwner,
INT orgX, INT orgY, BOOL menuBar ) INT orgX, INT orgY, BOOL menuBar )
{ {
char *p; WCHAR *p;
TRACE("dc=0x%04x owner=0x%04x (%d,%d)\n", hdc, hwndOwner, orgX, orgY); TRACE("dc=0x%04x owner=0x%04x (%d,%d)\n", hdc, hwndOwner, orgX, orgY);
debug_print_menuitem("MENU_CalcItemSize: menuitem:", lpitem, debug_print_menuitem("MENU_CalcItemSize: menuitem:", lpitem,
@ -862,7 +863,7 @@ static void MENU_CalcItemSize( HDC hdc, MENUITEM *lpitem, HWND hwndOwner,
if (IS_STRING_ITEM( lpitem->fType )) if (IS_STRING_ITEM( lpitem->fType ))
{ SIZE size; { SIZE size;
GetTextExtentPoint32A(hdc, lpitem->text, strlen(lpitem->text), &size); GetTextExtentPoint32W(hdc, lpitem->text, strlenW(lpitem->text), &size);
lpitem->rect.right += size.cx; lpitem->rect.right += size.cx;
if (TWEAK_WineLook == WIN31_LOOK) if (TWEAK_WineLook == WIN31_LOOK)
@ -875,16 +876,16 @@ static void MENU_CalcItemSize( HDC hdc, MENUITEM *lpitem, HWND hwndOwner,
{ {
lpitem->rect.right += MENU_BAR_ITEMS_SPACE; lpitem->rect.right += MENU_BAR_ITEMS_SPACE;
} }
else if ((p = strchr( lpitem->text, '\t' )) != NULL) else if ((p = strchrW( lpitem->text, '\t' )) != NULL)
{ {
/* Item contains a tab (only meaningful in popup menus) */ /* Item contains a tab (only meaningful in popup menus) */
GetTextExtentPoint32A(hdc, lpitem->text, (int)(p - lpitem->text) , &size); GetTextExtentPoint32W(hdc, lpitem->text, (int)(p - lpitem->text) , &size);
lpitem->xTab = check_bitmap_width + MENU_TAB_SPACE + size.cx; lpitem->xTab = check_bitmap_width + MENU_TAB_SPACE + size.cx;
lpitem->rect.right += MENU_TAB_SPACE; lpitem->rect.right += MENU_TAB_SPACE;
} }
else else
{ {
if (strchr( lpitem->text, '\b' )) if (strchrW( lpitem->text, '\b' ))
lpitem->rect.right += MENU_TAB_SPACE; lpitem->rect.right += MENU_TAB_SPACE;
lpitem->xTab = lpitem->rect.right - check_bitmap_width lpitem->xTab = lpitem->rect.right - check_bitmap_width
- arrow_bitmap_width; - arrow_bitmap_width;
@ -1310,7 +1311,7 @@ static void MENU_DrawMenuItem( HWND hwnd, HMENU hmenu, HWND hwndOwner, HDC hdc,
{ {
rect.left += MENU_BAR_ITEMS_SPACE / 2; rect.left += MENU_BAR_ITEMS_SPACE / 2;
rect.right -= MENU_BAR_ITEMS_SPACE / 2; rect.right -= MENU_BAR_ITEMS_SPACE / 2;
i = strlen( lpitem->text ); i = strlenW( lpitem->text );
} }
else else
{ {
@ -1325,13 +1326,13 @@ static void MENU_DrawMenuItem( HWND hwnd, HMENU hmenu, HWND hwndOwner, HDC hdc,
{ {
++rect.left; ++rect.top; ++rect.right; ++rect.bottom; ++rect.left; ++rect.top; ++rect.right; ++rect.bottom;
SetTextColor(hdc, RGB(0xff, 0xff, 0xff)); SetTextColor(hdc, RGB(0xff, 0xff, 0xff));
DrawTextA( hdc, lpitem->text, i, &rect, uFormat ); DrawTextW( hdc, lpitem->text, i, &rect, uFormat );
--rect.left; --rect.top; --rect.right; --rect.bottom; --rect.left; --rect.top; --rect.right; --rect.bottom;
} }
SetTextColor(hdc, RGB(0x80, 0x80, 0x80)); SetTextColor(hdc, RGB(0x80, 0x80, 0x80));
} }
DrawTextA( hdc, lpitem->text, i, &rect, uFormat); DrawTextW( hdc, lpitem->text, i, &rect, uFormat);
/* paint the shortcut text */ /* paint the shortcut text */
if (lpitem->text[i]) /* There's a tab or flush-right char */ if (lpitem->text[i]) /* There's a tab or flush-right char */
@ -1352,12 +1353,12 @@ static void MENU_DrawMenuItem( HWND hwnd, HMENU hmenu, HWND hwndOwner, HDC hdc,
{ {
++rect.left; ++rect.top; ++rect.right; ++rect.bottom; ++rect.left; ++rect.top; ++rect.right; ++rect.bottom;
SetTextColor(hdc, RGB(0xff, 0xff, 0xff)); SetTextColor(hdc, RGB(0xff, 0xff, 0xff));
DrawTextA( hdc, lpitem->text + i + 1, -1, &rect, uFormat ); DrawTextW( hdc, lpitem->text + i + 1, -1, &rect, uFormat );
--rect.left; --rect.top; --rect.right; --rect.bottom; --rect.left; --rect.top; --rect.right; --rect.bottom;
} }
SetTextColor(hdc, RGB(0x80, 0x80, 0x80)); SetTextColor(hdc, RGB(0x80, 0x80, 0x80));
} }
DrawTextA( hdc, lpitem->text + i + 1, -1, &rect, uFormat ); DrawTextW( hdc, lpitem->text + i + 1, -1, &rect, uFormat );
} }
if (hfontOld) if (hfontOld)
@ -1802,9 +1803,9 @@ static void MENU_MoveSelection( HWND hwndOwner, HMENU hmenu, INT offset )
* ModifyMenu(). * ModifyMenu().
*/ */
static BOOL MENU_SetItemData( MENUITEM *item, UINT flags, UINT id, static BOOL MENU_SetItemData( MENUITEM *item, UINT flags, UINT id,
LPCSTR str ) LPCWSTR str )
{ {
LPSTR prevText = IS_STRING_ITEM(item->fType) ? item->text : NULL; LPWSTR prevText = IS_STRING_ITEM(item->fType) ? item->text : NULL;
debug_print_menuitem("MENU_SetItemData from: ", item, ""); debug_print_menuitem("MENU_SetItemData from: ", item, "");
@ -1817,19 +1818,19 @@ static BOOL MENU_SetItemData( MENUITEM *item, UINT flags, UINT id,
} }
else else
{ {
LPSTR text; LPWSTR text;
/* Item beginning with a backspace is a help item */ /* Item beginning with a backspace is a help item */
if (*str == '\b') if (*str == '\b')
{ {
flags |= MF_HELP; flags |= MF_HELP;
str++; str++;
} }
if (!(text = HEAP_strdupA( SystemHeap, 0, str ))) return FALSE; if (!(text = HEAP_strdupW( SystemHeap, 0, str ))) return FALSE;
item->text = text; item->text = text;
} }
} }
else if (IS_BITMAP_ITEM(flags)) else if (IS_BITMAP_ITEM(flags))
item->text = (LPSTR)(HBITMAP)LOWORD(str); item->text = (LPWSTR)(HBITMAP)LOWORD(str);
else item->text = NULL; else item->text = NULL;
if (flags & MF_OWNERDRAW) if (flags & MF_OWNERDRAW)
@ -1951,7 +1952,7 @@ static LPCSTR MENU_ParseResource( LPCSTR res, HMENU hMenu, BOOL unicode )
ERR("not a string item %04x\n", flags ); ERR("not a string item %04x\n", flags );
str = res; str = res;
if (!unicode) res += strlen(str) + 1; if (!unicode) res += strlen(str) + 1;
else res += (lstrlenW((LPCWSTR)str) + 1) * sizeof(WCHAR); else res += (strlenW((LPCWSTR)str) + 1) * sizeof(WCHAR);
if (flags & MF_POPUP) if (flags & MF_POPUP)
{ {
HMENU hSubMenu = CreatePopupMenu(); HMENU hSubMenu = CreatePopupMenu();
@ -1997,7 +1998,7 @@ static LPCSTR MENUEX_ParseResource( LPCSTR res, HMENU hMenu)
/* Align the text on a word boundary. */ /* Align the text on a word boundary. */
res += (~((int)res - 1)) & 1; res += (~((int)res - 1)) & 1;
mii.dwTypeData = (LPWSTR) res; mii.dwTypeData = (LPWSTR) res;
res += (1 + lstrlenW(mii.dwTypeData)) * sizeof(WCHAR); res += (1 + strlenW(mii.dwTypeData)) * sizeof(WCHAR);
/* Align the following fields on a dword boundary. */ /* Align the following fields on a dword boundary. */
res += (~((int)res - 1)) & 3; res += (~((int)res - 1)) & 3;
@ -2637,9 +2638,9 @@ static void MENU_KeyRight( MTRACKER* pmt, UINT wFlags )
TRACE("MENU_KeyRight called, cur %x (%s), top %x (%s).\n", TRACE("MENU_KeyRight called, cur %x (%s), top %x (%s).\n",
pmt->hCurrentMenu, pmt->hCurrentMenu,
(MENU_GetMenu(pmt->hCurrentMenu))-> debugstr_w((MENU_GetMenu(pmt->hCurrentMenu))->
items[0].text, items[0].text),
pmt->hTopMenu, menu->items[0].text ); pmt->hTopMenu, debugstr_w(menu->items[0].text) );
if ( (menu->wFlags & MF_POPUP) || (pmt->hCurrentMenu != pmt->hTopMenu)) if ( (menu->wFlags & MF_POPUP) || (pmt->hCurrentMenu != pmt->hTopMenu))
{ {
@ -3421,9 +3422,9 @@ INT WINAPI GetMenuStringA(
hMenu, wItemID, str, nMaxSiz, wFlags ); hMenu, wItemID, str, nMaxSiz, wFlags );
if (!(item = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return 0; if (!(item = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return 0;
if (!IS_STRING_ITEM(item->fType)) return 0; if (!IS_STRING_ITEM(item->fType)) return 0;
if (!str || !nMaxSiz) return strlen(item->text); if (!str || !nMaxSiz) return strlenW(item->text);
str[0] = '\0'; str[0] = '\0';
lstrcpynA( str, item->text, nMaxSiz ); lstrcpynWtoA( str, item->text, nMaxSiz );
TRACE("returning '%s'\n", str ); TRACE("returning '%s'\n", str );
return strlen(str); return strlen(str);
} }
@ -3441,10 +3442,10 @@ INT WINAPI GetMenuStringW( HMENU hMenu, UINT wItemID,
hMenu, wItemID, str, nMaxSiz, wFlags ); hMenu, wItemID, str, nMaxSiz, wFlags );
if (!(item = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return 0; if (!(item = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return 0;
if (!IS_STRING_ITEM(item->fType)) return 0; if (!IS_STRING_ITEM(item->fType)) return 0;
if (!str || !nMaxSiz) return strlen(item->text); if (!str || !nMaxSiz) return strlenW(item->text);
str[0] = '\0'; str[0] = '\0';
lstrcpynAtoW( str, item->text, nMaxSiz ); lstrcpynW( str, item->text, nMaxSiz );
return lstrlenW(str); return strlenW(str);
} }
@ -3573,17 +3574,17 @@ BOOL16 WINAPI InsertMenu16( HMENU16 hMenu, UINT16 pos, UINT16 flags,
/******************************************************************* /*******************************************************************
* InsertMenuA (USER32.322) * InsertMenuW (USER32.325)
*/ */
BOOL WINAPI InsertMenuA( HMENU hMenu, UINT pos, UINT flags, BOOL WINAPI InsertMenuW( HMENU hMenu, UINT pos, UINT flags,
UINT id, LPCSTR str ) UINT id, LPCWSTR str )
{ {
MENUITEM *item; MENUITEM *item;
if (IS_STRING_ITEM(flags) && str) if (IS_STRING_ITEM(flags) && str)
TRACE("hMenu %04x, pos %d, flags %08x, " TRACE("hMenu %04x, pos %d, flags %08x, "
"id %04x, str '%s'\n", "id %04x, str '%s'\n",
hMenu, pos, flags, id, str ); hMenu, pos, flags, id, debugstr_w(str) );
else TRACE("hMenu %04x, pos %d, flags %08x, " else TRACE("hMenu %04x, pos %d, flags %08x, "
"id %04x, str %08lx (not a string)\n", "id %04x, str %08lx (not a string)\n",
hMenu, pos, flags, id, (DWORD)str ); hMenu, pos, flags, id, (DWORD)str );
@ -3605,21 +3606,21 @@ BOOL WINAPI InsertMenuA( HMENU hMenu, UINT pos, UINT flags,
/******************************************************************* /*******************************************************************
* InsertMenuW (USER32.325) * InsertMenuA (USER32.322)
*/ */
BOOL WINAPI InsertMenuW( HMENU hMenu, UINT pos, UINT flags, BOOL WINAPI InsertMenuA( HMENU hMenu, UINT pos, UINT flags,
UINT id, LPCWSTR str ) UINT id, LPCSTR str )
{ {
BOOL ret; BOOL ret;
if (IS_STRING_ITEM(flags) && str) if (IS_STRING_ITEM(flags) && str)
{ {
LPSTR newstr = HEAP_strdupWtoA( GetProcessHeap(), 0, str ); LPWSTR newstr = HEAP_strdupAtoW( GetProcessHeap(), 0, str );
ret = InsertMenuA( hMenu, pos, flags, id, newstr ); ret = InsertMenuW( hMenu, pos, flags, id, newstr );
HeapFree( GetProcessHeap(), 0, newstr ); HeapFree( GetProcessHeap(), 0, newstr );
return ret; return ret;
} }
else return InsertMenuA( hMenu, pos, flags, id, (LPCSTR)str ); else return InsertMenuW( hMenu, pos, flags, id, (LPCWSTR)str );
} }
@ -3734,17 +3735,17 @@ BOOL16 WINAPI ModifyMenu16( HMENU16 hMenu, UINT16 pos, UINT16 flags,
/******************************************************************* /*******************************************************************
* ModifyMenuA (USER32.397) * ModifyMenuW (USER32.398)
*/ */
BOOL WINAPI ModifyMenuA( HMENU hMenu, UINT pos, UINT flags, BOOL WINAPI ModifyMenuW( HMENU hMenu, UINT pos, UINT flags,
UINT id, LPCSTR str ) UINT id, LPCWSTR str )
{ {
MENUITEM *item; MENUITEM *item;
if (IS_STRING_ITEM(flags)) if (IS_STRING_ITEM(flags))
{ {
TRACE("%04x %d %04x %04x '%s'\n", TRACE("%04x %d %04x %04x '%s'\n",
hMenu, pos, flags, id, str ? str : "#NULL#" ); hMenu, pos, flags, id, str ? debugstr_w(str) : "#NULL#" );
if (!str) return FALSE; if (!str) return FALSE;
} }
else else
@ -3759,21 +3760,21 @@ BOOL WINAPI ModifyMenuA( HMENU hMenu, UINT pos, UINT flags,
/******************************************************************* /*******************************************************************
* ModifyMenuW (USER32.398) * ModifyMenuA (USER32.397)
*/ */
BOOL WINAPI ModifyMenuW( HMENU hMenu, UINT pos, UINT flags, BOOL WINAPI ModifyMenuA( HMENU hMenu, UINT pos, UINT flags,
UINT id, LPCWSTR str ) UINT id, LPCSTR str )
{ {
BOOL ret; BOOL ret;
if (IS_STRING_ITEM(flags) && str) if (IS_STRING_ITEM(flags) && str)
{ {
LPSTR newstr = HEAP_strdupWtoA( GetProcessHeap(), 0, str ); LPWSTR newstr = HEAP_strdupAtoW( GetProcessHeap(), 0, str );
ret = ModifyMenuA( hMenu, pos, flags, id, newstr ); ret = ModifyMenuW( hMenu, pos, flags, id, newstr );
HeapFree( GetProcessHeap(), 0, newstr ); HeapFree( GetProcessHeap(), 0, newstr );
return ret; return ret;
} }
else return ModifyMenuA( hMenu, pos, flags, id, (LPCSTR)str ); else return ModifyMenuW( hMenu, pos, flags, id, (LPCWSTR)str );
} }
@ -4355,7 +4356,7 @@ BOOL WINAPI IsMenu(HMENU hmenu)
*/ */
static BOOL GetMenuItemInfo_common ( HMENU hmenu, UINT item, BOOL bypos, static BOOL GetMenuItemInfo_common ( HMENU hmenu, UINT item, BOOL bypos,
LPMENUITEMINFOA lpmii, BOOL unicode) LPMENUITEMINFOW lpmii, BOOL unicode)
{ {
MENUITEM *menu = MENU_FindItem (&hmenu, &item, bypos? MF_BYPOSITION : 0); MENUITEM *menu = MENU_FindItem (&hmenu, &item, bypos? MF_BYPOSITION : 0);
@ -4369,13 +4370,13 @@ static BOOL GetMenuItemInfo_common ( HMENU hmenu, UINT item, BOOL bypos,
switch (MENU_ITEM_TYPE(menu->fType)) { switch (MENU_ITEM_TYPE(menu->fType)) {
case MF_STRING: case MF_STRING:
if (menu->text) { if (menu->text) {
int len = strlen(menu->text); int len = strlenW(menu->text);
if(lpmii->dwTypeData && lpmii->cch) { if(lpmii->dwTypeData && lpmii->cch) {
if (unicode) if (unicode)
lstrcpynAtoW((LPWSTR) lpmii->dwTypeData, menu->text, lstrcpynW(lpmii->dwTypeData, menu->text,
lpmii->cch); lpmii->cch);
else else
lstrcpynA(lpmii->dwTypeData, menu->text, lpmii->cch); lstrcpynWtoA((LPSTR)lpmii->dwTypeData, menu->text, lpmii->cch);
/* if we've copied a substring we return its length */ /* if we've copied a substring we return its length */
if(lpmii->cch <= len) if(lpmii->cch <= len)
lpmii->cch--; lpmii->cch--;
@ -4395,12 +4396,12 @@ static BOOL GetMenuItemInfo_common ( HMENU hmenu, UINT item, BOOL bypos,
if (lpmii->fMask & MIIM_STRING) { if (lpmii->fMask & MIIM_STRING) {
if(lpmii->dwTypeData && lpmii->cch) { if(lpmii->dwTypeData && lpmii->cch) {
if (unicode) if (unicode)
lstrcpynAtoW((LPWSTR) lpmii->dwTypeData, menu->text, lstrcpynW((LPWSTR) lpmii->dwTypeData, menu->text,
lpmii->cch); lpmii->cch);
else else
lstrcpynA(lpmii->dwTypeData, menu->text, lpmii->cch); lstrcpynWtoA((LPSTR)lpmii->dwTypeData, menu->text, lpmii->cch);
} }
lpmii->cch = strlen(menu->text); lpmii->cch = strlenW(menu->text);
} }
if (lpmii->fMask & MIIM_FTYPE) if (lpmii->fMask & MIIM_FTYPE)
@ -4434,7 +4435,8 @@ static BOOL GetMenuItemInfo_common ( HMENU hmenu, UINT item, BOOL bypos,
BOOL WINAPI GetMenuItemInfoA( HMENU hmenu, UINT item, BOOL bypos, BOOL WINAPI GetMenuItemInfoA( HMENU hmenu, UINT item, BOOL bypos,
LPMENUITEMINFOA lpmii) LPMENUITEMINFOA lpmii)
{ {
return GetMenuItemInfo_common (hmenu, item, bypos, lpmii, FALSE); return GetMenuItemInfo_common (hmenu, item, bypos,
(LPMENUITEMINFOW)lpmii, FALSE);
} }
/********************************************************************** /**********************************************************************
@ -4444,7 +4446,7 @@ BOOL WINAPI GetMenuItemInfoW( HMENU hmenu, UINT item, BOOL bypos,
LPMENUITEMINFOW lpmii) LPMENUITEMINFOW lpmii)
{ {
return GetMenuItemInfo_common (hmenu, item, bypos, return GetMenuItemInfo_common (hmenu, item, bypos,
(LPMENUITEMINFOA)lpmii, TRUE); lpmii, TRUE);
} }
/********************************************************************** /**********************************************************************
@ -4452,7 +4454,7 @@ BOOL WINAPI GetMenuItemInfoW( HMENU hmenu, UINT item, BOOL bypos,
*/ */
static BOOL SetMenuItemInfo_common(MENUITEM * menu, static BOOL SetMenuItemInfo_common(MENUITEM * menu,
const MENUITEMINFOA *lpmii, const MENUITEMINFOW *lpmii,
BOOL unicode) BOOL unicode)
{ {
if (!menu) return FALSE; if (!menu) return FALSE;
@ -4472,9 +4474,9 @@ static BOOL SetMenuItemInfo_common(MENUITEM * menu,
if (IS_STRING_ITEM(menu->fType) && menu->text) { if (IS_STRING_ITEM(menu->fType) && menu->text) {
if (unicode) if (unicode)
menu->text = HEAP_strdupWtoA(SystemHeap, 0, (LPWSTR) lpmii->dwTypeData); menu->text = HEAP_strdupW(SystemHeap, 0, lpmii->dwTypeData);
else else
menu->text = HEAP_strdupA(SystemHeap, 0, lpmii->dwTypeData); menu->text = HEAP_strdupAtoW(SystemHeap, 0, (LPSTR)lpmii->dwTypeData);
} }
} }
@ -4493,9 +4495,9 @@ static BOOL SetMenuItemInfo_common(MENUITEM * menu,
if ( IS_STRING_ITEM(menu->fType) && menu->text) { if ( IS_STRING_ITEM(menu->fType) && menu->text) {
HeapFree(SystemHeap, 0, menu->text); HeapFree(SystemHeap, 0, menu->text);
if (unicode) if (unicode)
menu->text = HEAP_strdupWtoA(SystemHeap, 0, (LPWSTR) lpmii->dwTypeData); menu->text = HEAP_strdupW(SystemHeap, 0, lpmii->dwTypeData);
else else
menu->text = HEAP_strdupA(SystemHeap, 0, lpmii->dwTypeData); menu->text = HEAP_strdupAtoW(SystemHeap, 0, (LPSTR) lpmii->dwTypeData);
} }
} }
@ -4546,7 +4548,7 @@ BOOL WINAPI SetMenuItemInfoA(HMENU hmenu, UINT item, BOOL bypos,
const MENUITEMINFOA *lpmii) const MENUITEMINFOA *lpmii)
{ {
return SetMenuItemInfo_common(MENU_FindItem(&hmenu, &item, bypos? MF_BYPOSITION : 0), return SetMenuItemInfo_common(MENU_FindItem(&hmenu, &item, bypos? MF_BYPOSITION : 0),
lpmii, FALSE); (const MENUITEMINFOW *)lpmii, FALSE);
} }
/********************************************************************** /**********************************************************************
@ -4556,7 +4558,7 @@ BOOL WINAPI SetMenuItemInfoW(HMENU hmenu, UINT item, BOOL bypos,
const MENUITEMINFOW *lpmii) const MENUITEMINFOW *lpmii)
{ {
return SetMenuItemInfo_common(MENU_FindItem(&hmenu, &item, bypos? MF_BYPOSITION : 0), return SetMenuItemInfo_common(MENU_FindItem(&hmenu, &item, bypos? MF_BYPOSITION : 0),
(const MENUITEMINFOA*)lpmii, TRUE); lpmii, TRUE);
} }
/********************************************************************** /**********************************************************************
@ -4683,7 +4685,7 @@ BOOL WINAPI InsertMenuItemA(HMENU hMenu, UINT uItem, BOOL bypos,
const MENUITEMINFOA *lpmii) const MENUITEMINFOA *lpmii)
{ {
MENUITEM *item = MENU_InsertItem(hMenu, uItem, bypos ? MF_BYPOSITION : 0 ); MENUITEM *item = MENU_InsertItem(hMenu, uItem, bypos ? MF_BYPOSITION : 0 );
return SetMenuItemInfo_common(item, lpmii, FALSE); return SetMenuItemInfo_common(item, (const MENUITEMINFOW *)lpmii, FALSE);
} }
@ -4694,7 +4696,7 @@ BOOL WINAPI InsertMenuItemW(HMENU hMenu, UINT uItem, BOOL bypos,
const MENUITEMINFOW *lpmii) const MENUITEMINFOW *lpmii)
{ {
MENUITEM *item = MENU_InsertItem(hMenu, uItem, bypos ? MF_BYPOSITION : 0 ); MENUITEM *item = MENU_InsertItem(hMenu, uItem, bypos ? MF_BYPOSITION : 0 );
return SetMenuItemInfo_common(item, (const MENUITEMINFOA*)lpmii, TRUE); return SetMenuItemInfo_common(item, lpmii, TRUE);
} }
/********************************************************************** /**********************************************************************