MAINT-7029 Pop-up menu isn't shown in Place profile if all menu items are disabled

Mnikolenko Productengine 2017-01-05 11:45:17 +02:00
parent 8ef99c38a5
commit 942bbf943d
3 changed files with 26 additions and 13 deletions

View File

@ -1736,6 +1736,7 @@ LLMenuGL::LLMenuGL(const LLMenuGL::Params& p)
mJumpKey(p.jump_key),
mCreateJumpKeys(p.create_jump_keys),
mNeedsArrange(FALSE),
mAlwaysShowMenu(FALSE),
mResetScrollPositionOnShow(true),
mShortcutPad(p.shortcut_pad)
{
@ -3223,20 +3224,23 @@ void LLMenuGL::showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y)
menu->setVisible( TRUE );
//Do not show menu if all menu items are disabled
BOOL item_enabled = false;
for (LLView::child_list_t::const_iterator itor = menu->getChildList()->begin();
itor != menu->getChildList()->end();
++itor)
if(!menu->getAlwaysShowMenu())
{
LLView *menu_item = (*itor);
item_enabled = item_enabled || menu_item->getEnabled();
}
//Do not show menu if all menu items are disabled
BOOL item_enabled = false;
for (LLView::child_list_t::const_iterator itor = menu->getChildList()->begin();
itor != menu->getChildList()->end();
++itor)
{
LLView *menu_item = (*itor);
item_enabled = item_enabled || menu_item->getEnabled();
}
if(!item_enabled)
{
menu->setVisible( FALSE );
return;
if(!item_enabled)
{
menu->setVisible( FALSE );
return;
}
}
// Save click point for detecting cursor moves before mouse-up.

View File

@ -531,6 +531,9 @@ public:
void resetScrollPositionOnShow(bool reset_scroll_pos) { mResetScrollPositionOnShow = reset_scroll_pos; }
bool isScrollPositionOnShowReset() { return mResetScrollPositionOnShow; }
void setAlwaysShowMenu(BOOL show) { mAlwaysShowMenu = show; }
BOOL getAlwaysShowMenu() { return mAlwaysShowMenu; }
// add a context menu branch
BOOL appendContextSubMenu(LLMenuGL *menu);
@ -572,6 +575,8 @@ private:
static LLColor4 sDefaultBackgroundColor;
static BOOL sKeyboardMode;
BOOL mAlwaysShowMenu;
LLUIColor mBackgroundColor;
BOOL mBgVisible;
LLHandle<LLView> mParentMenuItem;

View File

@ -304,7 +304,11 @@ BOOL LLPanelPlaces::postBuild()
enable_registrar.add("Places.OverflowMenu.Enable", boost::bind(&LLPanelPlaces::onOverflowMenuItemEnable, this, _2));
mPlaceMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_place.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
if (!mPlaceMenu)
if (mPlaceMenu)
{
mPlaceMenu->setAlwaysShowMenu(TRUE);
}
else
{
LL_WARNS() << "Error loading Place menu" << LL_ENDL;
}