summaryrefslogtreecommitdiff
path: root/indra/newview/llnetmap.cpp
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2023-02-02 14:35:22 -0600
committerDave Parks <davep@lindenlab.com>2023-02-02 14:35:22 -0600
commit55ee008035cd41ac2c8c2b95bd251adcb3699c5a (patch)
tree3c39277e429b8742c7cff815e6aea4e75e942490 /indra/newview/llnetmap.cpp
parent93b1da52f56293663d9bfe5272a83a77185f4cff (diff)
parentdc1dd7a274e1ce49eb68ca525eba7f2e39032fa8 (diff)
Merge branch 'DRTVWR-559' of github.com:secondlife/viewer into DRTVWR-559
Diffstat (limited to 'indra/newview/llnetmap.cpp')
-rw-r--r--[-rwxr-xr-x]indra/newview/llnetmap.cpp58
1 files changed, 35 insertions, 23 deletions
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index b34be80b07..0ba3c3d691 100755..100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -102,8 +102,7 @@ LLNetMap::LLNetMap (const Params & p)
mObjectImagep(),
mClosestAgentToCursor(),
mClosestAgentAtLastRightClick(),
- mToolTipMsg(),
- mPopupMenu(NULL)
+ mToolTipMsg()
{
mScale = gSavedSettings.getF32("MiniMapScale");
if (gAgent.isFirstLogin())
@@ -119,6 +118,12 @@ LLNetMap::LLNetMap (const Params & p)
LLNetMap::~LLNetMap()
{
+ auto menu = static_cast<LLMenuGL*>(mPopupMenuHandle.get());
+ if (menu)
+ {
+ menu->die();
+ mPopupMenuHandle.markDead();
+ }
}
BOOL LLNetMap::postBuild()
@@ -134,11 +139,10 @@ BOOL LLNetMap::postBuild()
commitRegistrar.add("Minimap.MapOrientation.Set", boost::bind(&LLNetMap::setMapOrientation, this, _2));
commitRegistrar.add("Minimap.AboutLand", boost::bind(&LLNetMap::popupShowAboutLand, this, _2));
- mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_mini_map.xml", gMenuHolder,
- LLViewerMenuHolderGL::child_registry_t::instance());
- mPopupMenu->setItemEnabled("Re-center map", false);
-
- return true;
+ LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ mPopupMenuHandle = menu->getHandle();
+ menu->setItemEnabled("Re-center map", false);
+ return TRUE;
}
void LLNetMap::setScale( F32 scale )
@@ -206,8 +210,12 @@ void LLNetMap::draw()
mCentering = false;
}
- bool can_recenter_map = !(centered || mCentering || auto_centering);
- mPopupMenu->setItemEnabled("Re-center map", can_recenter_map);
+ auto menu = static_cast<LLMenuGL*>(mPopupMenuHandle.get());
+ if (menu)
+ {
+ bool can_recenter_map = !(centered || mCentering || auto_centering);
+ menu->setItemEnabled("Re-center map", can_recenter_map);
+ }
updateAboutLandPopupButton();
// Prepare a scissor region
@@ -595,14 +603,15 @@ void LLNetMap::drawTracking(const LLVector3d& pos_global, const LLColor4& color,
bool LLNetMap::isMouseOnPopupMenu()
{
- if (!mPopupMenu->isOpen())
+ auto menu = static_cast<LLMenuGL*>(mPopupMenuHandle.get());
+ if (!menu || !menu->isOpen())
{
return false;
}
S32 popup_x;
S32 popup_y;
- LLUI::getInstance()->getMousePositionLocal(mPopupMenu, &popup_x, &popup_y);
+ LLUI::getInstance()->getMousePositionLocal(menu, &popup_x, &popup_y);
// *NOTE: Tolerance is larger than it needs to be because the context menu is offset from the mouse when the menu is opened from certain
// directions. This may be a quirk of LLMenuGL::showPopup. -Cosmic,2022-03-22
constexpr S32 tolerance = 10;
@@ -613,7 +622,7 @@ bool LLNetMap::isMouseOnPopupMenu()
{
for (S32 sign_y = -1; sign_y <= 1; sign_y += 2)
{
- if (mPopupMenu->pointInView(popup_x + (sign_x * tolerance), popup_y + (sign_y * tolerance)))
+ if (menu->pointInView(popup_x + (sign_x * tolerance), popup_y + (sign_y * tolerance)))
{
return true;
}
@@ -624,7 +633,8 @@ bool LLNetMap::isMouseOnPopupMenu()
void LLNetMap::updateAboutLandPopupButton()
{
- if (!mPopupMenu->isOpen())
+ auto menu = static_cast<LLMenuGL*>(mPopupMenuHandle.get());
+ if (!menu || !menu->isOpen())
{
return;
}
@@ -632,7 +642,7 @@ void LLNetMap::updateAboutLandPopupButton()
LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosGlobal(mPopupWorldPos);
if (!region)
{
- mPopupMenu->setItemEnabled("About Land", false);
+ menu->setItemEnabled("About Land", false);
}
else
{
@@ -647,7 +657,7 @@ void LLNetMap::updateAboutLandPopupButton()
{
valid_parcel = hover_parcel->getOwnerID().notNull();
}
- mPopupMenu->setItemEnabled("About Land", valid_parcel);
+ menu->setItemEnabled("About Land", valid_parcel);
}
}
}
@@ -1043,13 +1053,14 @@ BOOL LLNetMap::handleMouseUp(S32 x, S32 y, MASK mask)
BOOL LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
- if (mPopupMenu)
+ auto menu = static_cast<LLMenuGL*>(mPopupMenuHandle.get());
+ if (menu)
{
- mPopupWorldPos = viewPosToGlobal(x, y);
- mPopupMenu->buildDrawLabels();
- mPopupMenu->updateParent(LLMenuGL::sMenuContainer);
- mPopupMenu->setItemEnabled("Stop tracking", LLTracker::isTracking(0));
- LLMenuGL::showPopup(this, mPopupMenu, x, y);
+ mPopupWorldPos = viewPosToGlobal(x, y);
+ menu->buildDrawLabels();
+ menu->updateParent(LLMenuGL::sMenuContainer);
+ menu->setItemEnabled("Stop Tracking", LLTracker::isTracking(0));
+ LLMenuGL::showPopup(this, menu, x, y);
}
return TRUE;
}
@@ -1182,9 +1193,10 @@ void LLNetMap::setZoom(const LLSD &userdata)
void LLNetMap::handleStopTracking (const LLSD& userdata)
{
- if (mPopupMenu)
+ auto menu = static_cast<LLMenuGL*>(mPopupMenuHandle.get());
+ if (menu)
{
- mPopupMenu->setItemEnabled ("Stop tracking", false);
+ menu->setItemEnabled ("Stop Tracking", false);
LLTracker::stopTracking (LLTracker::isTracking(NULL));
}
}