diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index af0dc47c1..de9c5547f 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -476,7 +476,8 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLUICtrlFactory *fac } else { - panelp->initPanelXML(node, parent, factory); + if(!factory->builtPanel(panelp)) + panelp->initPanelXML(node, parent, factory); } return panelp; diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index 2ecf6fc36..4472a9a07 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -455,9 +455,11 @@ LLPieMenu *LLUICtrlFactory::buildPieMenu(const std::string &filename, LLView* pa //----------------------------------------------------------------------------- void LLUICtrlFactory::rebuild() { + built_panel_t built_panels = mBuiltPanels; + mBuiltPanels.clear(); built_panel_t::iterator built_panel_it; - for (built_panel_it = mBuiltPanels.begin(); - built_panel_it != mBuiltPanels.end(); + for (built_panel_it = built_panels.begin(); + built_panel_it != built_panels.end(); ++built_panel_it) { std::string filename = built_panel_it->second; diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index c51778917..4dd0cdd73 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -63,6 +63,8 @@ public: void removePanel(LLPanel* panelp) { mBuiltPanels.erase(panelp->getHandle()); } void removeFloater(LLFloater* floaterp) { mBuiltFloaters.erase(floaterp->getHandle()); } + + bool builtPanel(LLPanel* panelp) {return mBuiltPanels.find(panelp->getHandle()) != mBuiltPanels.end();} class LLMenuGL *buildMenu(const std::string &filename, LLView* parentp); class LLPieMenu *buildPieMenu(const std::string &filename, LLView* parentp);