summaryrefslogtreecommitdiff
path: root/indra/llui/llmenubutton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llmenubutton.cpp')
-rw-r--r--indra/llui/llmenubutton.cpp32
1 files changed, 29 insertions, 3 deletions
diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp
index 3df05f4d3f..0930eb95dd 100644
--- a/indra/llui/llmenubutton.cpp
+++ b/indra/llui/llmenubutton.cpp
@@ -57,6 +57,8 @@ LLMenuButton::LLMenuButton(const LLMenuButton::Params& p)
llwarns << "Error loading menu_button menu" << llendl;
}
}
+
+ setMenuPosition();
}
void LLMenuButton::toggleMenu()
@@ -70,12 +72,34 @@ void LLMenuButton::toggleMenu()
}
else
{
- LLRect rect = getRect();
- //mMenu->needsArrange(); //so it recalculates the visible elements
- LLMenuGL::showPopup(getParent(), mMenu, rect.mLeft, rect.mBottom);
+ //mMenu->needsArrange(); //so it recalculates the visible elements
+ LLMenuGL::showPopup(getParent(), mMenu, mX, mY);
}
}
+void LLMenuButton::setMenuPosition(EMenuPosition position /*ON_BOTTOM_LEFT*/)
+{
+ if (!mMenu)
+ return;
+
+ LLRect rect = getRect();
+
+ switch (position)
+ {
+ case ON_TOP_LEFT:
+ {
+ mX = rect.mLeft;
+ mY = rect.mTop + mMenu->getRect().getHeight();
+ break;
+ }
+ case ON_BOTTOM_LEFT:
+ {
+ mX = rect.mLeft;
+ mY = rect.mBottom;
+ break;
+ }
+ }
+}
void LLMenuButton::hideMenu()
{
@@ -109,6 +133,8 @@ BOOL LLMenuButton::handleMouseDown(S32 x, S32 y, MASK mask)
setFocus(TRUE);
}
+ LLUICtrl::handleMouseDown(x, y, mask);
+
toggleMenu();
if (getSoundFlags() & MOUSE_DOWN)