Module: wine Branch: master Commit: 15000f32b6a57393de41d6a59b23c345cf36ce8f URL: http://source.winehq.org/git/wine.git/?a=commit;h=15000f32b6a57393de41d6a59b...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Dec 17 15:04:21 2009 +0100
user32: Move the 16-bit menu functions to user16.c.
---
dlls/user32/menu.c | 90 +++++-------------------------------------- dlls/user32/user16.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++ dlls/user32/win.c | 9 ---- 3 files changed, 114 insertions(+), 89 deletions(-)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index 230e412..2f0ffc2 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -51,9 +51,6 @@ #include "winbase.h" #include "wingdi.h" #include "winnls.h" -#include "wine/winbase16.h" -#include "wine/winuser16.h" -#include "wownt32.h" #include "wine/server.h" #include "wine/unicode.h" #include "wine/exception.h" @@ -2132,10 +2129,10 @@ static MENUITEM *MENU_InsertItem( HMENU hMenu, UINT pos, UINT flags ) * * NOTE: flags is equivalent to the mtOption field */ -static LPCSTR MENU_ParseResource( LPCSTR res, HMENU hMenu, BOOL unicode ) +static LPCSTR MENU_ParseResource( LPCSTR res, HMENU hMenu ) { WORD flags, id = 0; - LPCSTR str; + LPCWSTR str; BOOL end_flag;
do @@ -2150,23 +2147,18 @@ static LPCSTR MENU_ParseResource( LPCSTR res, HMENU hMenu, BOOL unicode ) id = GET_WORD(res); res += sizeof(WORD); } - str = res; - if (!unicode) res += strlen(str) + 1; - else res += (strlenW((LPCWSTR)str) + 1) * sizeof(WCHAR); + str = (LPCWSTR)res; + res += (strlenW(str) + 1) * sizeof(WCHAR); if (flags & MF_POPUP) { HMENU hSubMenu = CreatePopupMenu(); if (!hSubMenu) return NULL; - if (!(res = MENU_ParseResource( res, hSubMenu, unicode ))) - return NULL; - if (!unicode) AppendMenuA( hMenu, flags, (UINT_PTR)hSubMenu, str ); - else AppendMenuW( hMenu, flags, (UINT_PTR)hSubMenu, (LPCWSTR)str ); + if (!(res = MENU_ParseResource( res, hSubMenu ))) return NULL; + AppendMenuW( hMenu, flags, (UINT_PTR)hSubMenu, str ); } else /* Not a popup */ { - if (!unicode) AppendMenuA( hMenu, flags, id, *str ? str : NULL ); - else AppendMenuW( hMenu, flags, id, - *(LPCWSTR)str ? (LPCWSTR)str : NULL ); + AppendMenuW( hMenu, flags, id, *str ? str : NULL ); } } while (!end_flag); return res; @@ -3791,7 +3783,7 @@ static void MENU_mnu2mnuii( UINT flags, UINT_PTR id, LPCWSTR str, pmii->dwTypeData = (LPWSTR)str; } else if( flags & MFT_BITMAP){ pmii->fMask |= MIIM_BITMAP | MIIM_STRING; - pmii->hbmpItem = HBITMAP_32(LOWORD(str)); + pmii->hbmpItem = ULongToHandle(LOWORD(str)); } if( flags & MF_OWNERDRAW){ pmii->fMask |= MIIM_DATA; @@ -4326,39 +4318,6 @@ BOOL WINAPI EndMenu(void) }
-/*********************************************************************** - * LookupMenuHandle (USER.217) - */ -HMENU16 WINAPI LookupMenuHandle16( HMENU16 hmenu, INT16 id ) -{ - HMENU hmenu32 = HMENU_32(hmenu); - UINT id32 = id; - if (!MENU_FindItem( &hmenu32, &id32, MF_BYCOMMAND )) return 0; - else return HMENU_16(hmenu32); -} - - -/********************************************************************** - * LoadMenu (USER.150) - */ -HMENU16 WINAPI LoadMenu16( HINSTANCE16 instance, LPCSTR name ) -{ - HRSRC16 hRsrc; - HGLOBAL16 handle; - HMENU16 hMenu; - - if (HIWORD(name) && name[0] == '#') name = ULongToPtr(atoi( name + 1 )); - if (!name) return 0; - - instance = GetExePtr( instance ); - if (!(hRsrc = FindResource16( instance, name, (LPSTR)RT_MENU ))) return 0; - if (!(handle = LoadResource16( instance, hRsrc ))) return 0; - hMenu = LoadMenuIndirect16(LockResource16(handle)); - FreeResource16( handle ); - return hMenu; -} - - /***************************************************************** * LoadMenuA (USER32.@) */ @@ -4382,35 +4341,6 @@ HMENU WINAPI LoadMenuW( HINSTANCE instance, LPCWSTR name )
/********************************************************************** - * LoadMenuIndirect (USER.220) - */ -HMENU16 WINAPI LoadMenuIndirect16( LPCVOID template ) -{ - HMENU hMenu; - WORD version, offset; - LPCSTR p = template; - - TRACE("(%p)\n", template ); - version = GET_WORD(p); - p += sizeof(WORD); - if (version) - { - WARN("version must be 0 for Win16\n" ); - return 0; - } - offset = GET_WORD(p); - p += sizeof(WORD) + offset; - if (!(hMenu = CreateMenu())) return 0; - if (!MENU_ParseResource( p, hMenu, FALSE )) - { - DestroyMenu( hMenu ); - return 0; - } - return HMENU_16(hMenu); -} - - -/********************************************************************** * LoadMenuIndirectW (USER32.@) */ HMENU WINAPI LoadMenuIndirectW( LPCVOID template ) @@ -4428,7 +4358,7 @@ HMENU WINAPI LoadMenuIndirectW( LPCVOID template ) offset = GET_WORD(p); p += sizeof(WORD) + offset; if (!(hMenu = CreateMenu())) return 0; - if (!MENU_ParseResource( p, hMenu, TRUE )) + if (!MENU_ParseResource( p, hMenu )) { DestroyMenu( hMenu ); return 0; @@ -4784,7 +4714,7 @@ static BOOL MENU_NormalizeMenuItemInfoStruct( const MENUITEMINFOW *pmii_in, pmii_out->fMask |= MIIM_STRING; } else if( (pmii_out->fType) & MFT_BITMAP){ pmii_out->fMask |= MIIM_BITMAP; - pmii_out->hbmpItem = HBITMAP_32(LOWORD(pmii_out->dwTypeData)); + pmii_out->hbmpItem = UlongToHandle(LOWORD(pmii_out->dwTypeData)); } } return TRUE; diff --git a/dlls/user32/user16.c b/dlls/user32/user16.c index 34133e5..1c5adb4 100644 --- a/dlls/user32/user16.c +++ b/dlls/user32/user16.c @@ -190,6 +190,15 @@ BOOL16 WINAPI GetCursorPos16( POINT16 *pt ) }
+/******************************************************************* + * AnyPopup (USER.52) + */ +BOOL16 WINAPI AnyPopup16(void) +{ + return AnyPopup(); +} + + /*********************************************************************** * SetCursor (USER.69) */ @@ -511,6 +520,27 @@ INT16 WINAPI GetClipboardFormatName16( UINT16 id, LPSTR buffer, INT16 maxlen )
/********************************************************************** + * LoadMenu (USER.150) + */ +HMENU16 WINAPI LoadMenu16( HINSTANCE16 instance, LPCSTR name ) +{ + HRSRC16 hRsrc; + HGLOBAL16 handle; + HMENU16 hMenu; + + if (HIWORD(name) && name[0] == '#') name = ULongToPtr(atoi( name + 1 )); + if (!name) return 0; + + instance = GetExePtr( instance ); + if (!(hRsrc = FindResource16( instance, name, (LPSTR)RT_MENU ))) return 0; + if (!(handle = LoadResource16( instance, hRsrc ))) return 0; + hMenu = LoadMenuIndirect16(LockResource16(handle)); + FreeResource16( handle ); + return hMenu; +} + + +/********************************************************************** * CreateMenu (USER.151) */ HMENU16 WINAPI CreateMenu16(void) @@ -869,6 +899,80 @@ DWORD WINAPI UserSeeUserDo16(WORD wReqType, WORD wParam1, WORD wParam2, WORD wPa }
+/*********************************************************************** + * LookupMenuHandle (USER.217) + */ +HMENU16 WINAPI LookupMenuHandle16( HMENU16 hmenu, INT16 id ) +{ + FIXME( "%04x %04x: stub\n", hmenu, id ); + return hmenu; +} + + +static LPCSTR parse_menu_resource( LPCSTR res, HMENU hMenu ) +{ + WORD flags, id = 0; + LPCSTR str; + BOOL end_flag; + + do + { + flags = GET_WORD(res); + end_flag = flags & MF_END; + /* Remove MF_END because it has the same value as MF_HILITE */ + flags &= ~MF_END; + res += sizeof(WORD); + if (!(flags & MF_POPUP)) + { + id = GET_WORD(res); + res += sizeof(WORD); + } + str = res; + res += strlen(str) + 1; + if (flags & MF_POPUP) + { + HMENU hSubMenu = CreatePopupMenu(); + if (!hSubMenu) return NULL; + if (!(res = parse_menu_resource( res, hSubMenu ))) return NULL; + AppendMenuA( hMenu, flags, (UINT_PTR)hSubMenu, str ); + } + else /* Not a popup */ + { + AppendMenuA( hMenu, flags, id, *str ? str : NULL ); + } + } while (!end_flag); + return res; +} + +/********************************************************************** + * LoadMenuIndirect (USER.220) + */ +HMENU16 WINAPI LoadMenuIndirect16( LPCVOID template ) +{ + HMENU hMenu; + WORD version, offset; + LPCSTR p = template; + + TRACE("(%p)\n", template ); + version = GET_WORD(p); + p += sizeof(WORD); + if (version) + { + WARN("version must be 0 for Win16\n" ); + return 0; + } + offset = GET_WORD(p); + p += sizeof(WORD) + offset; + if (!(hMenu = CreateMenu())) return 0; + if (!parse_menu_resource( p, hMenu )) + { + DestroyMenu( hMenu ); + return 0; + } + return HMENU_16(hMenu); +} + + /************************************************************************* * ScrollDC (USER.221) */ diff --git a/dlls/user32/win.c b/dlls/user32/win.c index 8f43e92..9712beb 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -3082,15 +3082,6 @@ BOOL WINAPI EnumChildWindows( HWND parent, WNDENUMPROC func, LPARAM lParam )
/******************************************************************* - * AnyPopup (USER.52) - */ -BOOL16 WINAPI AnyPopup16(void) -{ - return AnyPopup(); -} - - -/******************************************************************* * AnyPopup (USER32.@) */ BOOL WINAPI AnyPopup(void)