SL-15410 Menu search breaks torn off menus
parent
9a36c1ac21
commit
da5cc13df2
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -132,8 +132,11 @@ void ll::statusbar::SearchableItem::setNotHighlighted( )
|
|||
{
|
||||
mCtrl->setHighlighted( false );
|
||||
|
||||
if( mWasHiddenBySearch )
|
||||
mMenu->setVisible( TRUE );
|
||||
if (mWasHiddenBySearch)
|
||||
{
|
||||
mMenu->setVisible(TRUE);
|
||||
mWasHiddenBySearch = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue