summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llimview.cpp3
-rw-r--r--indra/newview/lllocationinputctrl.cpp67
-rw-r--r--indra/newview/lllocationinputctrl.h3
-rw-r--r--indra/newview/llpanelplaceprofile.cpp8
-rw-r--r--indra/newview/llviewerparcelmgr.cpp8
-rw-r--r--indra/newview/llvoiceclient.cpp17
-rw-r--r--indra/newview/skins/default/colors.xml2
7 files changed, 88 insertions, 20 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/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 560c2ab469..c062dd1732 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -3439,12 +3439,17 @@ void LLVoiceClient::sendPositionalUpdate(void)
<< "<Volume>" << volume << "</Volume>"
<< "</Request>\n\n\n";
- // Send a "mute for me" command for the user
- stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Session.SetParticipantMuteForMe.1\">"
- << "<SessionHandle>" << getAudioSessionHandle() << "</SessionHandle>"
- << "<ParticipantURI>" << p->mURI << "</ParticipantURI>"
- << "<Mute>" << (mute?"1":"0") << "</Mute>"
- << "</Request>\n\n\n";
+ if(!mAudioSession->mIsP2P)
+ {
+ // Send a "mute for me" command for the user
+ // Doesn't work in P2P sessions
+ stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Session.SetParticipantMuteForMe.1\">"
+ << "<SessionHandle>" << getAudioSessionHandle() << "</SessionHandle>"
+ << "<ParticipantURI>" << p->mURI << "</ParticipantURI>"
+ << "<Mute>" << (mute?"1":"0") << "</Mute>"
+ << "<Scope>Audio</Scope>"
+ << "</Request>\n\n\n";
+ }
}
p->mVolumeDirty = false;
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" />