summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterregioninfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llfloaterregioninfo.cpp')
-rw-r--r--indra/newview/llfloaterregioninfo.cpp62
1 files changed, 46 insertions, 16 deletions
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 671f5aca9d..fcaa7d2bf9 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -226,7 +226,8 @@ LLUUID LLFloaterRegionInfo::sRequestInvoice;
LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
: LLFloater(seed),
- mEnvironmentPanel(NULL)
+ mEnvironmentPanel(NULL),
+ mRegionChangedCallback()
{}
BOOL LLFloaterRegionInfo::postBuild()
@@ -285,13 +286,18 @@ BOOL LLFloaterRegionInfo::postBuild()
&processEstateOwnerRequest);
// Request region info when agent region changes.
- gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this));
+ mRegionChangedCallback = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::onRegionChanged, this));
return TRUE;
}
LLFloaterRegionInfo::~LLFloaterRegionInfo()
-{}
+{
+ if (mRegionChangedCallback.connected())
+ {
+ mRegionChangedCallback.disconnect();
+ }
+}
void LLFloaterRegionInfo::onOpen(const LLSD& key)
{
@@ -300,20 +306,28 @@ void LLFloaterRegionInfo::onOpen(const LLSD& key)
disableTabCtrls();
return;
}
- refreshFromRegion(gAgent.getRegion());
- requestRegionInfo();
+ requestRegionInfo(); // will cause refreshFromRegion()
requestMeshRezInfo();
}
-// static
-void LLFloaterRegionInfo::requestRegionInfo()
+void LLFloaterRegionInfo::onRegionChanged()
{
- LLTabContainer* tab = getChild<LLTabContainer>("region_panels");
+ if (getVisible()) //otherwise onOpen will do request
+ {
+ requestRegionInfo();
+ }
+}
- tab->getChild<LLPanel>("General")->setCtrlsEnabled(FALSE);
- tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE);
- tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE);
- tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE);
+void LLFloaterRegionInfo::requestRegionInfo()
+{
+ LLTabContainer* tab = findChild<LLTabContainer>("region_panels");
+ if (tab)
+ {
+ tab->getChild<LLPanel>("General")->setCtrlsEnabled(FALSE);
+ tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE);
+ tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE);
+ tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE);
+ }
// Must allow anyone to request the RegionInfo data
// so non-owners/non-gods can see the values.
@@ -484,7 +498,12 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
panel->setCtrlsEnabled(allow_modify);
- floater->refreshFromRegion( gAgent.getRegion() );
+ if (floater->getVisible())
+ {
+ // Note: region info also causes LLRegionInfoModel::instance().update(msg); -> requestRegion(); -> changed message
+ // we need to know env version here and in update(msg) to know when to request and when not to, when to filter 'changed'
+ floater->refreshFromRegion(gAgent.getRegion());
+ } // else will rerequest on onOpen either way
}
// static
@@ -3410,7 +3429,10 @@ void LLPanelRegionEnvironment::refresh()
{
if (!mCurrentEnvironment)
{
- refreshFromSource();
+ if (mCurEnvVersion <= INVALID_PARCEL_ENVIRONMENT_VERSION)
+ {
+ refreshFromSource(); // will immediately set mCurEnvVersion
+ } // else - already requesting
return;
}
@@ -3426,15 +3448,17 @@ bool LLPanelRegionEnvironment::refreshFromRegion(LLViewerRegion* region)
{
setNoSelection(true);
setControlsEnabled(false);
+ mCurEnvVersion = INVALID_PARCEL_ENVIRONMENT_VERSION;
}
setNoSelection(false);
if (gAgent.getRegion()->getRegionID() != region->getRegionID())
{
setCrossRegion(true);
+ mCurEnvVersion = INVALID_PARCEL_ENVIRONMENT_VERSION;
}
setCrossRegion(false);
-
+
refreshFromSource();
return true;
}
@@ -3448,9 +3472,15 @@ void LLPanelRegionEnvironment::refreshFromEstate()
void LLPanelRegionEnvironment::refreshFromSource()
{
+ LL_DEBUGS("ENVIRONMENT") << "Requesting environment for region, known version " << mCurEnvVersion << LL_ENDL;
LLHandle<LLPanel> that_h = getHandle();
- mCurEnvVersion = INVALID_PARCEL_ENVIRONMENT_VERSION;
+ if (mCurEnvVersion < UNSET_PARCEL_ENVIRONMENT_VERSION)
+ {
+ // to mark as requesting
+ mCurEnvVersion = UNSET_PARCEL_ENVIRONMENT_VERSION;
+ }
+
LLEnvironment::instance().requestRegion(
[that_h](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) { _onEnvironmentReceived(that_h, parcel_id, envifo); });