[PATCH] Menu entries with text=NULL
gerard patel
gerard.patel at asi.fr
Mon Mar 19 03:01:36 CST 2001
Following the bug report by lawson whitney, here is a bug fix.
The problem is that the pseudo menu bar for the system menu is never
displayed, so until my previous patch in MENU_InitTracking,
MENU_CalcItemSize was never called.
Since it is now, it's necessary to test if the menu item belong to this
pseudo menu bar.
Also fixes some cases in SetMenuItemInfo_common where text could
be set to NULL with the MF_TEXT flag 'set'.
ChangeLog:
* controls/menu.c
Fix system menu crash by ensuring that item->text is not null when MF_TEXT set
-------------- next part --------------
? controls/menu.c.new
Index: controls/menu.c
===================================================================
RCS file: /home/wine/wine/controls/menu.c,v
retrieving revision 1.109
diff -u -r1.109 menu.c
--- controls/menu.c 2001/03/14 17:24:59 1.109
+++ controls/menu.c 2001/03/19 08:53:11
@@ -865,8 +865,8 @@
}
- /* If we get here, then it must be a text item */
- if (IS_STRING_ITEM( lpitem->fType ))
+ /* it must be a text item - unless it's the system menu */
+ if (!(lpitem->fType & MF_SYSMENU) && IS_STRING_ITEM( lpitem->fType ))
{ SIZE size;
GetTextExtentPoint32W(hdc, lpitem->text, strlenW(lpitem->text), &size);
@@ -1852,6 +1852,7 @@
LPWSTR prevText = IS_STRING_ITEM(item->fType) ? item->text : NULL;
debug_print_menuitem("MENU_SetItemData from: ", item, "");
+ TRACE("flags=%x str=%p\n", flags, str);
if (IS_STRING_ITEM(flags))
{
@@ -4511,6 +4512,8 @@
{
if (!menu) return FALSE;
+ debug_print_menuitem("MENU_SetItemInfo_common from: ", menu, "");
+
if (lpmii->fMask & MIIM_TYPE ) {
/* Get rid of old string. */
if ( IS_STRING_ITEM(menu->fType) && menu->text) {
@@ -4524,11 +4527,15 @@
menu->text = lpmii->dwTypeData;
- if (IS_STRING_ITEM(menu->fType) && menu->text) {
- if (unicode)
- menu->text = HEAP_strdupW(GetProcessHeap(), 0, lpmii->dwTypeData);
- else
- menu->text = HEAP_strdupAtoW(GetProcessHeap(), 0, (LPSTR)lpmii->dwTypeData);
+ if (IS_STRING_ITEM(menu->fType)) {
+ if (menu->text) {
+ if (unicode)
+ menu->text = HEAP_strdupW(GetProcessHeap(), 0, lpmii->dwTypeData);
+ else
+ menu->text = HEAP_strdupAtoW(GetProcessHeap(), 0, (LPSTR)lpmii->dwTypeData);
+ }
+ else
+ menu->fType |= MF_SEPARATOR;
}
}
@@ -4540,16 +4547,22 @@
}
menu->fType &= ~MENU_ITEM_TYPE(menu->fType);
menu->fType |= MENU_ITEM_TYPE(lpmii->fType);
+ if ( IS_STRING_ITEM(menu->fType) && !menu->text )
+ menu->fType |= MF_SEPARATOR;
}
if (lpmii->fMask & MIIM_STRING ) {
/* free the string when used */
if ( IS_STRING_ITEM(menu->fType) && menu->text) {
HeapFree(GetProcessHeap(), 0, menu->text);
- if (unicode)
- menu->text = HEAP_strdupW(GetProcessHeap(), 0, lpmii->dwTypeData);
- else
- menu->text = HEAP_strdupAtoW(GetProcessHeap(), 0, (LPSTR) lpmii->dwTypeData);
+ if (lpmii->dwTypeData) {
+ if (unicode)
+ menu->text = HEAP_strdupW(GetProcessHeap(), 0, lpmii->dwTypeData);
+ else
+ menu->text = HEAP_strdupAtoW(GetProcessHeap(), 0, (LPSTR) lpmii->dwTypeData);
+ }
+ else
+ menu->fType |= MF_SEPARATOR;
}
}
@@ -4589,7 +4602,7 @@
if (lpmii->fMask & MIIM_DATA)
menu->dwItemData = lpmii->dwItemData;
- debug_print_menuitem("SetMenuItemInfo_common: ", menu, "");
+ debug_print_menuitem("SetMenuItemInfo_common to : ", menu, "");
return TRUE;
}
-------------- next part --------------
More information about the wine-patches
mailing list