summaryrefslogtreecommitdiff
path: root/indra/newview/llmutelist.cpp
diff options
context:
space:
mode:
authorOz Linden <oz@lindenlab.com>2013-11-19 17:59:55 -0500
committerOz Linden <oz@lindenlab.com>2013-11-19 17:59:55 -0500
commit0031e9a97be1bf6e9fe773c23506494d09ce91ae (patch)
tree220f195c82174b7cc8e94dceb2553e59fe5837a5 /indra/newview/llmutelist.cpp
parentb7edc965bc77ab21e9a1e3f6b424299a50053529 (diff)
parentebc9bcbf69f7a519677a6522979a6bf6cbb04bb8 (diff)
merge up to 3.6.10-release; some of the storm-68 changes lost
Diffstat (limited to 'indra/newview/llmutelist.cpp')
-rwxr-xr-x[-rw-r--r--]indra/newview/llmutelist.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index a7059eb519..0720d443f8 100644..100755
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -44,6 +44,8 @@
#include "llmutelist.h"
+#include "pipeline.h"
+
#include <boost/tokenizer.hpp>
#include "lldispatcher.h"
@@ -192,6 +194,23 @@ BOOL LLMuteList::isLinden(const std::string& name) const
return last_name == "Linden";
}
+static LLVOAvatar* find_avatar(const LLUUID& id)
+{
+ LLViewerObject *obj = gObjectList.findObject(id);
+ while (obj && obj->isAttachment())
+ {
+ obj = (LLViewerObject *)obj->getParent();
+ }
+
+ if (obj && obj->isAvatar())
+ {
+ return (LLVOAvatar*)obj;
+ }
+ else
+ {
+ return NULL;
+ }
+}
BOOL LLMuteList::add(const LLMute& mute, U32 flags)
{
@@ -232,6 +251,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
llinfos << "Muting by name " << mute.mName << llendl;
updateAdd(mute);
notifyObservers();
+ notifyObserversDetailed(mute);
return TRUE;
}
else
@@ -280,6 +300,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
llinfos << "Muting " << localmute.mName << " id " << localmute.mID << " flags " << localmute.mFlags << llendl;
updateAdd(localmute);
notifyObservers();
+ notifyObserversDetailed(localmute);
if(!(localmute.mFlags & LLMute::flagParticles))
{
//Kill all particle systems owned by muted task
@@ -288,6 +309,12 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);
}
}
+ //mute local lights that are attached to the avatar
+ LLVOAvatar *avatarp = find_avatar(localmute.mID);
+ if (avatarp)
+ {
+ LLPipeline::removeMutedAVsLights(avatarp);
+ }
return TRUE;
}
}
@@ -371,6 +398,7 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags)
}
// Must be after erase.
+ notifyObserversDetailed(localmute);
setLoaded(); // why is this here? -MG
}
else
@@ -384,6 +412,7 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags)
updateRemove(mute);
mLegacyMutes.erase(legacy_it);
// Must be after erase.
+ notifyObserversDetailed(mute);
setLoaded(); // why is this here? -MG
}
}
@@ -737,3 +766,16 @@ void LLMuteList::notifyObservers()
it = mObservers.upper_bound(observer);
}
}
+
+void LLMuteList::notifyObserversDetailed(const LLMute& mute)
+{
+ for (observer_set_t::iterator it = mObservers.begin();
+ it != mObservers.end();
+ )
+ {
+ LLMuteListObserver* observer = *it;
+ observer->onChangeDetailed(mute);
+ // In case onChange() deleted an entry.
+ it = mObservers.upper_bound(observer);
+ }
+}