[WIN32SS] For application menu's, only exclude the menu item,
authorMark Jansen <mark.jansen@reactos.org>
Tue, 6 Aug 2019 22:50:21 +0000 (00:50 +0200)
committerMark Jansen <mark.jansen@reactos.org>
Thu, 8 Aug 2019 17:51:15 +0000 (19:51 +0200)
not the entire window.
Because the application menu is part of the application window,
this would lead to bad results.

win32ss/user/ntuser/menu.c

index 13af632..ecf6776 100644 (file)
@@ -3354,10 +3354,20 @@ static PMENU FASTCALL MENU_ShowSubPopup(PWND WndOwner, PMENU Menu, BOOL SelectFi
   pWnd = ValidateHwndNoErr(Menu->hWnd);
 
   /* Grab the rect of our (entire) parent menu, so we can try to not overlap it */
-  if (!IntGetWindowRect(pWnd, &ParentRect))
+  if (Menu->fFlags & MNF_POPUP)
   {
-      ERR("No pWnd\n");
-      ParentRect = Rect;
+    if (!IntGetWindowRect(pWnd, &ParentRect))
+    {
+        ERR("No pWnd\n");
+        ParentRect = Rect;
+    }
+  }
+  else
+  {
+    /* Inside the menu bar, we do not want to grab the entire window... */
+    ParentRect = Rect;
+    if (pWnd)
+        RECTL_vOffsetRect(&ParentRect, pWnd->rcWindow.left, pWnd->rcWindow.top);
   }
 
   /* correct item if modified as a reaction to WM_INITMENUPOPUP message */