Alexandre Julliard : user32: Move the 16-bit menu functions to user16.c.
Alexandre Julliard
julliard at winehq.org
Thu Dec 17 10:37:17 CST 2009
Module: wine
Branch: master
Commit: 15000f32b6a57393de41d6a59b23c345cf36ce8f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=15000f32b6a57393de41d6a59b23c345cf36ce8f
Author: Alexandre Julliard <julliard at 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)
More information about the wine-cvs
mailing list