Jacek Caban : win32u: Move CreatePopupMenu implementation from user32.
Alexandre Julliard
julliard at winehq.org
Fri Apr 15 15:23:16 CDT 2022
Module: wine
Branch: master
Commit: 72d53fda590126acb8cee72cb1fd208946d55d8c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=72d53fda590126acb8cee72cb1fd208946d55d8c
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Apr 15 14:52:51 2022 +0200
win32u: Move CreatePopupMenu implementation from user32.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/menu.c | 10 ++--------
dlls/win32u/menu.c | 5 +++--
dlls/win32u/sysparams.c | 6 +++---
dlls/win32u/win32u_private.h | 2 +-
include/ntuser.h | 12 ++++++------
5 files changed, 15 insertions(+), 20 deletions(-)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index 185d596fbb8..6d506e21c3c 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -4158,13 +4158,7 @@ BOOL WINAPI ModifyMenuA( HMENU hMenu, UINT pos, UINT flags,
*/
HMENU WINAPI CreatePopupMenu(void)
{
- HMENU hmenu;
- POPUPMENU *menu;
-
- if (!(hmenu = CreateMenu())) return 0;
- menu = MENU_GetMenu( hmenu );
- menu->wFlags |= MF_POPUP;
- return hmenu;
+ return NtUserCreateMenu( TRUE );
}
@@ -4213,7 +4207,7 @@ BOOL WINAPI SetMenuItemBitmaps( HMENU hMenu, UINT nPos, UINT wFlags,
*/
HMENU WINAPI CreateMenu(void)
{
- return NtUserCreateMenu();
+ return NtUserCreateMenu( FALSE );
}
diff --git a/dlls/win32u/menu.c b/dlls/win32u/menu.c
index 6ae55e5cee1..2b1a5c97ac1 100644
--- a/dlls/win32u/menu.c
+++ b/dlls/win32u/menu.c
@@ -116,8 +116,8 @@ HMENU get_menu( HWND hwnd )
return UlongToHandle( get_window_long( hwnd, GWLP_ID ));
}
-/* see CreateMenu */
-HMENU create_menu(void)
+/* see CreateMenu and CreatePopupMenu */
+HMENU create_menu( BOOL is_popup )
{
POPUPMENU *menu;
HMENU handle;
@@ -125,6 +125,7 @@ HMENU create_menu(void)
if (!(menu = calloc( 1, sizeof(*menu) ))) return 0;
menu->FocusedItem = NO_SELECTED_ITEM;
menu->refcount = 1;
+ if (is_popup) menu->wFlags |= MF_POPUP;
if (!(handle = alloc_user_handle( &menu->obj, NTUSER_OBJ_MENU ))) free( menu );
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index 4d2455fe64e..f6cbda9fa20 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -4632,9 +4632,6 @@ ULONG_PTR WINAPI NtUserCallNoParam( ULONG code )
{
switch(code)
{
- case NtUserCallNoParam_CreateMenu:
- return HandleToUlong( create_menu() );
-
case NtUserCallNoParam_GetDesktopWindow:
return HandleToUlong( get_desktop_window() );
@@ -4679,6 +4676,9 @@ ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code )
case NtUserCallOneParam_CreateCursorIcon:
return HandleToUlong( alloc_cursoricon_handle( arg ));
+ case NtUserCallOneParam_CreateMenu:
+ return HandleToUlong( create_menu( arg ) );
+
case NtUserCallOneParam_DispatchMessageA:
return dispatch_message( (const MSG *)arg, TRUE );
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 20d0e4ac5b1..89b717c695d 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -353,7 +353,7 @@ extern BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret ) DECL
extern BOOL set_foreground_window( HWND hwnd, BOOL mouse ) DECLSPEC_HIDDEN;
/* menu.c */
-extern HMENU create_menu(void) DECLSPEC_HIDDEN;
+extern HMENU create_menu( BOOL is_popup ) DECLSPEC_HIDDEN;
extern HMENU get_menu( HWND hwnd ) DECLSPEC_HIDDEN;
/* message.c */
diff --git a/include/ntuser.h b/include/ntuser.h
index 34b4462f7fe..47b174bc065 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -577,7 +577,6 @@ HWND WINAPI NtUserWindowFromPoint( LONG x, LONG y );
/* NtUserCallNoParam codes, not compatible with Windows */
enum
{
- NtUserCallNoParam_CreateMenu,
NtUserCallNoParam_GetDesktopWindow,
NtUserCallNoParam_GetInputState,
NtUserCallNoParam_GetMessagePos,
@@ -588,11 +587,6 @@ enum
NtUserUpdateClipboard,
};
-static inline HMENU NtUserCreateMenu(void)
-{
- return UlongToHandle( NtUserCallNoParam( NtUserCallNoParam_CreateMenu ));
-}
-
static inline HWND NtUserGetDesktopWindow(void)
{
return UlongToHandle( NtUserCallNoParam( NtUserCallNoParam_GetDesktopWindow ));
@@ -618,6 +612,7 @@ enum
{
NtUserCallOneParam_BeginDeferWindowPos,
NtUserCallOneParam_CreateCursorIcon,
+ NtUserCallOneParam_CreateMenu,
NtUserCallOneParam_DispatchMessageA,
NtUserCallOneParam_EnableDC,
NtUserCallOneParam_EnableThunkLock,
@@ -651,6 +646,11 @@ static inline HICON NtUserCreateCursorIcon( BOOL is_icon )
return UlongToHandle( NtUserCallOneParam( is_icon, NtUserCallOneParam_CreateCursorIcon ));
}
+static inline HMENU NtUserCreateMenu( BOOL is_popup )
+{
+ return UlongToHandle( NtUserCallOneParam( is_popup, NtUserCallOneParam_CreateMenu ));
+}
+
static inline LRESULT NtUserDispatchMessageA( const MSG *msg )
{
return NtUserCallOneParam( (UINT_PTR)msg, NtUserCallOneParam_DispatchMessageA );
More information about the wine-cvs
mailing list