From 02c371e2cc0365c9051e37c50ec0fa028af39b6e Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 19 Jun 2018 15:53:14 +0100 Subject: MAINT-8766 - fix for appearance to XML crash, plus enablement logic --- indra/newview/llviewermenu.cpp | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'indra') 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 @@ -1628,6 +1628,11 @@ class LLAdvancedEnableAppearanceToXML : public view_listener_t else if (obj && obj->isAttachment() && obj->getAvatar()) { 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 { @@ -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; } }; -- cgit v1.2.3