From 33f77af348c0aa6704f9ec0e9c08040dffd9f51f Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Wed, 7 Aug 2019 01:52:18 +0200 Subject: [PATCH] [WIN32SS] Fix off-screen menu's dropping below their parent --- win32ss/user/ntuser/menu.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/win32ss/user/ntuser/menu.c b/win32ss/user/ntuser/menu.c index ecf67761dd3..cc628162aee 100644 --- a/win32ss/user/ntuser/menu.c +++ b/win32ss/user/ntuser/menu.c @@ -3046,6 +3046,10 @@ static BOOL FASTCALL MENU_ShowPopup(PWND pwndOwner, PMENU menu, UINT id, UINT fl TPM_VERTICAL, /* Then swap horizontal / vertical */ TPM_BOTTOMALIGN | TPM_RIGHTALIGN | TPM_VERTICAL, /* Then the other side again (still swapped hor/ver) */ }; + + /* We should first try left / right, this flag is not needed as input */ + UINT tryFlags = flags & ~TPM_VERTICAL; + UINT n; for (n = 0; n < RTL_NUMBER_OF(flag_mods); ++n) { @@ -3053,7 +3057,7 @@ static BOOL FASTCALL MENU_ShowPopup(PWND pwndOwner, PMENU menu, UINT id, UINT fl INT ty = y; /* Try to move a bit around */ - if (MENU_MoveRect(flags ^ flag_mods[n], &tx, &ty, width, height, &Cleaned, monitor) && + if (MENU_MoveRect(tryFlags ^ flag_mods[n], &tx, &ty, width, height, &Cleaned, monitor) && !RECTL_Intersect(&Cleaned, tx, ty, width, height)) { x = tx; @@ -3361,6 +3365,9 @@ static PMENU FASTCALL MENU_ShowSubPopup(PWND WndOwner, PMENU Menu, BOOL SelectFi ERR("No pWnd\n"); ParentRect = Rect; } + + /* Ensure we can slightly overlap our parent */ + RECTL_vInflateRect(&ParentRect, -UserGetSystemMetrics(SM_CXEDGE) * 2, 0); } else {