Jacek Caban : win32u: Move DrawMenuBar implementation from user32.
Alexandre Julliard
julliard at winehq.org
Fri Apr 15 15:23:16 CDT 2022
Module: wine
Branch: master
Commit: a2dcfd1d6d0e5715a4bbd30935b81454dd18def0
URL: https://source.winehq.org/git/wine.git/?a=commit;h=a2dcfd1d6d0e5715a4bbd30935b81454dd18def0
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Apr 15 14:53:43 2022 +0200
win32u: Move DrawMenuBar 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 | 23 ++---------------------
dlls/win32u/menu.c | 28 ++++++++++++++++++++++++++++
dlls/win32u/win32u_private.h | 1 +
dlls/win32u/window.c | 3 +++
include/ntuser.h | 6 ++++++
5 files changed, 40 insertions(+), 21 deletions(-)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index d1efb9d49d3..b1fdacefc9c 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -4367,28 +4367,9 @@ HMENU WINAPI GetSubMenu( HMENU hMenu, INT nPos )
/**********************************************************************
* DrawMenuBar (USER32.@)
*/
-BOOL WINAPI DrawMenuBar( HWND hWnd )
+BOOL WINAPI DrawMenuBar( HWND hwnd )
{
- HMENU hMenu;
-
- if (!IsWindow( hWnd ))
- return FALSE;
- if (is_win_menu_disallowed(hWnd))
- return TRUE;
-
- if ((hMenu = GetMenu( hWnd )))
- {
- POPUPMENU *menu = grab_menu_ptr(hMenu);
- if (menu)
- {
- menu->Height = 0; /* Make sure we call MENU_MenuBarCalcSize */
- menu->hwndOwner = hWnd;
- release_menu_ptr(menu);
- }
- }
-
- return NtUserSetWindowPos( hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |
- SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED );
+ return NtUserDrawMenuBar( hwnd );
}
/***********************************************************************
diff --git a/dlls/win32u/menu.c b/dlls/win32u/menu.c
index 0f02bb15c7a..b107bd7e8e0 100644
--- a/dlls/win32u/menu.c
+++ b/dlls/win32u/menu.c
@@ -196,6 +196,11 @@ static POPUPMENU *find_menu_item( HMENU handle, UINT id, UINT flags, UINT *pos )
return menu;
}
+static BOOL is_win_menu_disallowed( HWND hwnd )
+{
+ return (get_window_long(hwnd, GWL_STYLE) & (WS_CHILD | WS_POPUP)) == WS_CHILD;
+}
+
/* see GetMenu */
HMENU get_menu( HWND hwnd )
{
@@ -319,3 +324,26 @@ BOOL WINAPI NtUserEnableMenuItem( HMENU handle, UINT id, UINT flags )
return oldflags;
}
+
+/* see DrawMenuBar */
+BOOL draw_menu_bar( HWND hwnd )
+{
+ HMENU handle;
+
+ if (!is_window( hwnd )) return FALSE;
+ if (is_win_menu_disallowed( hwnd )) return TRUE;
+
+ if ((handle = get_menu( hwnd )))
+ {
+ POPUPMENU *menu = grab_menu_ptr( handle );
+ if (menu)
+ {
+ menu->Height = 0; /* Make sure we call MENU_MenuBarCalcSize */
+ menu->hwndOwner = hwnd;
+ release_menu_ptr( menu );
+ }
+ }
+
+ return NtUserSetWindowPos( hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |
+ SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED );
+}
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 7db37e4a32c..ceff548526b 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -355,6 +355,7 @@ extern BOOL set_foreground_window( HWND hwnd, BOOL mouse ) DECLSPEC_HIDDEN;
/* menu.c */
extern HMENU create_menu( BOOL is_popup ) DECLSPEC_HIDDEN;
+extern BOOL draw_menu_bar( HWND hwnd ) DECLSPEC_HIDDEN;
extern HMENU get_menu( HWND hwnd ) DECLSPEC_HIDDEN;
/* message.c */
diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c
index 3df544b1bb1..9e3b085ac32 100644
--- a/dlls/win32u/window.c
+++ b/dlls/win32u/window.c
@@ -5069,6 +5069,9 @@ ULONG_PTR WINAPI NtUserCallHwnd( HWND hwnd, DWORD code )
case NtUserCallHwnd_ArrangeIconicWindows:
return arrange_iconic_windows( hwnd );
+ case NtUserCallHwnd_DrawMenuBar:
+ return draw_menu_bar( hwnd );
+
case NtUserCallHwnd_GetDpiForWindow:
return get_dpi_for_window( hwnd );
diff --git a/include/ntuser.h b/include/ntuser.h
index ded3096b76c..79ea57590bf 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -777,6 +777,7 @@ static inline BOOL NtUserUnhookWindowsHook( INT id, HOOKPROC proc )
enum
{
NtUserCallHwnd_ArrangeIconicWindows,
+ NtUserCallHwnd_DrawMenuBar,
NtUserCallHwnd_GetDpiForWindow,
NtUserCallHwnd_GetParent,
NtUserCallHwnd_GetWindowContextHelpId,
@@ -793,6 +794,11 @@ static inline UINT NtUserArrangeIconicWindows( HWND parent )
return NtUserCallHwnd( parent, NtUserCallHwnd_ArrangeIconicWindows );
}
+static inline BOOL NtUserDrawMenuBar( HWND hwnd )
+{
+ return NtUserCallHwnd( hwnd, NtUserCallHwnd_DrawMenuBar );
+}
+
static inline DWORD NtUserGetWindowContextHelpId( HWND hwnd )
{
return NtUserCallHwnd( hwnd, NtUserCallHwnd_GetWindowContextHelpId );
More information about the wine-cvs
mailing list