summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/lltoggleablemenu.cpp9
-rw-r--r--indra/llui/lltoggleablemenu.h3
-rw-r--r--indra/newview/llfavoritesbar.cpp5
-rw-r--r--indra/newview/llpanelavatar.cpp8
-rw-r--r--indra/newview/llpanelpicks.cpp13
-rw-r--r--indra/newview/llpanelplaces.cpp5
6 files changed, 35 insertions, 8 deletions
diff --git a/indra/llui/lltoggleablemenu.cpp b/indra/llui/lltoggleablemenu.cpp
index 717e135412..5df1d35383 100644
--- a/indra/llui/lltoggleablemenu.cpp
+++ b/indra/llui/lltoggleablemenu.cpp
@@ -40,6 +40,7 @@ static LLDefaultChildRegistry::Register<LLToggleableMenu> r("toggleable_menu");
LLToggleableMenu::LLToggleableMenu(const LLToggleableMenu::Params& p)
: LLMenuGL(p),
+ mButtonRect(),
mClosedByButtonClick(false)
{
}
@@ -56,13 +57,19 @@ void LLToggleableMenu::handleVisibilityChange (BOOL curVisibilityIn)
}
}
-void LLToggleableMenu::setButtonRect(const LLRect& rect, LLView* current_view)
+void LLToggleableMenu::setButtonRect(const LLRect& rect, LLView* current_view)
{
LLRect screen;
current_view->localRectToScreen(rect, &screen);
mButtonRect = screen;
}
+void LLToggleableMenu::setButtonRect(LLView* current_view)
+{
+ LLRect rect = current_view->getLocalRect();
+ setButtonRect(rect, current_view);
+}
+
bool LLToggleableMenu::toggleVisibility()
{
if (mClosedByButtonClick)
diff --git a/indra/llui/lltoggleablemenu.h b/indra/llui/lltoggleablemenu.h
index 3cd66e04a8..9d8c5261b9 100644
--- a/indra/llui/lltoggleablemenu.h
+++ b/indra/llui/lltoggleablemenu.h
@@ -49,8 +49,11 @@ protected:
public:
virtual void handleVisibilityChange (BOOL curVisibilityIn);
+ const LLRect& getButtonRect() const { return mButtonRect; }
+
// Converts the given local button rect to a screen rect
void setButtonRect(const LLRect& rect, LLView* current_view);
+ void setButtonRect(LLView* current_view);
// Returns "true" if menu was not closed by button click
// and is not still visible. If menu is visible toggles
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 18135fc558..01603f390d 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -901,7 +901,10 @@ void LLFavoritesBarCtrl::showDropDownMenu()
menu->buildDrawLabels();
menu->updateParent(LLMenuGL::sMenuContainer);
- menu->setButtonRect(mChevronRect, this);
+ if (menu->getButtonRect().isEmpty())
+ {
+ menu->setButtonRect(mChevronRect, this);
+ }
LLMenuGL::showPopup(this, menu, getRect().getWidth() - menu->getRect().getWidth(), 0);
return;
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index f0aa189b7f..2254684f21 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -570,10 +570,14 @@ void LLPanelAvatarProfile::onOverflowButtonClicked()
return;
LLView* btn = getChild<LLView>("overflow_btn");
- LLRect rect = btn->getRect();
+ if (mProfileMenu->getButtonRect().isEmpty())
+ {
+ mProfileMenu->setButtonRect(btn);
+ }
mProfileMenu->updateParent(LLMenuGL::sMenuContainer);
- mProfileMenu->setButtonRect(btn->getLocalRect(), btn);
+
+ LLRect rect = btn->getRect();
LLMenuGL::showPopup(this, mProfileMenu, rect.mRight, rect.mTop);
}
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 6905c7e546..04b4226f82 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -346,11 +346,18 @@ void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab)
void LLPanelPicks::onOverflowButtonClicked()
{
- LLRect rect;
- childGetRect(XML_BTN_OVERFLOW, rect);
+ if (!mOverflowMenu->toggleVisibility())
+ return;
+
+ LLView* btn = getChild<LLView>(XML_BTN_OVERFLOW);
+ if (mOverflowMenu->getButtonRect().isEmpty())
+ {
+ mOverflowMenu->setButtonRect(btn);
+ }
mOverflowMenu->updateParent(LLMenuGL::sMenuContainer);
- mOverflowMenu->setButtonRect(rect, this);
+
+ LLRect rect = btn->getRect();
LLMenuGL::showPopup(this, mOverflowMenu, rect.mRight, rect.mTop);
}
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 3d0fba9426..eb10d97b37 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -601,9 +601,12 @@ void LLPanelPlaces::onOverflowButtonClicked()
if (!menu->toggleVisibility())
return;
+ if (menu->getButtonRect().isEmpty())
+ {
+ menu->setButtonRect(mOverflowBtn);
+ }
menu->updateParent(LLMenuGL::sMenuContainer);
LLRect rect = mOverflowBtn->getRect();
- menu->setButtonRect(rect, this);
LLMenuGL::showPopup(this, menu, rect.mRight, rect.mTop);
}