summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2018-06-19 15:53:14 +0100
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2018-06-19 15:53:14 +0100
commit02c371e2cc0365c9051e37c50ec0fa028af39b6e (patch)
tree609dfefd4a17b92fa8b5c18d94aa5ebe890d7422
parent389357994877bce18037bae716f77d472f2c635f (diff)
MAINT-8766 - fix for appearance to XML crash, plus enablement logic
-rw-r--r--indra/newview/llviewermenu.cpp36
1 files changed, 31 insertions, 5 deletions
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 6f6bf8678b..0fa7878258 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1629,6 +1629,11 @@ class LLAdvancedEnableAppearanceToXML : public view_listener_t
{
return gSavedSettings.getBOOL("DebugAvatarAppearanceMessage");
}
+ else if (obj && obj->isAvatar())
+ {
+ // This has to be a non-control avatar, because control avs are invisible and unclickable.
+ return gSavedSettings.getBOOL("DebugAvatarAppearanceMessage");
+ }
else
{
return false;
@@ -1642,12 +1647,33 @@ class LLAdvancedAppearanceToXML : public view_listener_t
{
std::string emptyname;
LLViewerObject *obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- LLVOAvatar* avatar = obj->getAvatar();
- if (!avatar)
- {
+ LLVOAvatar *avatar = NULL;
+ if (obj)
+ {
+ if (obj->isAvatar())
+ {
+ avatar = obj->asAvatar();
+ }
+ else
+ {
+ // If there is a selection, find the associated
+ // avatar. Normally there's only one obvious choice. But
+ // what should be returned if the object is in an attached
+ // animated object? getAvatar() will give the skeleton of
+ // the animated object. getAvatarAncestor() will give the
+ // actual human-driven avatar.
+ avatar = obj->getAvatar();
+ }
+ }
+ else
+ {
+ // If no selection, use the self avatar.
avatar = gAgentAvatarp;
- }
- avatar->dumpArchetypeXML(emptyname);
+ }
+ if (avatar)
+ {
+ avatar->dumpArchetypeXML(emptyname);
+ }
return true;
}
};