EXT-4677 Crash when closing pinned menu which has no parent Inventory floater
Reviewed by Richard CC#118meow-7.2.2
parent
ca6caad68c
commit
2231da11dd
|
|
@ -657,11 +657,38 @@ LLMenuItemVerticalSeparatorGL::LLMenuItemVerticalSeparatorGL( void )
|
|||
// Class LLMenuItemTearOffGL
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
LLMenuItemTearOffGL::LLMenuItemTearOffGL(const LLMenuItemTearOffGL::Params& p)
|
||||
: LLMenuItemGL(p),
|
||||
mParentHandle(p.parent_floater_handle)
|
||||
: LLMenuItemGL(p)
|
||||
{
|
||||
}
|
||||
|
||||
// Returns the first floater ancestor if there is one
|
||||
LLFloater* LLMenuItemTearOffGL::getParentFloater()
|
||||
{
|
||||
LLView* parent_view = getMenu();
|
||||
|
||||
while (parent_view)
|
||||
{
|
||||
if (dynamic_cast<LLFloater*>(parent_view))
|
||||
{
|
||||
return dynamic_cast<LLFloater*>(parent_view);
|
||||
}
|
||||
|
||||
bool parent_is_menu = dynamic_cast<LLMenuGL*>(parent_view) && !dynamic_cast<LLMenuBarGL*>(parent_view);
|
||||
|
||||
if (parent_is_menu)
|
||||
{
|
||||
// use menu parent
|
||||
parent_view = dynamic_cast<LLMenuGL*>(parent_view)->getParentMenuItem();
|
||||
}
|
||||
else
|
||||
{
|
||||
// just use regular view parent
|
||||
parent_view = parent_view->getParent();
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void LLMenuItemTearOffGL::onCommit()
|
||||
{
|
||||
|
|
@ -680,7 +707,7 @@ void LLMenuItemTearOffGL::onCommit()
|
|||
|
||||
getMenu()->needsArrange();
|
||||
|
||||
LLFloater* parent_floater = mParentHandle.get();
|
||||
LLFloater* parent_floater = getParentFloater();
|
||||
LLFloater* tear_off_menu = LLTearOffMenu::create(getMenu());
|
||||
|
||||
if (tear_off_menu)
|
||||
|
|
@ -1671,7 +1698,6 @@ LLMenuGL::LLMenuGL(const LLMenuGL::Params& p)
|
|||
mSpilloverMenu(NULL),
|
||||
mJumpKey(p.jump_key),
|
||||
mCreateJumpKeys(p.create_jump_keys),
|
||||
mParentFloaterHandle(p.parent_floater),
|
||||
mNeedsArrange(FALSE),
|
||||
mShortcutPad(p.shortcut_pad)
|
||||
{
|
||||
|
|
@ -1699,7 +1725,7 @@ LLMenuGL::LLMenuGL(const LLMenuGL::Params& p)
|
|||
void LLMenuGL::initFromParams(const LLMenuGL::Params& p)
|
||||
{
|
||||
LLUICtrl::initFromParams(p);
|
||||
setCanTearOff(p.can_tear_off, p.parent_floater);
|
||||
setCanTearOff(p.can_tear_off);
|
||||
}
|
||||
|
||||
// Destroys the object
|
||||
|
|
@ -1711,12 +1737,11 @@ LLMenuGL::~LLMenuGL( void )
|
|||
mJumpKeys.clear();
|
||||
}
|
||||
|
||||
void LLMenuGL::setCanTearOff(BOOL tear_off, LLHandle<LLFloater> parent_floater_handle )
|
||||
void LLMenuGL::setCanTearOff(BOOL tear_off)
|
||||
{
|
||||
if (tear_off && mTearOffItem == NULL)
|
||||
{
|
||||
LLMenuItemTearOffGL::Params p;
|
||||
p.parent_floater_handle = parent_floater_handle;
|
||||
mTearOffItem = LLUICtrlFactory::create<LLMenuItemTearOffGL>(p);
|
||||
addChildInBack(mTearOffItem);
|
||||
}
|
||||
|
|
@ -2233,7 +2258,6 @@ void LLMenuGL::createSpilloverBranch()
|
|||
LLMenuGL::Params p;
|
||||
p.name("More");
|
||||
p.label("More"); // *TODO: Translate
|
||||
p.parent_floater(mParentFloaterHandle);
|
||||
p.bg_color(mBackgroundColor);
|
||||
p.bg_visible(true);
|
||||
p.can_tear_off(false);
|
||||
|
|
|
|||
|
|
@ -355,7 +355,6 @@ class LLMenuGL
|
|||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
|
||||
{
|
||||
Optional<LLHandle<LLFloater> > parent_floater;
|
||||
Optional<KEY> jump_key;
|
||||
Optional<bool> horizontal_layout,
|
||||
can_tear_off,
|
||||
|
|
@ -430,7 +429,7 @@ public:
|
|||
void setBackgroundColor( const LLUIColor& color ) { mBackgroundColor = color; }
|
||||
const LLUIColor& getBackgroundColor() const { return mBackgroundColor; }
|
||||
void setBackgroundVisible( BOOL b ) { mBgVisible = b; }
|
||||
void setCanTearOff(BOOL tear_off, LLHandle<LLFloater> parent_floater_handle = LLHandle<LLFloater>());
|
||||
void setCanTearOff(BOOL tear_off);
|
||||
|
||||
// add a separator to this menu
|
||||
virtual BOOL addSeparator();
|
||||
|
|
@ -553,7 +552,6 @@ private:
|
|||
class LLMenuItemTearOffGL* mTearOffItem;
|
||||
class LLMenuItemBranchGL* mSpilloverBranch;
|
||||
LLMenuGL* mSpilloverMenu;
|
||||
LLHandle<LLFloater> mParentFloaterHandle;
|
||||
KEY mJumpKey;
|
||||
BOOL mCreateJumpKeys;
|
||||
S32 mShortcutPad;
|
||||
|
|
@ -814,7 +812,6 @@ class LLMenuItemTearOffGL : public LLMenuItemGL
|
|||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLMenuItemGL::Params>
|
||||
{
|
||||
Optional<LLHandle<LLFloater> > parent_floater_handle;
|
||||
Params()
|
||||
{
|
||||
name = "tear off";
|
||||
|
|
@ -823,13 +820,12 @@ public:
|
|||
};
|
||||
|
||||
LLMenuItemTearOffGL( const Params& );
|
||||
|
||||
|
||||
virtual void onCommit(void);
|
||||
virtual void draw(void);
|
||||
virtual U32 getNominalHeight() const;
|
||||
|
||||
private:
|
||||
LLHandle<LLFloater> mParentHandle;
|
||||
LLFloater* getParentFloater();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue