SL-15410 Menu search breaks torn off menus

master
Andrey Kleshchev 2021-06-18 19:11:33 +03:00
parent 9a36c1ac21
commit da5cc13df2
3 changed files with 46 additions and 6 deletions

View File

@ -2362,6 +2362,16 @@ void LLMenuGL::arrange( void )
(*item_iter)->setRect( rect );
}
}
if (getTornOff())
{
LLTearOffMenu * torn_off_menu = dynamic_cast<LLTearOffMenu*>(getParent());
if (torn_off_menu)
{
torn_off_menu->updateSize();
}
}
}
if (mKeepFixedSize)
{
@ -3894,7 +3904,7 @@ LLTearOffMenu::LLTearOffMenu(LLMenuGL* menup) :
LLRect rect;
menup->localRectToOtherView(LLRect(-1, menup->getRect().getHeight(), menup->getRect().getWidth() + 3, 0), &rect, gFloaterView);
// make sure this floater is big enough for menu
mTargetHeight = (F32)(rect.getHeight() + floater_header_size);
mTargetHeight = rect.getHeight() + floater_header_size;
reshape(rect.getWidth(), rect.getHeight());
setRect(rect);
@ -3926,12 +3936,12 @@ LLTearOffMenu::~LLTearOffMenu()
void LLTearOffMenu::draw()
{
mMenu->setBackgroundVisible(isBackgroundOpaque());
mMenu->needsArrange();
if (getRect().getHeight() != mTargetHeight)
{
// animate towards target height
reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), mTargetHeight, LLSmoothInterpolation::getInterpolant(0.05f))));
reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), (F32)mTargetHeight, LLSmoothInterpolation::getInterpolant(0.05f))));
mMenu->needsArrange();
}
LLFloater::draw();
}
@ -4014,6 +4024,31 @@ LLTearOffMenu* LLTearOffMenu::create(LLMenuGL* menup)
return tearoffp;
}
void LLTearOffMenu::updateSize()
{
if (mMenu)
{
S32 floater_header_size = getHeaderHeight();
const LLRect &floater_rect = getRect();
LLRect new_rect;
mMenu->localRectToOtherView(LLRect(-1, mMenu->getRect().getHeight() + floater_header_size, mMenu->getRect().getWidth() + 3, 0), &new_rect, gFloaterView);
if (floater_rect.getWidth() != new_rect.getWidth()
|| mTargetHeight != new_rect.getHeight())
{
// make sure this floater is big enough for menu
mTargetHeight = new_rect.getHeight();
reshape(new_rect.getWidth(), mTargetHeight);
// Restore menu position
LLRect menu_rect = mMenu->getRect();
menu_rect.setOriginAndSize(1, 1,
menu_rect.getWidth(), menu_rect.getHeight());
mMenu->setRect(menu_rect);
}
}
}
void LLTearOffMenu::closeTearOff()
{
removeChild(mMenu);

View File

@ -873,6 +873,8 @@ public:
virtual BOOL handleKeyHere(KEY key, MASK mask);
virtual void translate(S32 x, S32 y);
void updateSize();
private:
LLTearOffMenu(LLMenuGL* menup);
@ -880,7 +882,7 @@ private:
LLView* mOldParent;
LLMenuGL* mMenu;
F32 mTargetHeight;
S32 mTargetHeight;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -132,8 +132,11 @@ void ll::statusbar::SearchableItem::setNotHighlighted( )
{
mCtrl->setHighlighted( false );
if( mWasHiddenBySearch )
mMenu->setVisible( TRUE );
if (mWasHiddenBySearch)
{
mMenu->setVisible(TRUE);
mWasHiddenBySearch = false;
}
}
}