Module: wine Branch: master Commit: a2dcfd1d6d0e5715a4bbd30935b81454dd18def0 URL: https://source.winehq.org/git/wine.git/?a=commit;h=a2dcfd1d6d0e5715a4bbd3093...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Apr 15 14:53:43 2022 +0200
win32u: Move DrawMenuBar implementation from user32.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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 );