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
{
panelp->initPanelXML(node, parent, factory);
if(!factory->builtPanel(panelp))
panelp->initPanelXML(node, parent, factory);
}
return panelp;

View File

@@ -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;

View File

@@ -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);