diff options
| -rw-r--r-- | indra/newview/llimview.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/lllocationinputctrl.cpp | 67 | ||||
| -rw-r--r-- | indra/newview/lllocationinputctrl.h | 3 | ||||
| -rw-r--r-- | indra/newview/llpanelplaceprofile.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llviewerparcelmgr.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/skins/default/colors.xml | 2 | 
6 files changed, 77 insertions, 14 deletions
| diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 80d2778934..b7d4db853e 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1733,6 +1733,9 @@ void LLIncomingCallDialog::onLifetimeExpired()  	{  		// close invitation if call is already not valid  		mLifetimeTimer.stop(); +		LLUUID session_id = mPayload["session_id"].asUUID(); +		gIMMgr->clearPendingAgentListUpdates(session_id); +		gIMMgr->clearPendingInvitation(session_id);  		closeFloater();  	}  } diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 050cfcc3d9..0e93e28f2d 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -153,6 +153,23 @@ private:  	LLLocationInputCtrl* mInput;  }; +class LLParcelChangeObserver : public LLParcelObserver +{ +public: +	LLParcelChangeObserver(LLLocationInputCtrl* input) : mInput(input) {} + +private: +	/*virtual*/ void changed() +	{ +		if (mInput) +		{ +			mInput->refreshParcelIcons(); +		} +	} + +	LLLocationInputCtrl* mInput; +}; +  //============================================================================ @@ -335,7 +352,10 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)  	mAddLandmarkObserver	= new LLAddLandmarkObserver(this);  	gInventory.addObserver(mRemoveLandmarkObserver);  	gInventory.addObserver(mAddLandmarkObserver); -	 + +	mParcelChangeObserver = new LLParcelChangeObserver(this); +	LLViewerParcelMgr::getInstance()->addObserver(mParcelChangeObserver); +  	mAddLandmarkTooltip = LLTrans::getString("LocationCtrlAddLandmarkTooltip");  	mEditLandmarkTooltip = LLTrans::getString("LocationCtrlEditLandmarkTooltip");  	getChild<LLView>("Location History")->setToolTip(LLTrans::getString("LocationCtrlComboBtnTooltip")); @@ -349,6 +369,9 @@ LLLocationInputCtrl::~LLLocationInputCtrl()  	delete mRemoveLandmarkObserver;  	delete mAddLandmarkObserver; +	LLViewerParcelMgr::getInstance()->removeObserver(mParcelChangeObserver); +	delete mParcelChangeObserver; +  	mParcelMgrConnection.disconnect();  	mLocationHistoryConnection.disconnect();  } @@ -673,15 +696,41 @@ void LLLocationInputCtrl::refreshParcelIcons()  	if (show_properties)  	{  		LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance(); + +		LLViewerRegion* agent_region = gAgent.getRegion();  		LLParcel* agent_parcel = vpm->getAgentParcel(); -		bool allow_buy      = vpm->canAgentBuyParcel( agent_parcel, false); -		bool allow_voice	= vpm->allowAgentVoice(); -		bool allow_fly		= vpm->allowAgentFly(); -		bool allow_push		= vpm->allowAgentPush(); -		bool allow_build	= agent_parcel && agent_parcel->getAllowModify(); // true when anyone is allowed to build. See EXT-4610. -		bool allow_scripts	= vpm->allowAgentScripts(); -		bool allow_damage	= vpm->allowAgentDamage(); -		 +		if (!agent_region || !agent_parcel) +			return; + +		LLParcel* current_parcel; +		LLViewerRegion* selection_region = vpm->getSelectionRegion(); +		LLParcel* selected_parcel = vpm->getParcelSelection()->getParcel(); + +		// If agent is in selected parcel we use its properties because +		// they are updated more often by LLViewerParcelMgr than agent parcel properties. +		// See LLViewerParcelMgr::processParcelProperties(). +		// This is needed to reflect parcel restrictions changes without having to leave +		// the parcel and then enter it again. See EXT-2987 +		if (selected_parcel && selected_parcel->getLocalID() == agent_parcel->getLocalID() +				&& selection_region == agent_region) +		{ +			current_parcel = selected_parcel; +		} +		else +		{ +			current_parcel = agent_parcel; +		} + +		bool allow_buy      = vpm->canAgentBuyParcel(current_parcel, false); +		bool allow_voice	= agent_region->isVoiceEnabled() && current_parcel->getParcelFlagAllowVoice(); +		bool allow_fly		= !agent_region->getBlockFly() && current_parcel->getAllowFly(); +		bool allow_push		= !agent_region->getRestrictPushObject() && !current_parcel->getRestrictPushObject(); +		bool allow_build	= current_parcel->getAllowModify(); // true when anyone is allowed to build. See EXT-4610. +		bool allow_scripts	= !(agent_region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) && +							  !(agent_region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) && +							  current_parcel->getAllowOtherScripts(); +		bool allow_damage	= agent_region->getAllowDamage() || current_parcel->getAllowDamage(); +  		// Most icons are "block this ability"  		mForSaleBtn->setVisible(allow_buy);  		mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice ); diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index 607ccd4da6..a830b33f6f 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -42,6 +42,7 @@ class LLLandmark;  // internals  class LLAddLandmarkObserver;  class LLRemoveLandmarkObserver; +class LLParcelChangeObserver;  class LLMenuGL;  class LLTeleportHistoryItem; @@ -56,6 +57,7 @@ class LLLocationInputCtrl  	LOG_CLASS(LLLocationInputCtrl);  	friend class LLAddLandmarkObserver;  	friend class LLRemoveLandmarkObserver; +	friend class LLParcelChangeObserver;  public:  	struct Params  @@ -164,6 +166,7 @@ private:  	LLAddLandmarkObserver*		mAddLandmarkObserver;  	LLRemoveLandmarkObserver*	mRemoveLandmarkObserver; +	LLParcelChangeObserver*		mParcelChangeObserver;  	boost::signals2::connection	mParcelMgrConnection;  	boost::signals2::connection	mLocationHistoryConnection; diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 8d689b2c5e..9b31ef23a2 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -341,7 +341,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  	std::string off = getString("off");  	// Processing parcel characteristics -	if (parcel->getParcelFlagAllowVoice()) +	if (region->isVoiceEnabled() && parcel->getParcelFlagAllowVoice())  	{  		mVoiceIcon->setValue(icon_voice);  		mVoiceText->setText(on); @@ -385,9 +385,9 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mBuildText->setText(off);  	} -	if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) || -	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) || -	   !parcel->getAllowOtherScripts()) +	if ((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) || +	    (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) || +	    !parcel->getAllowOtherScripts())  	{  		mScriptsIcon->setValue(icon_scripts_no);  		mScriptsText->setText(off); diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 9d7ccd99c6..b85b42c710 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1591,6 +1591,14 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use  				instance->mTeleportInProgress = FALSE;  				instance->mTeleportFinishedSignal(gAgent.getPositionGlobal());  			} + +			// HACK: This makes agents drop from the sky if they enter a parcel +			// which is set to no fly. +			BOOL was_flying = gAgent.getFlying(); +			if (was_flying && !parcel->getAllowFly()) +			{ +				gAgent.setFlying(gAgent.canFly()); +			}  		}  	} diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index e248047930..219b3dbeb6 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -97,7 +97,7 @@       value="1 0.82 0.46 1" />      <color       name="AlertCautionTextColor" -     reference="Black" /> +     reference="Yellow" />      <color       name="AgentLinkColor"       reference="White" /> | 
