meow-7.2.2
Tofu Linden 2010-07-21 07:24:40 +01:00
commit 842e5111ae
6 changed files with 40 additions and 5 deletions

View File

@ -451,6 +451,14 @@ void LLFloater::enableResizeCtrls(bool enable)
}
}
void LLFloater::destroy()
{
// LLFloaterReg should be synchronized with "dead" floater to avoid returning dead instance before
// it was deleted via LLMortician::updateClass(). See EXT-8458.
LLFloaterReg::removeInstance(mInstanceName, mKey);
die();
}
// virtual
LLFloater::~LLFloater()
{

View File

@ -308,7 +308,7 @@ protected:
BOOL getAutoFocus() const { return mAutoFocus; }
LLDragHandle* getDragHandle() const { return mDragHandle; }
void destroy() { die(); } // Don't call this directly. You probably want to call closeFloater()
void destroy(); // Don't call this directly. You probably want to call closeFloater()
virtual void onClickCloseBtn();

View File

@ -550,9 +550,10 @@ namespace action_give_inventory
}
LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
if (NULL == active_panel)
if (!active_panel)
{
return;
active_panel = get_outfit_editor_inventory_panel();
if (!active_panel) return;
}
const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();

View File

@ -111,6 +111,12 @@ public:
return pInstance;
}
~LLChatHistoryHeader()
{
// Detach the info button so that it doesn't get destroyed (EXT-8463).
hideInfoCtrl();
}
BOOL handleMouseUp(S32 x, S32 y, MASK mask)
{
return LLPanel::handleMouseUp(x,y,mask);
@ -382,8 +388,18 @@ protected:
if (!sInfoCtrl)
{
// *TODO: Delete the button at exit.
sInfoCtrl = LLUICtrlFactory::createFromFile<LLUICtrl>("inspector_info_ctrl.xml", NULL, LLPanel::child_registry_t::instance());
sInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, sInfoCtrl));
if (sInfoCtrl)
{
sInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, sInfoCtrl));
}
}
if (!sInfoCtrl)
{
llassert(sInfoCtrl != NULL);
return;
}
LLTextBase* name = getChild<LLTextBase>("user_name");

View File

@ -83,6 +83,16 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
{
}
LLFloaterMove::~LLFloaterMove()
{
// Ensure LLPanelStandStopFlying panel is not among floater's children. See EXT-8458.
setVisible(FALSE);
// Otherwise it can be destroyed and static pointer in LLPanelStandStopFlying::getInstance() will become invalid.
// Such situation was possible when LLFloaterReg returns "dead" instance of floater.
// Should not happen after LLFloater::destroy was modified to remove "dead" instances from LLFloaterReg.
}
// virtual
BOOL LLFloaterMove::postBuild()
{

View File

@ -51,7 +51,7 @@ class LLFloaterMove
private:
LLFloaterMove(const LLSD& key);
~LLFloaterMove() {}
~LLFloaterMove();
public:
/*virtual*/ BOOL postBuild();