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