From 1285807ec2f58c7dcab2f747461195e126ef26e3 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Mon, 8 Sep 2014 20:01:41 +0300
Subject: [PATCH] MAINT-4397 FIXED It's possible to size the viewer window
 where some menus will draw beyond its bounds

---
 indra/llui/llmenugl.cpp | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 604dc92789b..d3ed4a1286d 100755
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -1276,7 +1276,15 @@ void LLMenuItemBranchGL::openMenu()
 		{
 			// open upwards if menu extends past bottom
 			// adjust by the height of the menu item branch since it is a submenu
-			delta_y = branch_rect.getHeight() - getRect().getHeight();		
+			if (y + 2 * branch_rect.getHeight() - getRect().getHeight() > menu_region_rect.mTop)
+			{
+				// overlaps with top border, align with top
+				delta_y = menu_region_rect.mTop - y - branch_rect.getHeight();
+			}
+			else
+			{
+				delta_y = branch_rect.getHeight() - getRect().getHeight();
+			}
 		}
 
 		if( x + branch_rect.getWidth() > menu_region_rect.mRight )
@@ -3258,6 +3266,11 @@ void LLMenuGL::showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y)
 		CURSOR_WIDTH + MOUSE_CURSOR_PADDING * 2, 
 		CURSOR_HEIGHT + MOUSE_CURSOR_PADDING * 2);
 	menu->translateIntoRectWithExclusion( menu_region_rect, mouse_rect );
+	if (menu->getRect().mTop > menu_region_rect.mTop)
+	{
+		// not enough space: align with top, ignore exclusion
+		menu->translateIntoRect( menu_region_rect );
+	}
 	menu->getParent()->sendChildToFront(menu);
 }
 
-- 
GitLab