Author: cfinck Date: Fri Jun 13 18:14:27 2008 New Revision: 33958
URL: http://svn.reactos.org/svn/reactos?rev=33958&view=rev Log: Revert parts of r33578: - First of all, MenuSetItemData is only called from InsertMenuA/W and ModifyMenuA/W. Therefore the passed MENUITEMINFO structure will always be empty, so it makes no sense to check for flags in this structure. This way, I could simplify the code block for MF_BITMAP. - Also fType = MFT_BITMAP and fMask = MIIM_BITMAP at the same time passed to win32k don't work. Changing this back to only set fMask fixes bitmap menus. - Furthermore the data for MF_OWNERDRAW is really stored in dwItemData and not in dwTypeData. The MSDN documentation for InsertMenu applies here, not the one for the MENUITEMINFO structure. This fixes owner-drawn menus like the one in Abiword.
See issue #3272 for more details.
Modified: trunk/reactos/dll/win32/user32/windows/menu.c
Modified: trunk/reactos/dll/win32/user32/windows/menu.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/me... ============================================================================== --- trunk/reactos/dll/win32/user32/windows/menu.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/user32/windows/menu.c [iso-8859-1] Fri Jun 13 18:14:27 2008 @@ -3712,20 +3712,8 @@ */ if(Flags & MF_BITMAP) { - if (mii->fType & MFT_BITMAP) - { - /* use old way of storing bitmap */ - mii->fMask |= (MIIM_TYPE | MIIM_FTYPE); - mii->fType |= MF_BITMAP; - mii->dwTypeData = (LPWSTR)NewItem; - } - else - { - /* use new way of storing type */ - mii->hbmpItem = (HBITMAP) NewItem; - mii->fType |= MFT_BITMAP; - mii->fMask |= MIIM_BITMAP; - } + mii->fMask |= MIIM_BITMAP; /* Use the new way of seting hbmpItem.*/ + mii->hbmpItem = (HBITMAP) NewItem;
if (Flags & MF_HELP) { @@ -3736,8 +3724,8 @@ else if(Flags & MF_OWNERDRAW) { mii->fType |= MFT_OWNERDRAW; - mii->fMask |= (MIIM_TYPE | MIIM_FTYPE); - mii->dwTypeData = (LPWSTR) NewItem; + mii->fMask |= MIIM_DATA; + mii->dwItemData = (DWORD) NewItem; } else if (Flags & MF_SEPARATOR) {