Avoid re-issuing LLPanel::postBuild() needlessly. Essential to avoid callbacks being double-registered to ui element signals (eg, LLOverlayBar::toggleMusicPlay was being called twice per click).

This commit is contained in:
Shyotl
2012-04-24 03:11:10 -05:00
parent b3d91d816d
commit e7649d8f1c
3 changed files with 8 additions and 3 deletions

View File

@@ -476,7 +476,8 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLUICtrlFactory *fac
} }
else else
{ {
panelp->initPanelXML(node, parent, factory); if(!factory->builtPanel(panelp))
panelp->initPanelXML(node, parent, factory);
} }
return panelp; return panelp;

View File

@@ -455,9 +455,11 @@ LLPieMenu *LLUICtrlFactory::buildPieMenu(const std::string &filename, LLView* pa
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void LLUICtrlFactory::rebuild() void LLUICtrlFactory::rebuild()
{ {
built_panel_t built_panels = mBuiltPanels;
mBuiltPanels.clear();
built_panel_t::iterator built_panel_it; built_panel_t::iterator built_panel_it;
for (built_panel_it = mBuiltPanels.begin(); for (built_panel_it = built_panels.begin();
built_panel_it != mBuiltPanels.end(); built_panel_it != built_panels.end();
++built_panel_it) ++built_panel_it)
{ {
std::string filename = built_panel_it->second; std::string filename = built_panel_it->second;

View File

@@ -64,6 +64,8 @@ public:
void removePanel(LLPanel* panelp) { mBuiltPanels.erase(panelp->getHandle()); } void removePanel(LLPanel* panelp) { mBuiltPanels.erase(panelp->getHandle()); }
void removeFloater(LLFloater* floaterp) { mBuiltFloaters.erase(floaterp->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 LLMenuGL *buildMenu(const std::string &filename, LLView* parentp);
class LLPieMenu *buildPieMenu(const std::string &filename, LLView* parentp); class LLPieMenu *buildPieMenu(const std::string &filename, LLView* parentp);