From c3eec8d391a984b19f9a52b58f074462cf3e2d80 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Fri, 1 Jul 2016 20:22:39 +0200 Subject: [PATCH 001/124] Added @shownearby=n|y --HG-- branch : RLVa --- indra/llui/llflatlistview.h | 3 +++ indra/newview/llavatarlist.cpp | 4 +++ indra/newview/llhudtext.cpp | 20 ++++++++------ indra/newview/llhudtext.h | 8 +++--- indra/newview/llpanelpeople.cpp | 13 ++++++++- indra/newview/llpanelpeople.h | 3 ++- indra/newview/rlvactions.cpp | 7 ++++- indra/newview/rlvactions.h | 5 ++++ indra/newview/rlvcommon.cpp | 7 ++--- indra/newview/rlvcommon.h | 2 +- indra/newview/rlvdefines.h | 1 + indra/newview/rlvhandler.cpp | 27 +++++++++++++++++++ indra/newview/rlvhelper.cpp | 27 ++++++++++--------- .../skins/default/xui/en/rlva_strings.xml | 5 ++++ 14 files changed, 101 insertions(+), 31 deletions(-) diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index 92bf429031..577e486705 100755 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -469,6 +469,9 @@ public: // *WORKAROUND: two methods to overload appropriate Params due to localization issue: // no_items_msg & no_filtered_items_msg attributes are not defined as translatable in VLT. See EXT-5931 +// [RLVa:KB] - Checked: RLVa-2.0.3 + const std::string& getNoItemsMsg() const { return mNoItemsMsg; } +// [/RLVa:KB] void setNoItemsMsg(const std::string& msg) { mNoItemsMsg = msg; } void setNoFilteredItemsMsg(const std::string& msg) { mNoFilteredItemsMsg = msg; } diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index c039e6bd80..5bbc96f086 100755 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -204,6 +204,10 @@ void LLAvatarList::draw() void LLAvatarList::clear() { getIDs().clear(); +// [RLVa:KB] - Checked: RLVa-2.0.3 + // We need to be able to call this *somehow* and it actually makes moderate sense to call this in here + updateNoItemsMessage(mNameFilter); +// [/RLVa:KB] setDirty(true); LLFlatListViewEx::clear(); } diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index 350ba753d4..c35a86fc86 100755 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -246,7 +246,7 @@ void LLHUDText::setString(const std::string &text_utf8) { mTextSegments.clear(); // addLine(text_utf8, mColor); -// [RLVa:KB] - Checked: 2010-03-02 (RLVa-1.4.0a) | Modified: RLVa-1.0.0f +// [RLVa:KB] - Checked: RLVa-2.0.3 // NOTE: setString() is called for debug and map beacons as well if (RlvActions::isRlvEnabled()) { @@ -255,8 +255,10 @@ void LLHUDText::setString(const std::string &text_utf8) { if (!RlvActions::canShowLocation()) RlvUtil::filterLocation(text); - if (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) - RlvUtil::filterNames(text); + + bool fCanShowNearby = RlvActions::canShowNearbyAgents(); + if ( (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) || (!fCanShowNearby) ) + RlvUtil::filterNames(text, true, !fCanShowNearby); } else { @@ -658,14 +660,16 @@ F32 LLHUDText::LLHUDTextSegment::getWidth(const LLFontGL* font) } } -// [RLVa:KB] - Checked: 2010-03-27 (RLVa-1.4.0a) | Added: RLVa-1.0.0f -void LLHUDText::refreshAllObjectText() +// [RLVa:KB] - Checked: RLVa-2.0.3 +void LLHUDText::refreshAllObjectText(EObjectTextFilter eObjFilter) { - for (TextObjectIterator itText = sTextObjects.begin(); itText != sTextObjects.end(); ++itText) + for (LLHUDText* pText : sTextObjects) { - LLHUDText* pText = *itText; - if ( (pText) && (!pText->mObjText.empty()) && (pText->mSourceObject) && (LL_PCODE_VOLUME == pText->mSourceObject->getPCode()) ) + if ((pText) && (!pText->mObjText.empty()) && (pText->mSourceObject) && (LL_PCODE_VOLUME == pText->mSourceObject->getPCode()) && + ((OTF_NONE == eObjFilter) || ((OTF_HUD_ATTACHMENTS == eObjFilter) && (pText->mSourceObject->isHUDAttachment())))) + { pText->setString(pText->mObjText); + } } } // [/RLVa:KB] diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h index d5d81e1336..0be9eb4f2e 100755 --- a/indra/newview/llhudtext.h +++ b/indra/newview/llhudtext.h @@ -124,10 +124,12 @@ public: static void reshape(); static void setDisplayText(BOOL flag) { sDisplayText = flag ; } -// [RLVa:KB] - Checked: 2010-03-27 (RLVa-1.4.0a) | Added: RLVa-1.0.0f +// [RLVa:KB] - Checked: RLVa-2.0.3 const std::string& getObjectText() const { return mObjText; } void setObjectText(const std::string &utf8string) { mObjText = utf8string; } - static void refreshAllObjectText(); + + enum EObjectTextFilter { OTF_NONE, OTF_HUD_ATTACHMENTS }; + static void refreshAllObjectText(EObjectTextFilter eObjFilter = OTF_NONE); // [/RLVa:KB] protected: LLHUDText(const U8 type); @@ -166,7 +168,7 @@ private: ETextAlignment mTextAlignment; EVertAlignment mVertAlignment; BOOL mHidden; -// [RLVa:KB] - Checked: 2010-03-27 (RLVa-1.4.0a) | Added: RLVa-1.0.0f +// [RLVa:KB] - Checked: RLVa-1.0.0 std::string mObjText; // [/RLVa:KB] diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 05ceaffd82..90eaa37088 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -834,7 +834,18 @@ void LLPanelPeople::updateNearbyList() std::vector positions; - LLWorld::getInstance()->getAvatars(&mNearbyList->getIDs(), &positions, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange")); +// [RLVa:KB] - Checked: RLVa-2.0.3 + if (RlvActions::canShowNearbyAgents()) + { +// [/RLVa:KB] + LLWorld::getInstance()->getAvatars(&mNearbyList->getIDs(), &positions, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange")); +// [RLVa:KB] - Checked: RLVa-2.0.3 + } + else + { + mNearbyList->getIDs().clear(); + } +// [/RLVa:KB] mNearbyList->setDirty(); DISTANCE_COMPARATOR.updateAvatarsPositions(positions, mNearbyList->getIDs()); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index b746ee3e77..49901bb51f 100755 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -61,6 +61,7 @@ public: // [RLVa:KB] - Checked: RLVa-1.2.0 LLAvatarList* getNearbyList() { return mNearbyList; } + void updateNearbyList(); // [/RLVa:KB] // internals @@ -82,7 +83,7 @@ private: void updateFriendListHelpText(); void updateFriendList(); bool updateSuggestedFriendList(); - void updateNearbyList(); +// void updateNearbyList(); void updateRecentList(); void updateFacebookList(bool visible); diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp index 1def8205fb..731914600e 100644 --- a/indra/newview/rlvactions.cpp +++ b/indra/newview/rlvactions.cpp @@ -204,9 +204,14 @@ bool RlvActions::canShowName(EShowNamesContext eContext, const LLUUID& idAgent) return false; } +bool RlvActions::canShowNearbyAgents() +{ + return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNEARBY); +} + // ============================================================================ // Movement -// +// bool RlvActions::canAcceptTpOffer(const LLUUID& idSender) { diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h index e11066e25a..fcb1529444 100644 --- a/indra/newview/rlvactions.h +++ b/indra/newview/rlvactions.h @@ -108,6 +108,11 @@ public: static bool canShowName(EShowNamesContext eContext, const LLUUID& idAgent = LLUUID::null); static void setShowName(EShowNamesContext eContext, bool fCanShowName) { if ( (eContext < SNC_COUNT) && (isRlvEnabled()) ) { s_BlockNamesContexts[eContext] = !fCanShowName; } } + /* + * Returns true if the user is allowed to see the presence of nearby avatars in UI elements (anonymized or otherwise) + */ + static bool canShowNearbyAgents(); + protected: // Backwards logic so that we can initialize to 0 and it won't block when we forget to/don't check if RLVa is disabled static bool s_BlockNamesContexts[SNC_COUNT]; diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index ecc4ae5453..1fcba5e519 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -379,20 +379,21 @@ void RlvUtil::filterLocation(std::string& strUTF8Text) } // Checked: 2010-12-08 (RLVa-1.2.2c) | Modified: RLVa-1.2.2c -void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy) +void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy, bool fClearMatches) { uuid_vec_t idAgents; LLWorld::getInstance()->getAvatars(&idAgents, NULL); for (int idxAgent = 0, cntAgent = idAgents.size(); idxAgent < cntAgent; idxAgent++) { LLAvatarName avName; - if ( (LLAvatarNameCache::get(idAgents[idxAgent], &avName)) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgents[idxAgent])) ) + // NOTE: if we're agressively culling nearby names then ignore exceptions + if ( (LLAvatarNameCache::get(idAgents[idxAgent], &avName)) && ((fClearMatches) || (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgents[idxAgent]))) ) { const std::string& strDisplayName = avName.getDisplayName(); bool fFilterDisplay = (strDisplayName.length() > 2); const std::string& strLegacyName = avName.getLegacyName(); fFilterLegacy &= (strLegacyName.length() > 2); - const std::string& strAnonym = RlvStrings::getAnonym(avName); + const std::string& strAnonym = (!fClearMatches) ? RlvStrings::getAnonym(avName) : LLStringUtil::null; // If the display name is a subset of the legacy name we need to filter that first, otherwise it's the other way around if (boost::icontains(strLegacyName, strDisplayName)) diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index 9d586e1724..4ee7c9cda2 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -156,7 +156,7 @@ public: static bool isNearbyRegion(const std::string& strRegion); // @showloc static void filterLocation(std::string& strUTF8Text); // @showloc - static void filterNames(std::string& strUTF8Text, bool fFilterLegacy = true); // @shownames + static void filterNames(std::string& strUTF8Text, bool fFilterLegacy = true, bool fClearMatches = false); // @shownames static void filterScriptQuestions(S32& nQuestions, LLSD& sdPayload); static bool isForceTp() { return m_fForceTp; } diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index e227f3a66d..305af9405d 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -123,6 +123,7 @@ enum ERlvBehaviour { RLV_BHVR_SHOWLOC, // "showloc" RLV_BHVR_SHOWNAMES, // "shownames" RLV_BHVR_SHOWNAMETAGS, // "shownametags" + RLV_BHVR_SHOWNEARBY, RLV_BHVR_SHOWHOVERTEXT, // "showhovertext" RLV_BHVR_SHOWHOVERTEXTHUD, // "showhovertexthud" RLV_BHVR_SHOWHOVERTEXTWORLD, // "showhovertextworld" diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index e769847d18..b79c043b24 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -2047,6 +2047,33 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvComman return eRet; } +// Handles: @shownearby=n|y toggles +template<> template<> +void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) +{ + if (LLApp::isQuitting()) + return; // Nothing to do if the viewer is shutting down + + // Refresh the nearby people list + LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel("people", "panel_people"); + LLAvatarList* pNearbyList = (pPeoplePanel) ? pPeoplePanel->getNearbyList() : NULL; + RLV_ASSERT( (pPeoplePanel) && (pNearbyList) ); + if (pNearbyList) + { + static std::string s_strNoItemsMsg = pNearbyList->getNoItemsMsg(); + pNearbyList->setNoItemsMsg( (fHasBhvr) ? RlvStrings::getString("blocked_nearby") : s_strNoItemsMsg ); + pNearbyList->clear(); + + if (pNearbyList->isInVisibleChain()) + pPeoplePanel->onCommit(); + if (!fHasBhvr) + pPeoplePanel->updateNearbyList(); + } + + // Refresh that avatar's name tag and all HUD text + LLHUDText::refreshAllObjectText(); +} + // Handles: @showself=n|y and @showselfhead=n|y toggles template<> template<> void RlvBehaviourShowSelfToggleHandler::onCommandToggle(ERlvBehaviour eBvhr, bool fHasBhvr) diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index 80929deceb..44efb8762d 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -119,7 +119,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourInfo("remoutfit", RLV_BHVR_REMOUTFIT, RLV_TYPE_ADDREM)); addEntry(new RlvBehaviourGenericProcessor("rez", RLV_BHVR_REZ)); addEntry(new RlvBehaviourProcessor("sendchannel", RlvBehaviourInfo::BHVR_STRICT)); - addEntry(new RlvBehaviourProcessor("sendchannel_except", RlvBehaviourInfo::BHVR_STRICT)); + addEntry(new RlvBehaviourProcessor("sendchannel_except", RlvBehaviourInfo::BHVR_STRICT | RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addEntry(new RlvBehaviourGenericProcessor("sendchat", RLV_BHVR_SENDCHAT)); addEntry(new RlvBehaviourToggleProcessor("sendim", RlvBehaviourInfo::BHVR_STRICT)); addModifier(RLV_BHVR_SENDIM, RLV_MODIFIER_SENDIMDISTMIN, new RlvBehaviourModifier("SendIM Distance (Min)", F32_MAX, true, new RlvBehaviourModifier_CompMax)); @@ -140,8 +140,9 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourGenericProcessor("showminimap", RLV_BHVR_SHOWMINIMAP)); addEntry(new RlvBehaviourToggleProcessor("shownames", RlvBehaviourInfo::BHVR_STRICT)); addEntry(new RlvBehaviourToggleProcessor("shownametags", RlvBehaviourInfo::BHVR_STRICT )); - addEntry(new RlvBehaviourGenericToggleProcessor("showself", RlvBehaviourInfo::BHVR_EXTENDED)); - addEntry(new RlvBehaviourGenericToggleProcessor("showselfhead", RlvBehaviourInfo::BHVR_EXTENDED)); + addEntry(new RlvBehaviourGenericToggleProcessor("shownearby", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); + addEntry(new RlvBehaviourGenericToggleProcessor("showself", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); + addEntry(new RlvBehaviourGenericToggleProcessor("showselfhead", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addEntry(new RlvBehaviourGenericProcessor("showworldmap", RLV_BHVR_SHOWWORLDMAP)); addEntry(new RlvBehaviourGenericProcessor("sit", RLV_BHVR_SIT)); addEntry(new RlvBehaviourGenericProcessor("sittp", RLV_BHVR_SITTP)); @@ -163,7 +164,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourGenericProcessor("touchworld", RLV_BHVR_TOUCHWORLD)); addEntry(new RlvBehaviourGenericProcessor("tplm", RLV_BHVR_TPLM)); addEntry(new RlvBehaviourGenericProcessor("tploc", RLV_BHVR_TPLOC)); - addEntry(new RlvBehaviourGenericProcessor("tplocal", RLV_BHVR_TPLOCAL)); + addEntry(new RlvBehaviourGenericProcessor("tplocal", RLV_BHVR_TPLOCAL, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_TPLOCAL, RLV_MODIFIER_TPLOCALDIST, new RlvBehaviourModifier("Local Teleport Distance", RLV_MODIFIER_TPLOCAL_DEFAULT, true, new RlvBehaviourModifier_CompMin)); addEntry(new RlvBehaviourGenericProcessor("tplure", RLV_BHVR_TPLURE, RlvBehaviourInfo::BHVR_STRICT)); addEntry(new RlvBehaviourGenericProcessor("tprequest", RLV_BHVR_TPREQUEST, RlvBehaviourInfo::BHVR_STRICT | RlvBehaviourInfo::BHVR_EXTENDED)); @@ -175,26 +176,26 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourGenericProcessor("viewtexture", RLV_BHVR_VIEWTEXTURE)); // Camera addEntry(new RlvBehaviourGenericToggleProcessor("setcam")); - addEntry(new RlvBehaviourGenericProcessor("setcam_avdistmin", RLV_BHVR_SETCAM_AVDISTMIN)); + addEntry(new RlvBehaviourGenericProcessor("setcam_avdistmin", RLV_BHVR_SETCAM_AVDISTMIN, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_AVDISTMIN, RLV_MODIFIER_SETCAM_AVDISTMIN, new RlvBehaviourModifierHandler("Camera - Avatar Distance (Min)", 0.0f, false, new RlvBehaviourModifier_CompMax())); - addEntry(new RlvBehaviourGenericProcessor("setcam_avdistmax", RLV_BHVR_SETCAM_AVDISTMAX)); + addEntry(new RlvBehaviourGenericProcessor("setcam_avdistmax", RLV_BHVR_SETCAM_AVDISTMAX, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_AVDISTMAX, RLV_MODIFIER_SETCAM_AVDISTMAX, new RlvBehaviourModifier("Camera - Avatar Distance (Max)", F32_MAX, false, new RlvBehaviourModifier_CompMin)); - addEntry(new RlvBehaviourGenericProcessor("setcam_origindistmin", RLV_BHVR_SETCAM_ORIGINDISTMIN)); + addEntry(new RlvBehaviourGenericProcessor("setcam_origindistmin", RLV_BHVR_SETCAM_ORIGINDISTMIN, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_ORIGINDISTMIN, RLV_MODIFIER_SETCAM_ORIGINDISTMIN, new RlvBehaviourModifier("Camera - Focus Distance (Min)", 0.0f, true, new RlvBehaviourModifier_CompMax)); - addEntry(new RlvBehaviourGenericProcessor("setcam_origindistmax", RLV_BHVR_SETCAM_ORIGINDISTMAX)); + addEntry(new RlvBehaviourGenericProcessor("setcam_origindistmax", RLV_BHVR_SETCAM_ORIGINDISTMAX, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_ORIGINDISTMAX, RLV_MODIFIER_SETCAM_ORIGINDISTMAX, new RlvBehaviourModifier("Camera - Focus Distance (Max)", F32_MAX, true, new RlvBehaviourModifier_CompMin)); addEntry(new RlvBehaviourGenericToggleProcessor("setcam_eyeoffset", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_EYEOFFSET, RLV_MODIFIER_SETCAM_EYEOFFSET, new RlvBehaviourModifierHandler("Camera - Eye Offset", LLVector3::zero, true, nullptr)); addEntry(new RlvBehaviourGenericToggleProcessor("setcam_focusoffset", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_FOCUSOFFSET, RLV_MODIFIER_SETCAM_FOCUSOFFSET, new RlvBehaviourModifierHandler("Camera - Focus Offset", LLVector3::zero, true, nullptr)); - addEntry(new RlvBehaviourGenericProcessor("setcam_fovmin", RLV_BHVR_SETCAM_FOVMIN)); + addEntry(new RlvBehaviourGenericProcessor("setcam_fovmin", RLV_BHVR_SETCAM_FOVMIN, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_FOVMIN, RLV_MODIFIER_SETCAM_FOVMIN, new RlvBehaviourModifierHandler("Camera - FOV (Min)", DEFAULT_FIELD_OF_VIEW, true, new RlvBehaviourModifier_CompMax)); - addEntry(new RlvBehaviourGenericProcessor("setcam_fovmax", RLV_BHVR_SETCAM_FOVMAX)); - addEntry(new RlvBehaviourGenericToggleProcessor("setcam_mouselook")); + addEntry(new RlvBehaviourGenericProcessor("setcam_fovmax", RLV_BHVR_SETCAM_FOVMAX, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); + addEntry(new RlvBehaviourGenericToggleProcessor("setcam_mouselook", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_FOVMAX, RLV_MODIFIER_SETCAM_FOVMAX, new RlvBehaviourModifierHandler("Camera - FOV (Max)", DEFAULT_FIELD_OF_VIEW, true, new RlvBehaviourModifier_CompMin)); - addEntry(new RlvBehaviourGenericProcessor("setcam_textures", RLV_BHVR_SETCAM_TEXTURES)); + addEntry(new RlvBehaviourGenericProcessor("setcam_textures", RLV_BHVR_SETCAM_TEXTURES, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_TEXTURES, RLV_MODIFIER_SETCAM_TEXTURE, new RlvBehaviourModifierHandler("Camera - Forced Texture", IMG_DEFAULT, true, nullptr)); - addEntry(new RlvBehaviourGenericToggleProcessor("setcam_unlock")); + addEntry(new RlvBehaviourGenericToggleProcessor("setcam_unlock", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); // Camera (compatibility shim - to be deprecated) addEntry(new RlvBehaviourGenericProcessor("camdistmin", RLV_BHVR_SETCAM_AVDISTMIN, RlvBehaviourInfo::BHVR_SYNONYM | RlvBehaviourInfo::BHVR_DEPRECATED)); addEntry(new RlvBehaviourGenericProcessor("camdistmax", RLV_BHVR_SETCAM_AVDISTMAX, RlvBehaviourInfo::BHVR_SYNONYM | RlvBehaviourInfo::BHVR_DEPRECATED)); diff --git a/indra/newview/skins/default/xui/en/rlva_strings.xml b/indra/newview/skins/default/xui/en/rlva_strings.xml index 6861f9c465..7599316a49 100644 --- a/indra/newview/skins/default/xui/en/rlva_strings.xml +++ b/indra/newview/skins/default/xui/en/rlva_strings.xml @@ -56,6 +56,11 @@ value Unable to perform action due to RLV restrictions + blocked_nearby + + value + Unable to see the presence of nearby avatars due to RLV restrictions + blocked_permattach value From 98d74e0a91a5ae6dde6e1b4211d5d8e054b62b95 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 7 Jul 2016 12:36:21 +0200 Subject: [PATCH 002/124] FIRE-14222: Own group chat is muted on OpenSim if FSMuteAllGroups is TRUE --- indra/newview/llimview.cpp | 76 +++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 05f0a4b01e..1071b4faf3 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -4309,49 +4309,51 @@ public: // [/RLVa:KB] // Mute group chat port from Phoenix - BOOL FSMuteAllGroups = gSavedSettings.getBOOL("FSMuteAllGroups"); - BOOL FSMuteGroupWhenNoticesDisabled = gSavedSettings.getBOOL("FSMuteGroupWhenNoticesDisabled"); - LLGroupData group_data; - if (gAgent.getGroupData(session_id, group_data)) + if (from_id != gAgentID) // FIRE-14222: OpenSim routes agent's chat through here - don't mute it! { - if (FSMuteAllGroups || (FSMuteGroupWhenNoticesDisabled && !group_data.mAcceptNotices)) + BOOL FSMuteAllGroups = gSavedSettings.getBOOL("FSMuteAllGroups"); + BOOL FSMuteGroupWhenNoticesDisabled = gSavedSettings.getBOOL("FSMuteGroupWhenNoticesDisabled"); + LLGroupData group_data; + if (gAgent.getGroupData(session_id, group_data)) { - LL_INFOS() << "Firestorm: muting group chat: " << group_data.mName << LL_ENDL; - - if (gSavedSettings.getBOOL("FSReportMutedGroupChat")) + if (FSMuteAllGroups || (FSMuteGroupWhenNoticesDisabled && !group_data.mAcceptNotices)) { - LLStringUtil::format_map_t args; - args["NAME"] = LLSLURL("group", session_id, "about").getSLURLString(); - report_to_nearby_chat(LLTrans::getString("GroupChatMuteNotice", args)); + LL_INFOS() << "Muting group chat: " << group_data.mName << LL_ENDL; + + if (gSavedSettings.getBOOL("FSReportMutedGroupChat")) + { + LLStringUtil::format_map_t args; + args["NAME"] = LLSLURL("group", session_id, "about").getSLURLString(); + report_to_nearby_chat(LLTrans::getString("GroupChatMuteNotice", args)); + } + + //KC: make sure we leave the group chat at the server end as well + std::string aname; + gAgent.buildFullname(aname); + pack_instant_message( + gMessageSystem, + gAgentID, + FALSE, + gAgentSessionID, + from_id, + aname, + LLStringUtil::null, + IM_ONLINE, + IM_SESSION_LEAVE, + session_id); + gAgent.sendReliableMessage(); + gIMMgr->leaveSession(session_id); + + return; } - - //KC: make sure we leave the group chat at the server end as well - std::string aname; - gAgent.buildFullname(aname); - pack_instant_message( - gMessageSystem, - gAgent.getID(), - FALSE, - gAgent.getSessionID(), - from_id, - aname, - LLStringUtil::null, - IM_ONLINE, - IM_SESSION_LEAVE, - session_id); - gAgent.sendReliableMessage(); - //gIMMgr->removeSession(session_id); - gIMMgr->leaveSession(session_id); - - return; } + // Groupdata debug + else + { + LL_INFOS("Agent_GroupData") << "GROUPDEBUG: Group chat mute: No agent group data for group " << session_id.asString() << LL_ENDL; + } + // } - // Groupdata debug - else - { - LL_INFOS("Agent_GroupData") << "GROUPDEBUG: Group chat mute: No agent group data for group " << session_id.asString() << LL_ENDL; - } - // // Mute group chat port from Phoenix // standard message, not from system From 4ef3081fcafa188c726f738c7540229b3ad95bbb Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 7 Jul 2016 13:46:00 +0200 Subject: [PATCH 003/124] FIRE-19563: Add support for OpenSim VarRegion width scaling in CoarseLocationUpdate message This should have no effect on default 256m x 256m sized regions. Regions that are not using the standard size are currently broken anyway, so the result will just be a different form of broken if the region is running on a simulator not supporting this feature yet. --- indra/newview/llavataractions.cpp | 4 ++-- indra/newview/llviewerregion.cpp | 19 ++++++++++++++----- indra/newview/llviewerregion.h | 2 ++ indra/newview/llworld.cpp | 11 ++++++++--- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index c68067896f..c2e2c1a431 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -1634,7 +1634,7 @@ void LLAvatarActions::getScriptInfo(const LLUUID& idAgent) // Defined in llworld.cpp -LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin); +LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin, F32 width_scale_factorscale_factor); // static - Checked: 2010-12-03 (Catznip-2.4.0g) | Added: Catznip-2.4.0g bool getRegionAndPosGlobalFromAgentID(const LLUUID& idAgent, const LLViewerRegion** ppRegion, LLVector3d* pPosGlobal) @@ -1663,7 +1663,7 @@ bool getRegionAndPosGlobalFromAgentID(const LLUUID& idAgent, const LLViewerRegio if (ppRegion) *ppRegion = pRegion; if (pPosGlobal) - *pPosGlobal = unpackLocalToGlobalPosition(pRegion->mMapAvatars.at(idxRegionAgent), pRegion->getOriginGlobal()); + *pPosGlobal = unpackLocalToGlobalPosition(pRegion->mMapAvatars.at(idxRegionAgent), pRegion->getOriginGlobal(), pRegion->getWidthScaleFactor()); return (NULL != pRegion); } } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 6435d19a53..ed6fd33065 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -551,7 +551,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, mInvisibilityCheckHistory(-1), mPaused(FALSE), // Aurora Sim - mWidth(region_width_meters) + mWidth(region_width_meters), + mWidthScaleFactor(region_width_meters / REGION_WIDTH_METERS) // FIRE-19563: Scaling for OpenSim VarRegions { // Moved this up... -> mWidth = region_width_meters; // @@ -2176,8 +2177,12 @@ public: if(i == target_index) { LLVector3d global_pos(region->getOriginGlobal()); - global_pos.mdV[VX] += (F64)x; - global_pos.mdV[VY] += (F64)y; + // FIRE-19563: Scaling for OpenSim VarRegions + //global_pos.mdV[VX] += (F64)x; + //global_pos.mdV[VY] += (F64)y; + global_pos.mdV[VX] += (F64)x * region->getWidthScaleFactor(); + global_pos.mdV[VY] += (F64)y * region->getWidthScaleFactor(); + // global_pos.mdV[VZ] += (F64)z * 4.0; LLAvatarTracker::instance().setTrackedCoarseLocation(global_pos); } @@ -2251,8 +2256,12 @@ void LLViewerRegion::updateCoarseLocations(LLMessageSystem* msg) if(i == target_index) { LLVector3d global_pos(mImpl->mOriginGlobal); - global_pos.mdV[VX] += (F64)(x_pos); - global_pos.mdV[VY] += (F64)(y_pos); + // FIRE-19563: Scaling for OpenSim VarRegions + //global_pos.mdV[VX] += (F64)(x_pos); + //global_pos.mdV[VY] += (F64)(y_pos); + global_pos.mdV[VX] += (F64)(x_pos) * mWidthScaleFactor; + global_pos.mdV[VY] += (F64)(y_pos) * mWidthScaleFactor; + // global_pos.mdV[VZ] += (F64)(z_pos) * 4.0; LLAvatarTracker::instance().setTrackedCoarseLocation(global_pos); } diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 075f6c4496..2fe9be3f02 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -240,6 +240,7 @@ public: void setCacheID(const LLUUID& id); F32 getWidth() const { return mWidth; } + F32 getWidthScaleFactor() const { return mWidthScaleFactor; } // FIRE-19563: Scaling for OpenSim VarRegions void idleUpdate(F32 max_update_time); void lightIdleUpdate(); @@ -495,6 +496,7 @@ private: U64 mHandle; F32 mTimeDilation; // time dilation of physics simulation on simulator S32 mLastUpdate; //last time called idleUpdate() + F32 mWidthScaleFactor; // FIRE-19563: Scaling for OpenSim VarRegions // simulator name std::string mName; diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 641ca5c2af..accd54e129 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -1746,7 +1746,7 @@ void send_agent_resume() //static LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin) // [SL:KB] - Patch: UI-SidepanelPeople | Checked: 2010-12-03 (Catznip-2.4.0g) | Added: Catznip-2.4.0g -LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin) +LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin, F32 width_scale_factor) // [/SL:KB] { LLVector3d pos_local; @@ -1755,6 +1755,11 @@ LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& regi pos_local.mdV[VY] = (compact_local >> 8) & 0xFFU; pos_local.mdV[VX] = (compact_local >> 16) & 0xFFU; + // FIRE-19563: Scaling for OpenSim VarRegions + pos_local.mdV[VX] *= width_scale_factor; + pos_local.mdV[VY] *= width_scale_factor; + // + return region_origin + pos_local; } @@ -1817,7 +1822,7 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector* positi // //LLVector3d pos_global = unpackLocalToGlobalPosition(regionp->mMapAvatars.at(i), origin_global); U32 compact_local = regionp->mMapAvatars.at(i); - LLVector3d pos_global = unpackLocalToGlobalPosition(compact_local, origin_global); + LLVector3d pos_global = unpackLocalToGlobalPosition(compact_local, origin_global, regionp->getWidthScaleFactor()); // if(dist_vec_squared(pos_global, relative_to) <= radius_squared) { @@ -1874,7 +1879,7 @@ bool LLWorld::getAvatar(const LLUUID& idAvatar, LLVector3d& posAvatar) const { if (idAvatar == pRegion->mMapAvatarIDs[idxAgent]) { - posAvatar = unpackLocalToGlobalPosition(pRegion->mMapAvatars[idxAgent], pRegion->getOriginGlobal()); + posAvatar = unpackLocalToGlobalPosition(pRegion->mMapAvatars[idxAgent], pRegion->getOriginGlobal(), pRegion->getWidthScaleFactor()); return true; } } From acd014dee3909069444bd88ecd9d7b8b10de8271 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 7 Jul 2016 13:47:03 +0200 Subject: [PATCH 004/124] Copy&paste............ --- indra/newview/llavataractions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index c2e2c1a431..7bd4ce23de 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -1634,7 +1634,7 @@ void LLAvatarActions::getScriptInfo(const LLUUID& idAgent) // Defined in llworld.cpp -LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin, F32 width_scale_factorscale_factor); +LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin, F32 width_scale_factor); // static - Checked: 2010-12-03 (Catznip-2.4.0g) | Added: Catznip-2.4.0g bool getRegionAndPosGlobalFromAgentID(const LLUUID& idAgent, const LLViewerRegion** ppRegion, LLVector3d* pPosGlobal) From 5b468e997b8739fb60d171149f46e85033668158 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 7 Jul 2016 14:08:19 +0200 Subject: [PATCH 005/124] Add fonts folder to project structure --- indra/newview/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 39353ed275..ccd2559d65 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1974,6 +1974,13 @@ if (NOT USESYSTEMLIBS) list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES}) endif (NOT USESYSTEMLIBS) +# Add fonts moved to separate directory in Firestorm +file(GLOB viewer_FONT_FILES fonts/*.xml) +source_group("Fonts" FILES ${viewer_FONT_FILES}) +set_source_files_properties(${viewer_FONT_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) +list(APPEND viewer_SOURCE_FILES ${viewer_FONT_FILES}) + if (WINDOWS) file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi) From a36e94757e6cd0ebca9e47c19ef4afa712184e28 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 8 Jul 2016 18:32:13 +0200 Subject: [PATCH 006/124] FIRE-16744: Speculative shot-into-the-blue fix for new IM tabs stealing focus --- indra/newview/fsfloaterim.cpp | 15 ++++----- indra/newview/fsfloaterimcontainer.cpp | 42 +++++++++++++++++--------- indra/newview/fsfloaterimcontainer.h | 4 +++ 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/indra/newview/fsfloaterim.cpp b/indra/newview/fsfloaterim.cpp index b51852f42a..a641ee626e 100644 --- a/indra/newview/fsfloaterim.cpp +++ b/indra/newview/fsfloaterim.cpp @@ -2068,21 +2068,18 @@ void FSFloaterIM::sRemoveTypingIndicator(const LLSD& data) floater->removeTypingIndicator(); } -void FSFloaterIM::onNewIMReceived( const LLUUID& session_id ) +void FSFloaterIM::onNewIMReceived(const LLUUID& session_id) { - if (isChatMultiTab()) { - FSFloaterIMContainer* im_box = FSFloaterIMContainer::getInstance(); - if (!im_box) return; - - if (FSFloaterIM::findInstance(session_id)) return; + if (FSFloaterIM::findInstance(session_id)) + { + return; + } FSFloaterIM* new_tab = FSFloaterIM::getInstance(session_id); - - im_box->addFloater(new_tab, FALSE, LLTabContainer::END); + FSFloaterIMContainer::getInstance()->addNewSession(new_tab); } - } void FSFloaterIM::onClickCloseBtn(bool app_quitting) diff --git a/indra/newview/fsfloaterimcontainer.cpp b/indra/newview/fsfloaterimcontainer.cpp index 99de89ce32..b9c81f5fcf 100644 --- a/indra/newview/fsfloaterimcontainer.cpp +++ b/indra/newview/fsfloaterimcontainer.cpp @@ -49,7 +49,8 @@ FSFloaterIMContainer::FSFloaterIMContainer(const LLSD& seed) : LLMultiFloater(seed), mActiveVoiceFloater(NULL), mCurrentVoiceState(VOICE_STATE_NONE), - mForceVoiceStateUpdate(false) + mForceVoiceStateUpdate(false), + mIsAddingNewSession(false) { mAutoResize = FALSE; LLTransientFloaterMgr::getInstance()->addControlView(LLTransientFloaterMgr::IM, this); @@ -233,31 +234,34 @@ void FSFloaterIMContainer::addFloater(LLFloater* floaterp, { // [SL:KB] - Patch: UI-TabRearrange | Checked: 2012-06-22 (Catznip-3.3.0) // If we're redocking a torn off IM floater, return it back to its previous place - if ( (floaterp->isTornOff()) && (LLTabContainer::END == insertion_point) ) + if (!mIsAddingNewSession && (floaterp->isTornOff()) && (LLTabContainer::END == insertion_point) ) { LLChicletPanel* pChicletPanel = LLChicletBar::instance().getChicletPanel(); LLIMChiclet* pChiclet = pChicletPanel->findChiclet(floaterp->getKey()); - S32 idxChiclet = pChicletPanel->getChicletIndex(pChiclet); - if ( (idxChiclet > 0) && (idxChiclet < pChicletPanel->getChicletCount()) ) + if (pChiclet) { - // Look for the first IM session to the left of this one - while (--idxChiclet >= 0) + S32 idxChiclet = pChicletPanel->getChicletIndex(pChiclet); + if ((idxChiclet > 0) && (idxChiclet < pChicletPanel->getChicletCount())) { - if (pChiclet = dynamic_cast(pChicletPanel->getChiclet(idxChiclet))) + // Look for the first IM session to the left of this one + while (--idxChiclet >= 0) { - FSFloaterIM* pFloater = FSFloaterIM::findInstance(pChiclet->getSessionId()); - if (pFloater) + if (pChiclet = dynamic_cast(pChicletPanel->getChiclet(idxChiclet))) { - insertion_point = (LLTabContainer::eInsertionPoint)(mTabContainer->getIndexForPanel(pFloater) + 1); - break; + FSFloaterIM* pFloater = FSFloaterIM::findInstance(pChiclet->getSessionId()); + if (pFloater) + { + insertion_point = (LLTabContainer::eInsertionPoint)(mTabContainer->getIndexForPanel(pFloater) + 1); + break; + } } } } - } - else - { - insertion_point = (0 == idxChiclet) ? LLTabContainer::START : LLTabContainer::END; + else + { + insertion_point = (0 == idxChiclet) ? LLTabContainer::START : LLTabContainer::END; + } } } // [/SL:KB] @@ -270,6 +274,14 @@ void FSFloaterIMContainer::addFloater(LLFloater* floaterp, floaterp->mCloseSignal.connect(boost::bind(&FSFloaterIMContainer::onCloseFloater, this, session_id)); } +void FSFloaterIMContainer::addNewSession(LLFloater* floaterp) +{ + // Make sure we don't do some strange re-arranging if we add a new IM floater due to a new session + mIsAddingNewSession = true; + addFloater(floaterp, FALSE, LLTabContainer::END); + mIsAddingNewSession = false; +} + // [SL:KB] - Patch: Chat-NearbyChatBar | Checked: 2011-12-11 (Catznip-3.2.0d) | Added: Catznip-3.2.0d void FSFloaterIMContainer::removeFloater(LLFloater* floaterp) { diff --git a/indra/newview/fsfloaterimcontainer.h b/indra/newview/fsfloaterimcontainer.h index 608d66c06a..4d11da1993 100644 --- a/indra/newview/fsfloaterimcontainer.h +++ b/indra/newview/fsfloaterimcontainer.h @@ -55,6 +55,8 @@ public: // [/SL:KB] bool hasFloater(LLFloater* floaterp); + void addNewSession(LLFloater* floaterp); + static FSFloaterIMContainer* findInstance(); static FSFloaterIMContainer* getInstance(); @@ -99,6 +101,8 @@ private: void checkFlashing(); uuid_vec_t mFlashingSessions; + bool mIsAddingNewSession; + // [SL:KB] - Patch: UI-TabRearrange | Checked: 2012-05-05 (Catznip-3.3.0) protected: void onIMTabRearrange(S32 tab_index, LLPanel* tab_panel); From fa1beb1b38af303adf466c7a16fb7416b6314386 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 9 Jul 2016 16:17:26 +0200 Subject: [PATCH 007/124] Configuration queries via IMs (e.g. @version) can be disabled -> "RLVaEnableIMQuery" debug setting (enabled by default) --HG-- branch : RLVa --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llviewermessage.cpp | 7 +++---- indra/newview/rlvcommon.h | 1 + indra/newview/rlvdefines.h | 16 ++++++++-------- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 8098191bf7..3f72924a64 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -123,6 +123,17 @@ Value 0 + RLVaEnableIMQuery + + Comment + Enables a limited number of configuration queries via IM (e.g. @version) + Persist + 1 + Type + Boolean + Value + 1 + RLVaEnableLegacyNaming Comment diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index f4d58272b3..1eb739e698 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2592,11 +2592,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // do nothing -- don't distract newbies in // Prelude with global IMs } -// [RLVa:KB] - Checked: 2011-05-28 (RLVa-1.4.0) - else if ( (rlv_handler_t::isEnabled()) && (offline == IM_ONLINE) && ("@version" == message) && - (!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) ) +// [RLVa:KB] - Checked: RLVa-2.0.3 + else if ( (RlvActions::isRlvEnabled()) && (RlvSettings::getEnableIMQuery()) && (offline == IM_ONLINE) && ("@version" == message) && (!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) ) { - RlvUtil::sendBusyMessage(from_id, RlvStrings::getVersion(), session_id); + RlvUtil::sendBusyMessage(from_id, RlvStrings::getVersion(LLUUID::null), session_id); } // [/RLVa:KB] // else if (offline == IM_ONLINE diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index 9d586e1724..373e5172ad 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -91,6 +91,7 @@ public: #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS static BOOL getEnableComposites() { return fCompositeFolders; } #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS + static bool getEnableIMQuery() { return rlvGetSetting("RLVaEnableIMQuery", true); } static bool getEnableLegacyNaming() { return fLegacyNaming; } static bool getEnableSharedWear() { return rlvGetSetting(RLV_SETTING_ENABLESHAREDWEAR, false); } static bool getHideLockedLayers() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDLAYER, false); } diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index e227f3a66d..979fd52af6 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -1,17 +1,17 @@ -/** +/** * * Copyright (c) 2009-2016, Kitty Barnett - * - * The source code in this file is provided to you under the terms of the + * + * The source code in this file is provided to you under the terms of the * GNU Lesser General Public License, version 2.1, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - * PARTICULAR PURPOSE. Terms of the LGPL can be found in doc/LGPL-licence.txt + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. Terms of the LGPL can be found in doc/LGPL-licence.txt * in this distribution, or online at http://www.gnu.org/licenses/lgpl-2.1.txt - * + * * By copying, modifying or distributing this software, you acknowledge that - * you have read and understood your obligations described above, and agree to + * you have read and understood your obligations described above, and agree to * abide by those obligations. - * + * */ #ifndef RLV_DEFINES_H From 21b6dd58ac35469049cebd98c57ec14bf030a02d Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 9 Jul 2016 16:24:43 +0200 Subject: [PATCH 008/124] Compatibility mode allows reporting a different (lower) version number to specific items -> TPVs implementing dynamic viewer data should call RlvSettings::initCompatibilityMode() with the setting -> End-users also have manual control over the list through the "RLVaCompatibilityModeList" debug setting -> Format: (;-separated) * creator: * name: --HG-- branch : RLVa --- indra/newview/app_settings/settings.xml | 11 +++ indra/newview/rlvcommon.cpp | 106 +++++++++++++++++++----- indra/newview/rlvcommon.h | 34 +++++--- indra/newview/rlvdefines.h | 11 ++- indra/newview/rlvfloaters.cpp | 2 +- indra/newview/rlvhandler.cpp | 6 +- 6 files changed, 131 insertions(+), 39 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3f72924a64..6a8cdf13d9 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -90,6 +90,17 @@ Value + + RLVaCompatibilityModeList + + Comment + Contains a list of creators or partial items names that require compatibility mode handling (see wiki for more information and syntax) + Persist + 1 + Type + String + Value + + RLVaDebugDeprecateExplicitPoint Comment diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index ecc4ae5453..a455bd8e06 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -23,8 +23,10 @@ #include "llregionhandle.h" #include "llsdserialize.h" #include "lltrans.h" +#include "llversioninfo.h" #include "llviewerparcelmgr.h" #include "llviewermenu.h" +#include "llviewerobjectlist.h" #include "llviewerregion.h" #include "llworld.h" @@ -36,6 +38,8 @@ #include "lscript_byteformat.h" #include +#include + // ============================================================================ // Forward declarations @@ -74,11 +78,13 @@ void RlvNotifications::onGiveToRLVConfirmation(const LLSD& notification, const L // #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS -bool RlvSettings::fCompositeFolders = false; +bool RlvSettings::s_fCompositeFolders = false; #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS -bool RlvSettings::fCanOOC = true; -bool RlvSettings::fLegacyNaming = true; -bool RlvSettings::fNoSetEnv = false; +bool RlvSettings::s_fCanOOC = true; +bool RlvSettings::s_fLegacyNaming = true; +bool RlvSettings::s_fNoSetEnv = false; +std::list RlvSettings::s_CompatItemCreators; +std::list RlvSettings::s_CompatItemNames; // Checked: 2010-02-27 (RLVa-1.2.0a) | Modified: RLVa-1.1.0i void RlvSettings::initClass() @@ -86,18 +92,20 @@ void RlvSettings::initClass() static bool fInitialized = false; if (!fInitialized) { + initCompatibilityMode(LLStringUtil::null); + #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS - fCompositeFolders = rlvGetSetting(RLV_SETTING_ENABLECOMPOSITES, false); + s_fCompositeFolders = rlvGetSetting(RLV_SETTING_ENABLECOMPOSITES, false); if (gSavedSettings.controlExists(RLV_SETTING_ENABLECOMPOSITES)) - gSavedSettings.getControl(RLV_SETTING_ENABLECOMPOSITES)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &fCompositeFolders)); + gSavedSettings.getControl(RLV_SETTING_ENABLECOMPOSITES)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &s_fCompositeFolders)); #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS - fLegacyNaming = rlvGetSetting(RLV_SETTING_ENABLELEGACYNAMING, true); + s_fLegacyNaming = rlvGetSetting(RLV_SETTING_ENABLELEGACYNAMING, true); if (gSavedSettings.controlExists(RLV_SETTING_ENABLELEGACYNAMING)) - gSavedSettings.getControl(RLV_SETTING_ENABLELEGACYNAMING)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &fLegacyNaming)); + gSavedSettings.getControl(RLV_SETTING_ENABLELEGACYNAMING)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &s_fLegacyNaming)); - fCanOOC = rlvGetSetting(RLV_SETTING_CANOOC, true); - fNoSetEnv = rlvGetSetting(RLV_SETTING_NOSETENV, false); + s_fCanOOC = rlvGetSetting(RLV_SETTING_CANOOC, true); + s_fNoSetEnv = rlvGetSetting(RLV_SETTING_NOSETENV, false); // Don't allow toggling RLVaLoginLastLocation from the debug settings floater if (gSavedPerAccountSettings.controlExists(RLV_SETTING_LOGINLASTLOCATION)) @@ -152,6 +160,65 @@ void RlvSettings::onChangedSettingMain(const LLSD& sdValue) } } +void RlvSettings::initCompatibilityMode(std::string strCompatList) +{ + // NOTE: this function can be called more than once + s_CompatItemCreators.clear(); + s_CompatItemNames.clear(); + + strCompatList.append(";").append(rlvGetSetting("RLVaCompatibilityModeList", "")); + + boost_tokenizer tokCompatList(strCompatList, boost::char_separator(";", "", boost::drop_empty_tokens)); + for (const std::string& strCompatEntry : tokCompatList) + { + if (boost::starts_with(strCompatEntry, "creator:")) + { + LLUUID idCreator; + if ( (44 == strCompatEntry.size()) && (LLUUID::parseUUID(strCompatEntry.substr(8), &idCreator)) && + (s_CompatItemCreators.end() == std::find(s_CompatItemCreators.begin(), s_CompatItemCreators.end(), idCreator)) ) + { + s_CompatItemCreators.push_back(idCreator); + } + } + else if (boost::starts_with(strCompatEntry, "name:")) + { + if (strCompatEntry.size() > 5) + s_CompatItemNames.push_back(strCompatEntry.substr(5)); + } + } +} + +bool RlvSettings::isCompatibilityModeObject(const LLUUID& idRlvObject) +{ + bool fCompatMode = false; + if (idRlvObject.notNull()) + { + const LLViewerObject* pObj = gObjectList.findObject(idRlvObject); + if ( (pObj) && (pObj->isAttachment()) ) + { + const LLViewerInventoryItem* pItem = gInventory.getItem(pObj->getAttachmentItemID()); + if (pItem) + { + fCompatMode = s_CompatItemCreators.end() != std::find(s_CompatItemCreators.begin(), s_CompatItemCreators.end(), pItem->getCreatorUUID()); + if (!fCompatMode) + { + const std::string& strAttachName = pItem->getName(); + for (const std::string& strCompatName : s_CompatItemNames) + { + boost::regex regexp(strCompatName, boost::regex::perl | boost::regex::icase); + if (boost::regex_match(strAttachName, regexp)) + { + fCompatMode = true; + break; + } + } + } + } + } + } + return fCompatMode; +} + // ============================================================================ // RlvStrings // @@ -314,27 +381,26 @@ const char* RlvStrings::getStringFromReturnCode(ERlvCmdRet eRet) return NULL; } -// Checked: 2012-02-25 (RLVa-1.4.5) | Modified: RLVa-1.4.5 -std::string RlvStrings::getVersion(bool fLegacy) +std::string RlvStrings::getVersion(const LLUUID& idRlvObject, bool fLegacy) { + bool fCompatMode = RlvSettings::isCompatibilityModeObject(idRlvObject); return llformat("%s viewer v%d.%d.%d (RLVa %d.%d.%d)", ( (!fLegacy) ? "RestrainedLove" : "RestrainedLife" ), - RLV_VERSION_MAJOR, RLV_VERSION_MINOR, RLV_VERSION_PATCH, + (!fCompatMode) ? RLV_VERSION_MAJOR : RLV_VERSION_MAJOR_COMPAT, (!fCompatMode) ? RLV_VERSION_MINOR : RLV_VERSION_MINOR_COMPAT, (!fCompatMode) ? RLV_VERSION_PATCH : RLV_VERSION_PATCH_COMPAT, RLVa_VERSION_MAJOR, RLVa_VERSION_MINOR, RLVa_VERSION_PATCH); } -// Checked: 2010-04-18 (RLVa-1.4.0a) | Added: RLVa-1.2.0e std::string RlvStrings::getVersionAbout() { - return llformat("RLV v%d.%d.%d / RLVa v%d.%d.%d%c" , - RLV_VERSION_MAJOR, RLV_VERSION_MINOR, RLV_VERSION_PATCH, - RLVa_VERSION_MAJOR, RLVa_VERSION_MINOR, RLVa_VERSION_PATCH, 'a' + RLVa_VERSION_BUILD); + return llformat("RLV v%d.%d.%d / RLVa v%d.%d.%d.%d", RLV_VERSION_MAJOR, RLV_VERSION_MINOR, RLV_VERSION_PATCH, RLVa_VERSION_MAJOR, RLVa_VERSION_MINOR, RLVa_VERSION_PATCH, LLVersionInfo::getBuild()); } -// Checked: 2010-03-27 (RLVa-1.4.0a) | Modified: RLVa-1.1.0a -std::string RlvStrings::getVersionNum() +std::string RlvStrings::getVersionNum(const LLUUID& idRlvObject) { - return llformat("%d%02d%02d%02d", RLV_VERSION_MAJOR, RLV_VERSION_MINOR, RLV_VERSION_PATCH, RLV_VERSION_BUILD); + bool fCompatMode = RlvSettings::isCompatibilityModeObject(idRlvObject); + return llformat("%d%02d%02d%02d", + (!fCompatMode) ? RLV_VERSION_MAJOR : RLV_VERSION_MAJOR_COMPAT, (!fCompatMode) ? RLV_VERSION_MINOR : RLV_VERSION_MINOR_COMPAT, + (!fCompatMode) ? RLV_VERSION_PATCH : RLV_VERSION_PATCH_COMPAT, (!fCompatMode) ? RLV_VERSION_BUILD : RLV_VERSION_BUILD_COMPAT); } // Checked: 2011-11-08 (RLVa-1.5.0) diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index 373e5172ad..fa50475452 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -80,21 +80,21 @@ class RlvSettings { public: static bool getDebug() { return rlvGetSetting(RLV_SETTING_DEBUG, false); } - static bool getCanOOC() { return fCanOOC; } + static bool getCanOOC() { return s_fCanOOC; } static bool getForbidGiveToRLV() { return rlvGetSetting(RLV_SETTING_FORBIDGIVETORLV, true); } - static bool getNoSetEnv() { return fNoSetEnv; } + static bool getNoSetEnv() { return s_fNoSetEnv; } static std::string getWearAddPrefix() { return rlvGetSetting(RLV_SETTING_WEARADDPREFIX, LLStringUtil::null); } static std::string getWearReplacePrefix() { return rlvGetSetting(RLV_SETTING_WEARREPLACEPREFIX, LLStringUtil::null); } static bool getDebugHideUnsetDup() { return rlvGetSetting(RLV_SETTING_DEBUGHIDEUNSETDUP, false); } #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS - static BOOL getEnableComposites() { return fCompositeFolders; } + static BOOL getEnableComposites() { return s_fCompositeFolders; } #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS static bool getEnableIMQuery() { return rlvGetSetting("RLVaEnableIMQuery", true); } - static bool getEnableLegacyNaming() { return fLegacyNaming; } + static bool getEnableLegacyNaming() { return s_fLegacyNaming; } static bool getEnableSharedWear() { return rlvGetSetting(RLV_SETTING_ENABLESHAREDWEAR, false); } - static bool getHideLockedLayers() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDLAYER, false); } + static bool getHideLockedLayers() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDLAYER, false); } static bool getHideLockedAttach() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDATTACH, false); } static bool getHideLockedInventory() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDINVENTORY, false); } static bool getSharedInvAutoRename() { return rlvGetSetting(RLV_SETTING_SHAREDINVAUTORENAME, true); } @@ -102,6 +102,9 @@ public: static bool getLoginLastLocation() { return rlvGetPerUserSetting(RLV_SETTING_LOGINLASTLOCATION, true); } static void updateLoginLastLocation(); + static void initCompatibilityMode(std::string strCompatList); + static bool isCompatibilityModeObject(const LLUUID& idRlvObject); + static void initClass(); static void onChangedSettingMain(const LLSD& sdValue); protected: @@ -109,11 +112,18 @@ protected: static bool onChangedSettingBOOL(const LLSD& sdValue, bool* pfSetting); #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS - static BOOL fCompositeFolders; + static BOOL s_fCompositeFolders; #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS - static bool fCanOOC; - static bool fLegacyNaming; - static bool fNoSetEnv; + + /* + * Member variables + */ +protected: + static bool s_fCanOOC; + static bool s_fLegacyNaming; + static bool s_fNoSetEnv; + static std::list s_CompatItemCreators; + static std::list s_CompatItemNames; }; // ============================================================================ @@ -132,9 +142,9 @@ public: static const std::string& getString(const std::string& strStringName); static const char* getStringFromReturnCode(ERlvCmdRet eRet); static const std::string& getStringMapPath() { return m_StringMapPath; } - static std::string getVersion(bool fLegacy = false); // @version - static std::string getVersionAbout(); // Shown in Help / About - static std::string getVersionNum(); // @versionnum + static std::string getVersion(const LLUUID& idRlvObject, bool fLegacy = false); + static std::string getVersionAbout(); + static std::string getVersionNum(const LLUUID& idRlvObject); static bool hasString(const std::string& strStringName, bool fCheckCustom = false); static void setCustomString(const std::string& strStringName, const std::string& strStringValue); diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 979fd52af6..84a921b3fb 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -21,17 +21,22 @@ // Defines // -// Version of the specifcation we support +// Version of the specifcation we report const S32 RLV_VERSION_MAJOR = 3; const S32 RLV_VERSION_MINOR = 1; const S32 RLV_VERSION_PATCH = 4; const S32 RLV_VERSION_BUILD = 0; +// Version of the specifcation we report (in compatibility mode) +const S32 RLV_VERSION_MAJOR_COMPAT = 2; +const S32 RLV_VERSION_MINOR_COMPAT = 8; +const S32 RLV_VERSION_PATCH_COMPAT = 0; +const S32 RLV_VERSION_BUILD_COMPAT = 0; + // Implementation version const S32 RLVa_VERSION_MAJOR = 2; const S32 RLVa_VERSION_MINOR = 0; -const S32 RLVa_VERSION_PATCH = 0; -const S32 RLVa_VERSION_BUILD = 0; +const S32 RLVa_VERSION_PATCH = 3; // Uncomment before a final release //#define RLV_RELEASE diff --git a/indra/newview/rlvfloaters.cpp b/indra/newview/rlvfloaters.cpp index 7f7d49cdf8..4b4303cf27 100644 --- a/indra/newview/rlvfloaters.cpp +++ b/indra/newview/rlvfloaters.cpp @@ -234,7 +234,7 @@ void RlvFloaterBehaviours::onBtnCopyToClipboard() { std::ostringstream strRestrictions; - strRestrictions << RlvStrings::getVersion() << "\n"; + strRestrictions << RlvStrings::getVersion(LLUUID::null) << "\n"; const RlvHandler::rlv_object_map_t* pObjects = gRlvHandler.getObjectMap(); for (RlvHandler::rlv_object_map_t::const_iterator itObj = pObjects->begin(), endObj = pObjects->end(); itObj != endObj; ++itObj) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index e769847d18..f4033a2380 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -1070,7 +1070,7 @@ BOOL RlvHandler::setEnabled(BOOL fEnable) if (fEnable) { - RLV_INFOS << "Enabling Restrained Love API support - " << RlvStrings::getVersion() << RLV_ENDL; + RLV_INFOS << "Enabling Restrained Love API support - " << RlvStrings::getVersionAbout() << RLV_ENDL; m_fEnabled = TRUE; // Initialize static classes @@ -2540,11 +2540,11 @@ ERlvCmdRet RlvHandler::processReplyCommand(const RlvCommand& rlvCmd) const case RLV_BHVR_VERSION: // @version= - Checked: 2010-03-27 (RLVa-1.4.0a) case RLV_BHVR_VERSIONNEW: // @versionnew= - Checked: 2010-03-27 (RLVa-1.4.0a) | Added: RLVa-1.2.0b // NOTE: RLV will respond even if there's an option - strReply = RlvStrings::getVersion(RLV_BHVR_VERSION == rlvCmd.getBehaviourType()); + strReply = RlvStrings::getVersion(rlvCmd.getObjectID(), RLV_BHVR_VERSION == rlvCmd.getBehaviourType()); break; case RLV_BHVR_VERSIONNUM: // @versionnum= - Checked: 2010-03-27 (RLVa-1.4.0a) | Added: RLVa-1.0.4b // NOTE: RLV will respond even if there's an option - strReply = RlvStrings::getVersionNum(); + strReply = RlvStrings::getVersionNum(rlvCmd.getObjectID()); break; case RLV_BHVR_GETATTACH: // @getattach[:]= eRet = onGetAttach(rlvCmd, strReply); From fda5eb9cccdef09e99edc2d280295f17149560b3 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 9 Jul 2016 22:08:23 +0200 Subject: [PATCH 009/124] Code cleanup: better handling of group joins when @setgroup restricted -> bundle all permission checks in a predictable single function (see RlvActions::canChangeActiveGroup) -> properly handle the case where a user is ejected from a group -> provide feedback to the user after we force the previous group back when joining a new group --HG-- branch : RLVa --- indra/newview/llgroupactions.cpp | 8 ++-- indra/newview/llgrouplist.cpp | 16 +++---- indra/newview/rlvactions.cpp | 7 +++ indra/newview/rlvactions.h | 5 ++ indra/newview/rlvdefines.h | 1 + indra/newview/rlvhandler.cpp | 48 ++++++++++++++----- .../skins/default/xui/en/rlva_strings.xml | 5 ++ 7 files changed, 65 insertions(+), 25 deletions(-) diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index aaa5952ef7..73bb8543ee 100755 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -294,8 +294,8 @@ bool LLGroupActions::onJoinGroup(const LLSD& notification, const LLSD& response) void LLGroupActions::leave(const LLUUID& group_id) { // if (group_id.isNull()) -// [RLVa:KB] - Checked: 2011-03-28 (RLVa-1.4.1a) | Added: RLVa-1.3.0f - if ( (group_id.isNull()) || ((gAgent.getGroupID() == group_id) && (gRlvHandler.hasBehaviour(RLV_BHVR_SETGROUP))) ) +// [RLVa:KB] - Checked: RLVa-1.3.0 + if ( (group_id.isNull()) || ((gAgent.getGroupID() == group_id) && (!RlvActions::canChangeActiveGroup())) ) // [/RLVa:KB] { return; @@ -348,8 +348,8 @@ void LLGroupActions::processLeaveGroupDataResponse(const LLUUID group_id) // static void LLGroupActions::activate(const LLUUID& group_id) { -// [RLVa:KB] - Checked: 2011-03-28 (RLVa-1.4.1a) | Added: RLVa-1.3.0f - if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SETGROUP)) && (gRlvHandler.getAgentGroup() != group_id) ) +// [RLVa:KB] - Checked: RLVa-1.3.0 + if ( (!RlvActions::canChangeActiveGroup()) && (gRlvHandler.getAgentGroup() != group_id) ) { return; } diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 062154f03c..339414e5cb 100755 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -43,8 +43,8 @@ #include "llviewercontrol.h" // for gSavedSettings #include "llviewermenu.h" // for gMenuHolder #include "llvoiceclient.h" -// [RLVa:KB] - Checked: 2011-03-28 (RLVa-1.3.0f) | Added: RLVa-1.3.0f -#include "rlvhandler.h" +// [RLVa:KB] - Checked: RLVa-2.0.3 +#include "rlvactions.h" // [/RLVa:KB] static LLDefaultChildRegistry::Register r("group_list"); @@ -284,14 +284,14 @@ bool LLGroupList::onContextMenuItemEnable(const LLSD& userdata) bool real_group_selected = selected_group_id.notNull(); // a "real" (not "none") group is selected // each group including "none" can be activated +// [RLVa:KB] - Checked: RLVa-1.3.0 + if (userdata.asString() == "activate") + return (gAgent.getGroupID() != selected_group_id) && (RlvActions::canChangeActiveGroup()); + else if (userdata.asString() == "leave") + return (real_group_selected) && ((gAgent.getGroupID() != selected_group_id) || (RlvActions::canChangeActiveGroup())); +// [/RLVa:KB] // if (userdata.asString() == "activate") // return gAgent.getGroupID() != selected_group_id; -// [RLVa:KB] - Checked: 2011-03-28 (RLVa-1.4.1a) | Added: RLVa-1.3.0f - if (userdata.asString() == "activate") - return (gAgent.getGroupID() != selected_group_id) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SETGROUP)); - else if (userdata.asString() == "leave") - return (real_group_selected) && ((gAgent.getGroupID() != selected_group_id) || (!gRlvHandler.hasBehaviour(RLV_BHVR_SETGROUP))); -// [/RLVa:KB] if (userdata.asString() == "call") return real_group_selected && LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking(); diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp index 1def8205fb..b98de3cbf2 100644 --- a/indra/newview/rlvactions.cpp +++ b/indra/newview/rlvactions.cpp @@ -121,6 +121,13 @@ bool RlvActions::getCameraFOVLimits(F32& nFOVMin, F32& nFOVMax) bool RlvActions::s_BlockNamesContexts[SNC_COUNT] = { 0 }; +bool RlvActions::canChangeActiveGroup(const LLUUID& idRlvObject) +{ + // User can change their active group if: + // - not specifically restricted (by another object that the one specified) from changing their active group + return (idRlvObject.isNull()) ? !gRlvHandler.hasBehaviour(RLV_BHVR_SETGROUP) : !gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETGROUP, idRlvObject); +} + // Little helper function to check the IM exclusion range for @recvim, @sendim and @startim (returns: min_dist <= (pos user - pos target) <= max_dist) static bool rlvCheckAvatarIMDistance(const LLUUID& idAvatar, ERlvBehaviourModifier eModDistMin, ERlvBehaviourModifier eModDistMax) { diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h index e11066e25a..14f0c3b85b 100644 --- a/indra/newview/rlvactions.h +++ b/indra/newview/rlvactions.h @@ -74,6 +74,11 @@ public: // Communication/Avatar interaction // ================================ public: + /* + * Returns true if the user is allowed to change their currently active group + */ + static bool canChangeActiveGroup(const LLUUID& idRlvObject = LLUUID::null); + /* * Returns true if the user is allowed to receive IMs from the specified sender (can be an avatar or a group) */ diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 84a921b3fb..3011a41325 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -370,6 +370,7 @@ enum ERlvAttachGroupType #define RLV_STRING_BLOCKED_AUTOPILOT "blocked_autopilot" #define RLV_STRING_BLOCKED_GENERIC "blocked_generic" +#define RLV_STRING_BLOCKED_GROUPCHANGE "blocked_groupchange" #define RLV_STRING_BLOCKED_PERMATTACH "blocked_permattach" #define RLV_STRING_BLOCKED_PERMTELEPORT "blocked_permteleport" #define RLV_STRING_BLOCKED_RECVIM "blocked_recvim" diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index f4033a2380..6ad9e4c848 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -472,21 +472,43 @@ ERlvCmdRet RlvHandler::processClearCommand(const RlvCommand& rlvCmd) // Externally invoked event handlers // -// Checked: 2011-05-22 (RLVa-1.4.1a) | Added: RLVa-1.3.1b bool RlvHandler::handleEvent(LLPointer event, const LLSD& sdUserdata) { - // If the user managed to change their active group (= newly joined or created group) we need to reactivate the previous one - if ( (hasBehaviour(RLV_BHVR_SETGROUP)) && ("new group" == event->desc()) && (m_idAgentGroup != gAgent.getGroupID()) ) + // NOTE: we'll fire once for every group the user belongs to so we need to manually keep track of pending changes + static LLUUID s_idLastAgentGroup = LLUUID::null; + static bool s_fGroupChanging = false; + + if (s_idLastAgentGroup != gAgent.getGroupID()) { - // [Copy/paste from LLGroupActions::activate()] - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_ActivateGroup); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addUUIDFast(_PREHASH_GroupID, m_idAgentGroup); - gAgent.sendReliableMessage(); - return true; + s_idLastAgentGroup = gAgent.getGroupID(); + s_fGroupChanging = false; + } + + // If the user managed to change their active group (= newly joined or created group) we need to reactivate the previous one + if ( (!RlvActions::canChangeActiveGroup()) && ("new group" == event->desc()) && (m_idAgentGroup != gAgent.getGroupID()) ) + { + // Make sure they still belong to the group + if ( (m_idAgentGroup.notNull()) && (!gAgent.isInGroup(m_idAgentGroup)) ) + { + m_idAgentGroup.setNull(); + s_fGroupChanging = false; + } + + if (!s_fGroupChanging) + { + RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_GROUPCHANGE, LLSD().with("GROUP_SLURL", (m_idAgentGroup.notNull()) ? llformat("secondlife:///app/group/%s/about", m_idAgentGroup.asString()) : "(none)")); + + // [Copy/paste from LLGroupActions::activate()] + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_ActivateGroup); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->addUUIDFast(_PREHASH_GroupID, m_idAgentGroup); + gAgent.sendReliableMessage(); + s_fGroupChanging = true; + return true; + } } else { @@ -2384,7 +2406,7 @@ void RlvHandler::onForceWearCallback(const uuid_vec_t& idItems, U32 nFlags) cons template<> template<> ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) { - if (gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETGROUP, rlvCmd.getObjectID())) + if (!RlvActions::canChangeActiveGroup(rlvCmd.getObjectID())) { return RLV_RET_FAILED_LOCK; } diff --git a/indra/newview/skins/default/xui/en/rlva_strings.xml b/indra/newview/skins/default/xui/en/rlva_strings.xml index 6861f9c465..62651c9a09 100644 --- a/indra/newview/skins/default/xui/en/rlva_strings.xml +++ b/indra/newview/skins/default/xui/en/rlva_strings.xml @@ -56,6 +56,11 @@ value Unable to perform action due to RLV restrictions + blocked_groupchange + + value + Unable to change your active group due to an RLV restriction; switching back to [GROUP_SLURL] + blocked_permattach value From 5e4235be4e6e3fa73700b31f9a0b8aa58af4cd49 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 9 Jul 2016 22:49:33 +0200 Subject: [PATCH 010/124] Processing of RLV commands by temporary attachments can be toggled by the user -> "RLVaEnableTemporaryAttachments" debug setting (enabled by default) --HG-- branch : RLVa --- indra/newview/app_settings/settings.xml | 22 +++++++++---------- indra/newview/llviewermessage.cpp | 3 ++- indra/newview/rlvcommon.cpp | 5 +++++ indra/newview/rlvcommon.h | 2 ++ indra/newview/rlvdefines.h | 1 + indra/newview/rlvlocks.h | 7 +++--- .../skins/default/xui/en/menu_viewer.xml | 10 +++++++++ 7 files changed, 34 insertions(+), 16 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 6a8cdf13d9..b3879d4a52 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -167,6 +167,17 @@ Value 1 + RLVaEnableTemporaryAttachments + + Comment + Allows temporary attachments (regardless of origin) to issue RLV commands + Persist + 1 + Type + Boolean + Value + 1 + RLVaExperimentalCommands Comment @@ -244,17 +255,6 @@ Value 1 - WarnFirstRLVGiveToRLV - - Comment - Enables FirstRLVGiveToRLV warning dialog - Persist - 1 - Type - Boolean - Value - 1 - ImporterDebug Comment diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 1eb739e698..2d317562aa 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4027,7 +4027,8 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) case CHAT_TYPE_OWNER: // [RLVa:KB] - Checked: 2010-02-XX (RLVa-1.2.0a) | Modified: RLVa-1.1.0f // TODO-RLVa: [RLVa-1.2.0] consider rewriting this before a RLVa-1.2.0 release - if ( (rlv_handler_t::isEnabled()) && (mesg.length() > 3) && (RLV_CMD_PREFIX == mesg[0]) && (CHAT_TYPE_OWNER == chat.mChatType) ) + if ( (rlv_handler_t::isEnabled()) && (mesg.length() > 3) && (RLV_CMD_PREFIX == mesg[0]) && (CHAT_TYPE_OWNER == chat.mChatType) && + ((!chatter) || (!chatter->isAttachment()) || (!chatter->isTempAttachment()) || (RlvSettings::getEnableTemporaryAttachments())) ) { mesg.erase(0, 1); LLStringUtil::toLower(mesg); diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index a455bd8e06..319441d9c7 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -83,6 +83,7 @@ bool RlvSettings::s_fCompositeFolders = false; bool RlvSettings::s_fCanOOC = true; bool RlvSettings::s_fLegacyNaming = true; bool RlvSettings::s_fNoSetEnv = false; +bool RlvSettings::s_fTempAttach = true; std::list RlvSettings::s_CompatItemCreators; std::list RlvSettings::s_CompatItemNames; @@ -94,6 +95,10 @@ void RlvSettings::initClass() { initCompatibilityMode(LLStringUtil::null); + s_fTempAttach = rlvGetSetting(RLV_SETTING_ENABLETEMPATTACH, true); + if (gSavedSettings.controlExists(RLV_SETTING_ENABLETEMPATTACH)) + gSavedSettings.getControl(RLV_SETTING_ENABLETEMPATTACH)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &s_fTempAttach)); + #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS s_fCompositeFolders = rlvGetSetting(RLV_SETTING_ENABLECOMPOSITES, false); if (gSavedSettings.controlExists(RLV_SETTING_ENABLECOMPOSITES)) diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index fa50475452..96cde804f4 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -94,6 +94,7 @@ public: static bool getEnableIMQuery() { return rlvGetSetting("RLVaEnableIMQuery", true); } static bool getEnableLegacyNaming() { return s_fLegacyNaming; } static bool getEnableSharedWear() { return rlvGetSetting(RLV_SETTING_ENABLESHAREDWEAR, false); } + static bool getEnableTemporaryAttachments() { return s_fTempAttach; } static bool getHideLockedLayers() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDLAYER, false); } static bool getHideLockedAttach() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDATTACH, false); } static bool getHideLockedInventory() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDINVENTORY, false); } @@ -122,6 +123,7 @@ protected: static bool s_fCanOOC; static bool s_fLegacyNaming; static bool s_fNoSetEnv; + static bool s_fTempAttach; static std::list s_CompatItemCreators; static std::list s_CompatItemNames; }; diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 3011a41325..5f681a430c 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -348,6 +348,7 @@ enum ERlvAttachGroupType #define RLV_SETTING_ENABLECOMPOSITES "RLVaEnableCompositeFolders" #define RLV_SETTING_ENABLELEGACYNAMING "RLVaEnableLegacyNaming" #define RLV_SETTING_ENABLESHAREDWEAR "RLVaEnableSharedWear" +#define RLV_SETTING_ENABLETEMPATTACH "RLVaEnableTemporaryAttachments" #define RLV_SETTING_HIDELOCKEDLAYER "RLVaHideLockedLayers" #define RLV_SETTING_HIDELOCKEDATTACH "RLVaHideLockedAttachments" #define RLV_SETTING_HIDELOCKEDINVENTORY "RLVaHideLockedInventory" diff --git a/indra/newview/rlvlocks.h b/indra/newview/rlvlocks.h index 69df3c9283..0d57321068 100644 --- a/indra/newview/rlvlocks.h +++ b/indra/newview/rlvlocks.h @@ -475,15 +475,14 @@ inline bool RlvAttachmentLocks::isLockedAttachment(const LLViewerObject* pAttach RLV_ASSERT( (!pAttachObj) || (pAttachObj == pAttachObj->getRootEdit()) ); // Object is locked if: - // - it's not a temporary attachment // - it's specifically marked as non-detachable (ie @detach=n) // - it's attached to an attachment point that is RLV_LOCK_REMOVE locked (ie @remattach:=n) // - it's part of a locked folder return - (pAttachObj) && (pAttachObj->isAttachment()) && (!pAttachObj->isTempAttachment()) && - ( (m_AttachObjRem.find(pAttachObj->getID()) != m_AttachObjRem.end()) || + (pAttachObj) && (pAttachObj->isAttachment()) && + ( (m_AttachObjRem.find(pAttachObj->getID()) != m_AttachObjRem.end()) || (isLockedAttachmentPoint(RlvAttachPtLookup::getAttachPointIndex(pAttachObj), RLV_LOCK_REMOVE)) || - (RlvFolderLocks::instance().isLockedAttachment(pAttachObj->getAttachmentItemID())) ); + ((!pAttachObj->isTempAttachment()) && (RlvFolderLocks::instance().isLockedAttachment(pAttachObj->getAttachmentItemID()))) ); } // Checked: 2010-02-28 (RLVa-1.2.0a) | Added: RLVa-1.0.5a diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 5bb12beb74..f4bfb8e401 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1623,6 +1623,16 @@ function="ToggleControl" parameter="RestrainedLoveCanOOC" /> + + + + From 142946e265c1c9c5a41421e34997dc3ae5869940 Mon Sep 17 00:00:00 2001 From: Nicky Date: Sat, 9 Jul 2016 23:33:19 +0200 Subject: [PATCH 011/124] New cmake variable ND_SYSTEM_DEFINES_FORTIFY_SOURCE instead of relying on GCC detection is the system compiler already defines _FORTIFY_SOURCE --- indra/cmake/00-Common.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 4f0fd0df23..8a386ce866 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -194,7 +194,7 @@ if (LINUX) OUTPUT_STRIP_TRAILING_WHITESPACE) # Gentoo defines _FORTIFY_SOURCE by default - if (NOT ( ${GXX_VERSION} MATCHES "Gentoo 4.[789].*" OR ${GXX_VERSION} MATCHES "Gentoo 5.3.*" ) ) + if (NOT ND_SYSTEM_DEFINES_FORTIFY_SOURCE) # if (${GXX_VERSION} STREQUAL ${CXX_VERSION}) @@ -206,7 +206,7 @@ if (LINUX) endif (${GXX_VERSION} STREQUAL ${CXX_VERSION}) # Gentoo defines _FORTIFY_SOURCE by default - endif (NOT ( ${GXX_VERSION} MATCHES "Gentoo 4.[789].*" OR ${GXX_VERSION} MATCHES "Gentoo 5.3.*" ) ) + endif (NOT ND_SYSTEM_DEFINES_FORTIFY_SOURCE) # # Let's actually get a numerical version of gxx's version From 7bfd26e3dfd7e04a7052a3b7f92cbba46cdfca1b Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 10 Jul 2016 16:40:20 +0200 Subject: [PATCH 012/124] [FIXED] @unsharedwear=n doesn't block "Add to Outfit" (if no attachment/wearable locks exist) -> wearables would be properly filtered if there was at least one wearable lock -> attachments would be properly filtered if there was at least one attachment lock => added explicit check for add-restricted folders => gray out the relevant context menu items (i.e. "Add to Outfit" and "Replace Current Outfit) --HG-- branch : RLVa --- indra/newview/llappearancemgr.cpp | 28 ++++++++++++++++++++++------ indra/newview/llinventorybridge.cpp | 12 ++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 144e89196f..02cdbc84f8 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -55,6 +55,7 @@ #include "llhttpretrypolicy.h" #include "llaisapi.h" // [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1) +#include "rlvactions.h" #include "rlvhandler.h" #include "rlvhelper.h" #include "rlvlocks.h" @@ -1874,6 +1875,13 @@ bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id) return false; } +// [RLVa:KB] - Checked: RLVa-2.0.3 + if ( (RlvActions::isRlvEnabled()) && (RlvFolderLocks::instance().isLockedFolder(outfit_cat_id, RLV_LOCK_ADD)) ) + { + return false; + } +// [/RLVa:KB] + LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); @@ -1894,6 +1902,14 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id) return false; } +// [RLVa:KB] - Checked: RLVa-2.0.3 + // Block "Replace Current Outfit" if the user can't wear the new folder + if ( (RlvActions::isRlvEnabled()) && (RlvFolderLocks::instance().isLockedFolder(outfit_cat_id, RLV_LOCK_ADD)) ) + { + return false; + } +// [/RLVa:KB] + // Check whether it's the base outfit. // if (outfit_cat_id.isNull() || outfit_cat_id == getBaseOutfitUUID()) // [SL:KB] - Patch: Appearance-Misc | Checked: 2010-09-21 (Catznip-2.1) @@ -2087,9 +2103,9 @@ void LLAppearanceMgr::updateCOF(LLInventoryModel::item_array_t& body_items_new, LLInventoryModel::item_array_t body_items; getDescendentsOfAssetType(cof, body_items, LLAssetType::AT_BODYPART); // getDescendentsOfAssetType(category, body_items, LLAssetType::AT_BODYPART); -// [RLVa:KB] - Checked: 2010-03-19 (RLVa-1.2.0) +// [RLVa:KB] - Checked: RLVa-2.0.3 // Filter out any new body parts that can't be worn before adding them - if ( (rlv_handler_t::isEnabled()) && (gRlvWearableLocks.hasLockedWearableType(RLV_LOCK_ANY)) ) + if ( (RlvActions::isRlvEnabled()) && ((gRlvWearableLocks.hasLockedWearableType(RLV_LOCK_ANY)) || (RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_ADD))) ) body_items_new.erase(std::remove_if(body_items_new.begin(), body_items_new.end(), RlvPredCanNotWearItem(RLV_WEAR_REPLACE)), body_items_new.end()); body_items.insert(body_items.end(), body_items_new.begin(), body_items_new.end()); // [/RLVa:KB] @@ -2115,9 +2131,9 @@ void LLAppearanceMgr::updateCOF(LLInventoryModel::item_array_t& body_items_new, } // [/RLVa:KB] // getDescendentsOfAssetType(category, wear_items, LLAssetType::AT_CLOTHING); -// [RLVa:KB] - Checked: 2010-03-19 (RLVa-1.2.0) +// [RLVa:KB] - Checked: RLVa-2.0.3 // Filter out any new wearables that can't be worn before adding them - if ( (rlv_handler_t::isEnabled()) && (gRlvWearableLocks.hasLockedWearableType(RLV_LOCK_ANY)) ) + if ( (RlvActions::isRlvEnabled()) && ((gRlvWearableLocks.hasLockedWearableType(RLV_LOCK_ANY)) || (RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_ADD))) ) wear_items_new.erase(std::remove_if(wear_items_new.begin(), wear_items_new.end(), RlvPredCanNotWearItem(RLV_WEAR)), wear_items_new.end()); wear_items.insert(wear_items.end(), wear_items_new.begin(), wear_items_new.end()); // [/RLVa:KB] @@ -2143,9 +2159,9 @@ void LLAppearanceMgr::updateCOF(LLInventoryModel::item_array_t& body_items_new, } // [/RLVa:KB] // getDescendentsOfAssetType(category, obj_items, LLAssetType::AT_OBJECT); -// [RLVa:KB] - Checked: 2010-03-05 (RLVa-1.2.0) +// [RLVa:KB] - Checked: RLVa-2.0.3 // Filter out any new attachments that can't be worn before adding them - if ( (rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) ) + if ( (RlvActions::isRlvEnabled()) && ((gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) || (RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_ADD))) ) obj_items_new.erase(std::remove_if(obj_items_new.begin(), obj_items_new.end(), RlvPredCanNotWearItem(RLV_WEAR)), obj_items_new.end()); obj_items.insert(obj_items.end(), obj_items_new.begin(), obj_items_new.end()); // [/RLVa:KB] diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index f6be12747c..45a7ef8f5c 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4118,6 +4118,13 @@ void LLFolderBridge::buildContextMenuFolderOptions(U32 flags, menuentry_vec_t& { disabled_items.push_back(std::string("Replace Outfit")); } +// [RLVa:KB] - Checked: RLVa-2.0.3 + // Block "Replace Current Outfit" if the user can't wear the new folder + if ( (RlvActions::isRlvEnabled()) && (RlvFolderLocks::instance().isLockedFolder(mUUID, RLV_LOCK_ADD)) ) + { + disabled_items.push_back(std::string("Replace Outfit")); + } +// [/RLVa:KB] if (!LLAppearanceMgr::instance().getCanAddToCOF(mUUID)) { disabled_items.push_back(std::string("Add To Outfit")); @@ -6185,6 +6192,11 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach { attachment = RlvAttachPtLookup::getAttachPoint(item); } + + if ( (RlvActions::isRlvEnabled()) && (!rlvPredCanWearItem(item, RLV_WEAR_REPLACE)) ) + { + return; + } // [/RLVa:KB] const LLUUID& item_id = item->getLinkedUUID(); From bb9affd554e34b7766968a2107179e39f59003ab Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 10 Jul 2016 17:45:30 +0200 Subject: [PATCH 013/124] [FIXED] @unsharedunwear=n doesn't block "Remove from Outfit" (if no attachment/wearable locks exist) -> see previous commit as well -> lookups ended up refreshing before the actual attachments were attached leaving them (from a user's perspective unpredictably) detachable --HG-- branch : RLVa --- indra/newview/llappearancemgr.cpp | 15 +++++++++++---- indra/newview/rlvlocks.cpp | 3 +++ indra/newview/rlvlocks.h | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 02cdbc84f8..35a545ed16 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1856,6 +1856,13 @@ bool LLAppearanceMgr::getCanRemoveFromCOF(const LLUUID& outfit_cat_id) { return false; } +// [RLVa:KB] - Checked: RLVa-2.0.3 + if ( (RlvActions::isRlvEnabled()) && (RlvFolderLocks::instance().isLockedFolder(outfit_cat_id, RLV_LOCK_REMOVE)) ) + { + return false; + } +// [/RLVa:KB] + LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; LLFindWearablesEx is_worn(/*is_worn=*/ true, /*include_body_parts=*/ false); @@ -2122,8 +2129,8 @@ void LLAppearanceMgr::updateCOF(LLInventoryModel::item_array_t& body_items_new, LLInventoryModel::item_array_t wear_items; if (append) getDescendentsOfAssetType(cof, wear_items, LLAssetType::AT_CLOTHING); -// [RLVa:KB] - Checked: 2010-03-19 (RLVa-1.2.0) - else if ( (rlv_handler_t::isEnabled()) && (gRlvWearableLocks.hasLockedWearableType(RLV_LOCK_ANY)) ) +// [RLVa:KB] - Checked: RLVa-2.0.3 + else if ( (RlvActions::isRlvEnabled()) && ((gRlvWearableLocks.hasLockedWearableType(RLV_LOCK_ANY)) || (RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_REMOVE))) ) { // Make sure that all currently locked clothing layers remain in COF when replacing getDescendentsOfAssetType(cof, wear_items, LLAssetType::AT_CLOTHING); @@ -2150,8 +2157,8 @@ void LLAppearanceMgr::updateCOF(LLInventoryModel::item_array_t& body_items_new, LLInventoryModel::item_array_t obj_items; if (append) getDescendentsOfAssetType(cof, obj_items, LLAssetType::AT_OBJECT); -// [RLVa:KB] - Checked: 2010-03-05 (RLVa-1.2.0z) | Modified: RLVa-1.2.0b - else if ( (rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) ) +// [RLVa:KB] - Checked: RLVa-2.0.3 + else if ( (RlvActions::isRlvEnabled()) && ((gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) || (RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_REMOVE))) ) { // Make sure that all currently locked attachments remain in COF when replacing getDescendentsOfAssetType(cof, obj_items, LLAssetType::AT_OBJECT); diff --git a/indra/newview/rlvlocks.cpp b/indra/newview/rlvlocks.cpp index 7d45af199c..f9ba91e049 100644 --- a/indra/newview/rlvlocks.cpp +++ b/indra/newview/rlvlocks.cpp @@ -964,6 +964,9 @@ void RlvFolderLocks::addFolderLock(const folderlock_source_t& lockSource, ELockP else if (RLV_LOCK_ADD == eLockType) m_cntLockAdd++; } + + if (!m_AttachmentChangeConnection.connected()) + m_AttachmentChangeConnection = gAgentAvatarp->setAttachmentCallback(boost::bind(&RlvFolderLocks::onNeedsLookupRefresh, this)); m_fLookupDirty = true; } diff --git a/indra/newview/rlvlocks.h b/indra/newview/rlvlocks.h index 0d57321068..3643845f91 100644 --- a/indra/newview/rlvlocks.h +++ b/indra/newview/rlvlocks.h @@ -367,6 +367,8 @@ public: const uuid_vec_t& getAttachmentLookups() { return m_LockedAttachmentRem; } const uuid_vec_t& getWearableLookups() { return m_LockedWearableRem; } protected: + boost::signals2::connection m_AttachmentChangeConnection; + // Map of folder locks (idRlvObj -> lockDescr) folderlock_list_t m_FolderLocks; // List of add and remove locked folder descriptions S32 m_cntLockAdd; // Number of RLV_LOCK_ADD locked folders in m_FolderLocks From d956fb60db79a04e21e082a2fcef85e57cfc22db Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 10 Jul 2016 22:39:06 +0200 Subject: [PATCH 014/124] [FIXED] Strict versions of restictions fail with "unknown command" -> additionally, revert to using the stored string behaviour otherwise @sendim_sec=n,getstatus=0 shows /sendim rather than /sendim_sec --HG-- branch : RLVa --- indra/newview/rlvhelper.cpp | 2 +- indra/newview/rlvhelper.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index 80929deceb..fde6a6e4bc 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -357,7 +357,7 @@ const RlvBehaviourInfo* RlvBehaviourDictionary::getBehaviourInfo(const std::stri if (pfStrict) *pfStrict = fStrict; - rlv_string2info_map_t::const_iterator itBhvr = m_String2InfoMap.find(std::make_pair(strBhvr, (eParamType & RLV_TYPE_ADDREM) ? RLV_TYPE_ADDREM : eParamType)); + rlv_string2info_map_t::const_iterator itBhvr = m_String2InfoMap.find(std::make_pair( (!fStrict) ? strBhvr : strBhvr.substr(0, strBhvr.size() - 4), (eParamType & RLV_TYPE_ADDREM) ? RLV_TYPE_ADDREM : eParamType)); return ( (itBhvr != m_String2InfoMap.end()) && ((!fStrict) || (itBhvr->second->hasStrict())) ) ? itBhvr->second : NULL; } diff --git a/indra/newview/rlvhelper.h b/indra/newview/rlvhelper.h index 72b157ec94..f9bb093bee 100644 --- a/indra/newview/rlvhelper.h +++ b/indra/newview/rlvhelper.h @@ -385,7 +385,7 @@ public: */ public: std::string asString() const; - const std::string& getBehaviour() const { return (m_pBhvrInfo) ? m_pBhvrInfo->getBehaviour() : m_strBehaviour; } + const std::string& getBehaviour() const { return m_strBehaviour; } ERlvBehaviour getBehaviourType() const { return (m_pBhvrInfo) ? m_pBhvrInfo->getBehaviourType() : RLV_BHVR_UNKNOWN; } U32 getBehaviourFlags() const{ return (m_pBhvrInfo) ? m_pBhvrInfo->getBehaviourFlags() : 0; } const LLUUID& getObjectID() const { return m_idObj; } From 822845e78f552071243eeb45a416fde85e8879f1 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Mon, 11 Jul 2016 02:07:44 +0200 Subject: [PATCH 015/124] [FIXED] Changes to camera FOV persist across relogs and don't reset/restore upon release --HG-- branch : RLVa --- indra/newview/rlvhandler.cpp | 40 ++++++++++++++++++++++++++++++++++++ indra/newview/rlvhelper.cpp | 6 +++--- indra/newview/rlvhelper.h | 1 + 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 6ad9e4c848..6ec5f73ddd 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -1771,6 +1771,38 @@ void RlvBehaviourModifierHandler::onValueChange } } +// Handles: @setcam_fovmin:=n|y and @setcam_fovmax:=n|y +template<> template<> +ERlvCmdRet RlvBehaviourSetCamFovHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) +{ + static float s_nLastCameraAngle = DEFAULT_FIELD_OF_VIEW; + + S32 nRefMinBhvr = gRlvHandler.m_Behaviours[RLV_BHVR_SETCAM_FOVMIN], nRefMaxBhvr = gRlvHandler.m_Behaviours[RLV_BHVR_SETCAM_FOVMAX]; + LLControlVariable* pSetting = gSavedSettings.getControl("CameraAngle"); + + // Save the user's current FOV angle if nothing's been restricted (yet) + if ( (!nRefMinBhvr) && (!nRefMaxBhvr) && (pSetting) ) + s_nLastCameraAngle = (pSetting->isPersisted()) ? LLViewerCamera::instance().getDefaultFOV() : DEFAULT_FIELD_OF_VIEW; + + // Perform default handling of the command + ERlvCmdRet eRet = RlvBehaviourGenericHandler::onCommand(rlvCmd, fRefCount); + if ( (RLV_RET_SUCCESS == eRet) && (fRefCount) && (pSetting) ) + { + if (RLV_TYPE_ADD == rlvCmd.getParamType()) + { + // Don't persist changes from this point + pSetting->setPersist(LLControlVariable::PERSIST_NO); + } + else if ( (RLV_TYPE_REMOVE == rlvCmd.getParamType()) && (1 == nRefMinBhvr + nRefMaxBhvr) ) + { + // Restore the user's last FOV angle (and resume persistance) + LLViewerCamera::instance().setDefaultFOV(s_nLastCameraAngle); + pSetting->setPersist(LLControlVariable::PERSIST_NONDFT); + } + } + return eRet; +} + // Handles: @setcam_fovmin:=n|y changes template<> void RlvBehaviourModifierHandler::onValueChange() const @@ -2354,6 +2386,14 @@ ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlv return RLV_RET_FAILED_OPTION; LLViewerCamera::getInstance()->setDefaultFOV(nFOV); + + // Don't persist non-default changes that are due to RLV; but do resume persistance once reset back to the default + if ( (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOVMIN)) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOVMAX)) ) + { + if (LLControlVariable* pSetting = gSavedSettings.getControl("CameraAngle")) + pSetting->setPersist( (pSetting->isDefault()) ? LLControlVariable::PERSIST_NONDFT : LLControlVariable::PERSIST_NO ); + } + return RLV_RET_SUCCESS; } diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index fde6a6e4bc..63c447e703 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -187,11 +187,11 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addModifier(RLV_BHVR_SETCAM_EYEOFFSET, RLV_MODIFIER_SETCAM_EYEOFFSET, new RlvBehaviourModifierHandler("Camera - Eye Offset", LLVector3::zero, true, nullptr)); addEntry(new RlvBehaviourGenericToggleProcessor("setcam_focusoffset", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addModifier(RLV_BHVR_SETCAM_FOCUSOFFSET, RLV_MODIFIER_SETCAM_FOCUSOFFSET, new RlvBehaviourModifierHandler("Camera - Focus Offset", LLVector3::zero, true, nullptr)); - addEntry(new RlvBehaviourGenericProcessor("setcam_fovmin", RLV_BHVR_SETCAM_FOVMIN)); + addEntry(new RlvBehaviourProcessor("setcam_fovmin")); addModifier(RLV_BHVR_SETCAM_FOVMIN, RLV_MODIFIER_SETCAM_FOVMIN, new RlvBehaviourModifierHandler("Camera - FOV (Min)", DEFAULT_FIELD_OF_VIEW, true, new RlvBehaviourModifier_CompMax)); - addEntry(new RlvBehaviourGenericProcessor("setcam_fovmax", RLV_BHVR_SETCAM_FOVMAX)); - addEntry(new RlvBehaviourGenericToggleProcessor("setcam_mouselook")); + addEntry(new RlvBehaviourProcessor("setcam_fovmax")); addModifier(RLV_BHVR_SETCAM_FOVMAX, RLV_MODIFIER_SETCAM_FOVMAX, new RlvBehaviourModifierHandler("Camera - FOV (Max)", DEFAULT_FIELD_OF_VIEW, true, new RlvBehaviourModifier_CompMin)); + addEntry(new RlvBehaviourGenericToggleProcessor("setcam_mouselook")); addEntry(new RlvBehaviourGenericProcessor("setcam_textures", RLV_BHVR_SETCAM_TEXTURES)); addModifier(RLV_BHVR_SETCAM_TEXTURES, RLV_MODIFIER_SETCAM_TEXTURE, new RlvBehaviourModifierHandler("Camera - Forced Texture", IMG_DEFAULT, true, nullptr)); addEntry(new RlvBehaviourGenericToggleProcessor("setcam_unlock")); diff --git a/indra/newview/rlvhelper.h b/indra/newview/rlvhelper.h index f9bb093bee..6f9dc3c722 100644 --- a/indra/newview/rlvhelper.h +++ b/indra/newview/rlvhelper.h @@ -174,6 +174,7 @@ typedef RlvBehaviourToggleHandler RlvBehaviourCamEyeF typedef RlvBehaviourHandler RlvBehaviourAddRemAttachHandler; // Shared between @addattach and @remattach typedef RlvBehaviourHandler RlvBehaviourSendChannelHandler; // Shared between @sendchannel and @sendchannel_except typedef RlvBehaviourHandler RlvBehaviourRecvSendStartIMHandler; // Shared between @recvim, @sendim and @startim +typedef RlvBehaviourHandler RlvBehaviourSetCamFovHandler; // Shared between @setcam_fovmin and @setcam_fovmax typedef RlvBehaviourToggleHandler RlvBehaviourShowSelfToggleHandler; // Shared between @showself and @showselfhead typedef RlvBehaviourHandler RlvBehaviourCamZoomMinMaxHandler; // Shared between @camzoommin and @camzoommax (deprecated) typedef RlvReplyHandler RlvReplyCamMinMaxModifierHandler; // Shared between @getcam_avdistmin and @getcam_avdistmax From 5a08ecf073ad39b5725c6885267388fb67f078d9 Mon Sep 17 00:00:00 2001 From: Nicky Date: Mon, 11 Jul 2016 18:50:08 +0200 Subject: [PATCH 016/124] Use llisnan rather than isnan. --- indra/newview/llagentcamera.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index a6b4c6cd92..71860effe2 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2081,7 +2081,7 @@ bool LLAgentCamera::clampCameraPosition(LLVector3d& posCamGlobal, const LLVector m_fRlvMinDist = true; } - if (!isnan(nDistMult)) + if (!llisnan(nDistMult)) { posCamGlobal = posCamRefGlobal + nDistMult * offsetCamera; m_posRlvRefGlobal = posCamRefGlobal; From 5e785acff17b544a9aaec382642b823a074a2090 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 12 Jul 2016 00:20:54 +0200 Subject: [PATCH 017/124] Integrate with fsdata --- indra/newview/fsdata.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/indra/newview/fsdata.cpp b/indra/newview/fsdata.cpp index db0a7d033a..7a24c7225a 100644 --- a/indra/newview/fsdata.cpp +++ b/indra/newview/fsdata.cpp @@ -56,6 +56,11 @@ #include "llvfs.h" #include "message.h" +// [RLVa:KB] +#include "rlvactions.h" +#include "rlvhelper.h" +// [/RLVa:KB] + const std::string LEGACY_CLIENT_LIST_URL = "http://phoenixviewer.com/app/client_tags/client_list_v2.xml"; const LLUUID MAGIC_ID("3c115e51-04f4-523c-9fa6-98aff1034730"); const F32 HTTP_TIMEOUT = 30.f; @@ -443,6 +448,13 @@ void FSData::processData(const LLSD& fs_data) { updateClientTagsLocal(); } + +// [RLVa:KB] + if ( (RlvActions::isRlvEnabled()) && (fs_data.has("rlva_compat_list")) ) + { + RlvSettings::initCompatibilityMode(fs_data["rlva_compat_list"].asString()); + } +// [/RLVa:KB] } void FSData::processAssets(const LLSD& assets) From 10db95b8b31b2169770d8cdc1734bf24e1d49947 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 12 Jul 2016 00:26:13 +0200 Subject: [PATCH 018/124] Attempted viewer-side workaround for FIRE-9792 is doing more harm than good, revisit another time --- indra/newview/llviewerjointattachment.cpp | 8 +- indra/newview/llviewermessage.cpp | 10 +-- indra/newview/llvoavatarself.cpp | 102 +++++++++++----------- 3 files changed, 60 insertions(+), 60 deletions(-) diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp index 22f1123be6..f34b705c86 100644 --- a/indra/newview/llviewerjointattachment.cpp +++ b/indra/newview/llviewerjointattachment.cpp @@ -174,10 +174,10 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object) { LL_INFOS() << "(same object re-attached)" << LL_ENDL; // [SL:KB] - Patch: Appearance-TeleportAttachKill | Checked: Catznip-4.0 - if ( (object->permYouOwner()) && (gAgentAvatarp) ) - { - gAgentAvatarp->removePendingDetach(object->getID()); - } +// if ( (object->permYouOwner()) && (gAgentAvatarp) ) +// { +// gAgentAvatarp->removePendingDetach(object->getID()); +// } // [/SL:KB] removeObject(object); // Pass through anyway to let setupDrawable() diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 095f18c28a..3ce681d5a5 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5966,11 +5966,11 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data) if (objectp) { // [SL:KB] - Patch: Appearance-TeleportAttachKill | Checked: Catznip-4.0 - if ( (objectp->isAttachment()) && (gAgentAvatarp) && (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE) && (objectp->permYouOwner()) ) - { - gAgentAvatarp->addPendingDetach(objectp->getRootEdit()->getID()); - continue; - } +// if ( (objectp->isAttachment()) && (gAgentAvatarp) && (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE) && (objectp->permYouOwner()) ) +// { +// gAgentAvatarp->addPendingDetach(objectp->getRootEdit()->getID()); +// continue; +// } // [/SL:KB] // Display green bubble on kill diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 2123440e58..a688646ab2 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -3288,57 +3288,57 @@ void LLVOAvatarSelf::dumpWearableInfo(LLAPRFile& outfile) } // [SL:KB] - Patch: Appearance-TeleportAttachKill | Checked: Catznip-4.0 -void LLVOAvatarSelf::addPendingDetach(const LLUUID& idObject) -{ - if (mPendingObjectDetach.end() == std::find(mPendingObjectDetach.begin(), mPendingObjectDetach.end(), idObject)) - mPendingObjectDetach.push_back(idObject); - - if ((!mPendingObjectDetach.empty()) && (!mTeleportDoneConn.connected())) - mTeleportDoneConn = LLViewerParcelMgr::instance().setTeleportDoneCallback(boost::bind(&LLVOAvatarSelf::onTeleportDone, this)); -} - -bool LLVOAvatarSelf::isPendingDetach(const LLUUID& idObject) const -{ - return mPendingObjectDetach.end() != std::find(mPendingObjectDetach.begin(), mPendingObjectDetach.end(), idObject); -} - -void LLVOAvatarSelf::removePendingDetach(const LLUUID& idObject) -{ - auto itPendingDetach = std::find(mPendingObjectDetach.begin(), mPendingObjectDetach.end(), idObject); - if (mPendingObjectDetach.end() != itPendingDetach) - mPendingObjectDetach.erase(itPendingDetach); - - if (mPendingObjectDetach.empty()) - mTeleportDoneConn.disconnect(); -} - -void LLVOAvatarSelf::onTeleportDone() -{ - mTeleportDoneConn.disconnect(); - doAfterInterval(boost::bind(&LLVOAvatarSelf::checkPendingDetach, this), 30.f); -} - -void LLVOAvatarSelf::checkPendingDetach() -{ - if (gTeleportDisplay) - return; - - for (const LLUUID& idObj : mPendingObjectDetach) - { - LLViewerObject* pObject = gObjectList.findObject(idObj); - if (pObject) - { - gObjectList.killObject(pObject); - if (gShowObjectUpdates) - { - LLColor4 color(0.f, 1.f, 0.f, 1.f); - gPipeline.addDebugBlip(pObject->getPositionAgent(), color); - } - LLSelectMgr::getInstance()->removeObjectFromSelections(idObj); - } - } - mPendingObjectDetach.clear(); -} +//void LLVOAvatarSelf::addPendingDetach(const LLUUID& idObject) +//{ +// if (mPendingObjectDetach.end() == std::find(mPendingObjectDetach.begin(), mPendingObjectDetach.end(), idObject)) +// mPendingObjectDetach.push_back(idObject); +// +// if ((!mPendingObjectDetach.empty()) && (!mTeleportDoneConn.connected())) +// mTeleportDoneConn = LLViewerParcelMgr::instance().setTeleportDoneCallback(boost::bind(&LLVOAvatarSelf::onTeleportDone, this)); +//} +// +//bool LLVOAvatarSelf::isPendingDetach(const LLUUID& idObject) const +//{ +// return mPendingObjectDetach.end() != std::find(mPendingObjectDetach.begin(), mPendingObjectDetach.end(), idObject); +//} +// +//void LLVOAvatarSelf::removePendingDetach(const LLUUID& idObject) +//{ +// auto itPendingDetach = std::find(mPendingObjectDetach.begin(), mPendingObjectDetach.end(), idObject); +// if (mPendingObjectDetach.end() != itPendingDetach) +// mPendingObjectDetach.erase(itPendingDetach); +// +// if (mPendingObjectDetach.empty()) +// mTeleportDoneConn.disconnect(); +//} +// +//void LLVOAvatarSelf::onTeleportDone() +//{ +// mTeleportDoneConn.disconnect(); +// doAfterInterval(boost::bind(&LLVOAvatarSelf::checkPendingDetach, this), 30.f); +//} +// +//void LLVOAvatarSelf::checkPendingDetach() +//{ +// if (gTeleportDisplay) +// return; +// +// for (const LLUUID& idObj : mPendingObjectDetach) +// { +// LLViewerObject* pObject = gObjectList.findObject(idObj); +// if (pObject) +// { +// gObjectList.killObject(pObject); +// if (gShowObjectUpdates) +// { +// LLColor4 color(0.f, 1.f, 0.f, 1.f); +// gPipeline.addDebugBlip(pObject->getPositionAgent(), color); +// } +// LLSelectMgr::getInstance()->removeObjectFromSelections(idObj); +// } +// } +// mPendingObjectDetach.clear(); +//} // [/SL:KB] // [RLVa:KB] - Checked: 2013-03-03 (RLVa-1.4.8) From b99bbb72e6166edf6bb9730fb210ef44c29506e4 Mon Sep 17 00:00:00 2001 From: Nicky Date: Tue, 12 Jul 2016 00:41:18 +0200 Subject: [PATCH 019/124] Make GCC happy. --- indra/newview/rlvhandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 0e9bbb42f4..a0a7fcc615 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -502,7 +502,8 @@ bool RlvHandler::handleEvent(LLPointer event, const LLSD& if (!s_fGroupChanging) { - RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_GROUPCHANGE, LLSD().with("GROUP_SLURL", (m_idAgentGroup.notNull()) ? llformat("secondlife:///app/group/%s/about", m_idAgentGroup.asString()) : "(none)")); + RlvUtil::notifyBlocked( RLV_STRING_BLOCKED_GROUPCHANGE, + LLSD().with( "GROUP_SLURL", (m_idAgentGroup.notNull()) ? llformat("secondlife:///app/group/%s/about", m_idAgentGroup.asString().c_str()) : "(none)")); // [Copy/paste from LLGroupActions::activate()] LLMessageSystem* msg = gMessageSystem; From 226c2d6d36a6203d2e8f8f383f3952bbd4980853 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 12 Jul 2016 09:08:20 +0200 Subject: [PATCH 020/124] Translation fix --- indra/newview/rlvhandler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index a0a7fcc615..cf1a7c452c 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -22,6 +22,7 @@ #include "llgroupactions.h" #include "llhudtext.h" #include "llmoveview.h" +#include "llslurl.h" #include "llstartup.h" #include "llviewermessage.h" #include "llviewermenu.h" @@ -502,8 +503,8 @@ bool RlvHandler::handleEvent(LLPointer event, const LLSD& if (!s_fGroupChanging) { - RlvUtil::notifyBlocked( RLV_STRING_BLOCKED_GROUPCHANGE, - LLSD().with( "GROUP_SLURL", (m_idAgentGroup.notNull()) ? llformat("secondlife:///app/group/%s/about", m_idAgentGroup.asString().c_str()) : "(none)")); + RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_GROUPCHANGE, + LLSD().with("GROUP_SLURL", (m_idAgentGroup.notNull()) ? LLSLURL("group", m_idAgentGroup, "about").getSLURLString() : LLTrans::getString("GroupNameNone"))); // [Copy/paste from LLGroupActions::activate()] LLMessageSystem* msg = gMessageSystem; From a32dc670309eb6feed00b34508cb4f573a838e14 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 12 Jul 2016 09:15:09 +0200 Subject: [PATCH 021/124] Update German translation --- indra/newview/skins/default/xui/de/menu_viewer.xml | 1 + indra/newview/skins/default/xui/de/rlva_strings.xml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index 1b4e42025f..d3cbc5aec0 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -250,6 +250,7 @@ + diff --git a/indra/newview/skins/default/xui/de/rlva_strings.xml b/indra/newview/skins/default/xui/de/rlva_strings.xml index 0040854004..9297552d02 100644 --- a/indra/newview/skins/default/xui/de/rlva_strings.xml +++ b/indra/newview/skins/default/xui/de/rlva_strings.xml @@ -56,6 +56,11 @@ value Aktion konnte aufgrund von RLV-Einschränkungen nicht durchgeführt werden. + blocked_groupchange + + value + Die aktive Gruppe kann aufgrund von RLV-Einschränkungen nicht geändert werden. Setze zurück auf „[GROUP_SLURL]“. + blocked_permattach value From 1d792f735708bfd3a147155ddfbca70c605f2956 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Tue, 12 Jul 2016 09:21:37 +0200 Subject: [PATCH 022/124] Updated Polish translation --- indra/newview/skins/default/xui/pl/menu_viewer.xml | 1 + indra/newview/skins/default/xui/pl/rlva_strings.xml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml index b2eb04735d..3be83d4c2e 100644 --- a/indra/newview/skins/default/xui/pl/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml @@ -260,6 +260,7 @@ + diff --git a/indra/newview/skins/default/xui/pl/rlva_strings.xml b/indra/newview/skins/default/xui/pl/rlva_strings.xml index 589e033949..315c9b1872 100644 --- a/indra/newview/skins/default/xui/pl/rlva_strings.xml +++ b/indra/newview/skins/default/xui/pl/rlva_strings.xml @@ -50,6 +50,11 @@ value Nie można tego zrobić ze względu na ograniczenia RLV + blocked_groupchange + + value + Nie można zmienić aktywnej grupy ze względu na ograniczenia RLV; Zmieniam z powrotem na [GROUP_SLURL] + blocked_permattach value From 272f4c32256324634046256dbfd15ce675ae5408 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 12 Jul 2016 10:05:17 +0200 Subject: [PATCH 023/124] FIRE-19580: Add "Firestorm" to Flickr tags by default (and don't assume we're in SL all the time!) --- indra/newview/llfloaterflickr.cpp | 41 +++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp index 6ea62ccad4..5fcb360937 100644 --- a/indra/newview/llfloaterflickr.cpp +++ b/indra/newview/llfloaterflickr.cpp @@ -54,6 +54,7 @@ #include #include "llspinctrl.h" +#include "llviewernetwork.h" #include "llnotificationsutil.h" #ifdef OPENSIM #include "exoflickr.h" @@ -66,8 +67,12 @@ static LLPanelInjector t_panel_photo("llflickrphotopanel"); static LLPanelInjector t_panel_account("llflickraccountpanel"); const std::string DEFAULT_PHOTO_QUERY_PARAMETERS = "?sourceid=slshare_photo&utm_source=flickr&utm_medium=photo&utm_campaign=slshare"; -const std::string DEFAULT_TAG_TEXT = "secondlife "; -const std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife"; +// Don't assume we're always in Second Life +//const std::string DEFAULT_TAG_TEXT = "secondlife "; +//const std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife"; +const std::string DEFAULT_TAG_TEXT = "Firestorm "; +static std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife"; +// /////////////////////////// //LLFlickrPhotoPanel/////// @@ -122,7 +127,10 @@ BOOL LLFlickrPhotoPanel::postBuild() mDescriptionTextBox = getChild("photo_description"); mLocationCheckbox = getChild("add_location_cb"); mTagsTextBox = getChild("photo_tags"); - mTagsTextBox->setValue(DEFAULT_TAG_TEXT); + // Don't assume we're always in Second Life + //mTagsTextBox->setValue(DEFAULT_TAG_TEXT); + mTagsTextBox->setValue(DEFAULT_TAG_TEXT + (LLGridManager::instance().isInSecondLife() ? "secondlife" : ("\"" + LLGridManager::instance().getGridId()) + "\"") + " "); + // mRatingComboBox = getChild("rating_combobox"); mPostButton = getChild("post_photo_btn"); mCancelButton = getChild("cancel_photo_btn"); @@ -391,7 +399,13 @@ void LLFlickrPhotoPanel::sendPhoto() std::string slurl_string = slurl.getSLURLString(); // Add query parameters so Google Analytics can track incoming clicks! - slurl_string += DEFAULT_PHOTO_QUERY_PARAMETERS; + // Don't assume we're always in Second Life + //slurl_string += DEFAULT_PHOTO_QUERY_PARAMETERS; + if (LLGridManager::instance().isInSecondLife()) + { + slurl_string += DEFAULT_PHOTO_QUERY_PARAMETERS; + } + // std::string photo_link_text = "Visit this location";// at [] in Second Life"; std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName(); @@ -404,7 +418,17 @@ void LLFlickrPhotoPanel::sendPhoto() photo_link_text += " at " + parcel_name; } } - photo_link_text += " in Second Life"; + // Don't assume we're always in Second Life + //photo_link_text += " in Second Life"; + if (LLGridManager::instance().isInSecondLife()) + { + photo_link_text += " in Second Life"; + } + else + { + photo_link_text += " in \"" + LLGridManager::instance().getGridLabel() + "\""; + } + // slurl_string = "" + photo_link_text + ""; @@ -427,6 +451,13 @@ void LLFlickrPhotoPanel::sendPhoto() std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName(); std::string region_name = region->getName(); + // Don't assume we're always in Second Life + if (!LLGridManager::instance().isInSecondLife()) + { + FLICKR_MACHINE_TAGS_NAMESPACE = LLGridManager::instance().getGridId(); + } + // + if (!region_name.empty()) { tags += llformat(" \"%s:region=%s\"", FLICKR_MACHINE_TAGS_NAMESPACE.c_str(), region_name.c_str()); From 03d2bd9a51eb0ee8ec9f3e3678f7253504808495 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 12 Jul 2016 10:07:54 +0200 Subject: [PATCH 024/124] FIRE-19614: Add CTRL-O as hotkey for appearance window --- indra/newview/skins/default/xui/en/menu_viewer.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 718ca45d5b..898799bd10 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -92,6 +92,7 @@ From bd683aba8a1e7df7420e041e13e02aee82e154b2 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 12 Jul 2016 11:32:26 +0200 Subject: [PATCH 025/124] FIRE-19632: Delay slider for tooltips falsely gets disabled if "Show Hover Tips" gets disabled --- indra/newview/skins/default/xui/en/panel_preferences_UI.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml index efb401262d..dcfdee66aa 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml @@ -111,7 +111,6 @@ Date: Tue, 12 Jul 2016 19:14:01 +0200 Subject: [PATCH 026/124] Improve some texture limit calculations --- indra/newview/llappviewer.cpp | 20 +++++++++++++++++++ indra/newview/llfloaterpreference.cpp | 3 --- indra/newview/llviewertexture.cpp | 6 +----- indra/newview/llviewertexture.h | 5 ++++- .../xui/en/panel_preferences_graphics1.xml | 2 +- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 6b22b0dd96..baea084955 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1158,6 +1158,26 @@ bool LLAppViewer::init() // Early out from user choice. return false; } + + // Texture memory management + // On 64bit builds, allow up to 1GB texture memory on cards with 2GB video + // memory and up to 2GB texture memory on cards with 4GB video memory. Check + // is performed against a lower limit as not exactly 2 or 4GB might not be + // returned. +#ifdef ND_BUILD64BIT_ARCH + if (gGLManager.mVRAM > 3584) + { + gMaxVideoRam = S32Megabytes(2048); + LL_INFOS() << "At least 4 GB video memory detected - increasing max video ram to " << gMaxVideoRam.value() << " MB" << LL_ENDL; + } + else if (gGLManager.mVRAM > 1536) + { + gMaxVideoRam = S32Megabytes(1024); + LL_INFOS() << "At least 2 GB video memory detected - increasing max video ram to " << gMaxVideoRam.value() << " MB" << LL_ENDL; + } +#endif + // + LL_INFOS("InitInfo") << "Hardware test initialization done." << LL_ENDL ; // Prepare for out-of-memory situations, during which we will crash on diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 972db9a531..46dcbedfac 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -4024,9 +4024,6 @@ BOOL LLPanelPreferenceGraphics::postBuild() #endif // LL_DARWIN // - // Texture memory management - getChild("GraphicsCardTextureMemory")->setMaxValue((F32)gMaxVideoRam.value()); - return LLPanelPreference::postBuild(); } void LLPanelPreferenceGraphics::draw() diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 6b60879548..388d355ffc 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -68,11 +68,7 @@ const S32Megabytes gMinVideoRam(32); // Texture memory management //const S32Megabytes gMaxVideoRam(512); -#ifdef ND_BUILD64BIT_ARCH -const S32Megabytes gMaxVideoRam(1024); -#else -const S32Megabytes gMaxVideoRam(512); -#endif +S32Megabytes gMaxVideoRam(512); // diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 04afa120e4..8de0f82233 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -40,7 +40,10 @@ #include extern const S32Megabytes gMinVideoRam; -extern const S32Megabytes gMaxVideoRam; +// Texture memory management +//extern const S32Megabytes gMaxVideoRam; +extern S32Megabytes gMaxVideoRam; +// class LLFace; class LLImageGL ; diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index ed7af62c38..ee037bf718 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -1040,7 +1040,7 @@ layout="topleft" left="10" min_val="64" - max_val="1024" + max_val="2048" name="GraphicsCardTextureMemory" tool_tip="Amount of memory to allocate for textures. Defaults to video card memory up to 512M. Reducing this may improve performance but may also make textures blurry. Increasing this value beyond 512M is not recommended. Even if your graphics cards supports it, the main memory impact on the viewer is likely to lead to a degraded SL experience." top_pad="10" From f728155f895f048bc843c94ffeb9166760be1fdb Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 12 Jul 2016 19:33:27 +0200 Subject: [PATCH 027/124] Add another step for 1GB cards... --- indra/newview/llappviewer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index baea084955..4c600662a3 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1175,6 +1175,11 @@ bool LLAppViewer::init() gMaxVideoRam = S32Megabytes(1024); LL_INFOS() << "At least 2 GB video memory detected - increasing max video ram to " << gMaxVideoRam.value() << " MB" << LL_ENDL; } + else if (gGLManager.mVRAM > 768) + { + gMaxVideoRam = S32Megabytes(768); + LL_INFOS() << "At least 1 GB video memory detected - increasing max video ram to " << gMaxVideoRam.value() << " MB" << LL_ENDL; + } #endif // From a9ed782bcadc2ce890dc784caf25dfb2a62da5c3 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 13 Jul 2016 15:55:32 +0200 Subject: [PATCH 028/124] FIRE-19641: Legacy classifieds search always returns results for "ALL" categories --- indra/newview/fsfloatersearch.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/fsfloatersearch.cpp b/indra/newview/fsfloatersearch.cpp index 9d06a5c81a..8804edbe4a 100644 --- a/indra/newview/fsfloatersearch.cpp +++ b/indra/newview/fsfloatersearch.cpp @@ -1968,13 +1968,13 @@ BOOL FSPanelSearchClassifieds::postBuild() if (mClassifiedsCategory) { LLClassifiedInfo::cat_map::iterator iter; - mClassifiedsCategory->add(LLTrans::getString("all_categories"), LLSD("any")); + mClassifiedsCategory->add(LLTrans::getString("all_categories"), LLSD(0)); mClassifiedsCategory->addSeparator(); for (iter = LLClassifiedInfo::sCategories.begin(); iter != LLClassifiedInfo::sCategories.end(); iter++) { - mClassifiedsCategory->add(LLTrans::getString(iter->second)); + mClassifiedsCategory->add(LLTrans::getString(iter->second), LLSD((S32)iter->first)); } } childSetAction("classifieds_next", boost::bind(&FSPanelSearchClassifieds::onBtnNext, this)); @@ -2008,7 +2008,7 @@ void FSPanelSearchClassifieds::find() LLNotificationsUtil::add("NoContentToSearch"); return; } - U32 category = childGetValue("classifieds_category").asInteger(); + U32 category = mClassifiedsCategory->getValue().asInteger(); BOOL auto_renew = FALSE; U32 flags = pack_classified_flags_request(auto_renew, inc_pg, inc_mature, inc_adult); From 6c4f08d065f88470be190ac1d41a78287a42b88f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 13 Jul 2016 15:56:40 +0200 Subject: [PATCH 029/124] Remove log spam about unknown sim stat identifier completely --- indra/newview/llviewermessage.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 3ce681d5a5..51c14072ee 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -6370,8 +6370,6 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data) { // Cut down logspam //LL_WARNS() << "Unknown sim stat identifier: " << stat_id << LL_ENDL; - LL_WARNS_ONCE() << "Unknown sim stat identifier: " << stat_id << LL_ENDL; - // } } From ce1310419b84b91f6638159f15d381ce8dbe88cc Mon Sep 17 00:00:00 2001 From: Tonya Souther Date: Wed, 13 Jul 2016 09:26:20 -0500 Subject: [PATCH 030/124] FIRE-19612: Update SLPlugin to sync with the latest viewer code. --- autobuild.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 6170fb62e6..ae4bd5f639 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -27,9 +27,9 @@ archive hash - e54568cfa7bced82cb6eae26471b7fa5 + 68bf8ef0e36e52a995fbe5a4889d5065 url - http://downloads.phoenixviewer.com/slplugin_x86-4.7.8.50261-darwin-201606211711-r3.tar.bz2 + http://downloads.phoenixviewer.com/slplugin_x86-4.7.8.50451-darwin-201607130911-r5.tar.bz2 name windows From 9edc0870d7057d9f856570c7c3c5592a88a23033 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 12 Jul 2016 21:37:45 +0300 Subject: [PATCH 031/124] MAINT-6460 Crash calculating mesh complexity --- indra/newview/llmeshrepository.cpp | 13 ++++++------- indra/newview/llmeshrepository.h | 4 ++-- indra/newview/llvovolume.cpp | 5 +++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 88e93bb796..9f19b342b5 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -3945,8 +3945,8 @@ void LLMeshRepository::buildHull(const LLVolumeParams& params, S32 detail) bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id) { - LLSD mesh = mThread->getMeshHeader(mesh_id); - if (mesh.has("physics_mesh") && mesh["physics_mesh"].has("size") && (mesh["physics_mesh"]["size"].asInteger() > 0)) + const LLSD* mesh = mThread->getMeshHeader(mesh_id); + if (mesh && mesh->has("physics_mesh") && (*mesh)["physics_mesh"].has("size") && ((*mesh)["physics_mesh"]["size"].asInteger() > 0)) { return true; } @@ -3960,27 +3960,26 @@ bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id) return false; } -LLSD& LLMeshRepository::getMeshHeader(const LLUUID& mesh_id) +const LLSD* LLMeshRepository::getMeshHeader(const LLUUID& mesh_id) { LL_RECORD_BLOCK_TIME(FTM_MESH_FETCH); return mThread->getMeshHeader(mesh_id); } -LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id) +const LLSD* LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id) { - static LLSD dummy_ret; if (mesh_id.notNull()) { LLMutexLock lock(mHeaderMutex); mesh_header_map::iterator iter = mMeshHeader.find(mesh_id); if (iter != mMeshHeader.end()) { - return iter->second; + return &(iter->second); } } - return dummy_ret; + return NULL; } diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 9f07afb2ea..e38b984846 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -307,7 +307,7 @@ public: bool skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size); bool decompositionReceived(const LLUUID& mesh_id, U8* data, S32 data_size); bool physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32 data_size); - LLSD& getMeshHeader(const LLUUID& mesh_id); + const LLSD* getMeshHeader(const LLUUID& mesh_id); void notifyLoadedMeshes(); S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod); @@ -508,7 +508,7 @@ public: bool meshRezEnabled(); - LLSD& getMeshHeader(const LLUUID& mesh_id); + const LLSD* getMeshHeader(const LLUUID& mesh_id); void uploadModel(std::vector& data, LLVector3& scale, bool upload_textures, bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true, diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 2f6aefb2be..baf0205f84 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3689,8 +3689,9 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v F32 radius = getScale().length()*0.5f; if (isMesh()) - { - LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID()); + { + const LLSD* header_ptr = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID()); + LLSD header = header_ptr ? *header_ptr : LLSD(); return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD, unscaled_value); } From 67e4c672c78df8d5d4c8dbd065b5665a75fde22b Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 13 Jul 2016 19:35:27 +0200 Subject: [PATCH 032/124] Build fix --- indra/newview/fsexportperms.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/newview/fsexportperms.cpp b/indra/newview/fsexportperms.cpp index e0c14ebc77..7d01350f09 100644 --- a/indra/newview/fsexportperms.cpp +++ b/indra/newview/fsexportperms.cpp @@ -99,8 +99,15 @@ bool FSExportPermsCheck::canExportNode(LLSelectNode* node, bool dae) { if (dae) { - LLSD mesh_header = gMeshRepo.getMeshHeader(sculpt_params->getSculptTexture()); - exportable = mesh_header["creator"].asUUID() == gAgentID; + const LLSD* mesh_header_ptr = gMeshRepo.getMeshHeader(sculpt_params->getSculptTexture()); + if (mesh_header_ptr) + { + exportable = (*mesh_header_ptr)["creator"].asUUID() == gAgentID; + } + else + { + exportable = false; + } } else { From 7ad748db022c2296d8b3f8f69d462bd8ff2530c4 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 14 Jul 2016 09:47:07 +0200 Subject: [PATCH 033/124] FIRE-19556: Possible Linux voice fix Apparently, the old Vivox SDK on Linux doesn't pass through the randomly created connector and account handles we pass in during connector creation and login. So for Linux, we do it the old way of not passing them in to Vivox but use the handles we receive. --- indra/newview/llvoicevivox.cpp | 21 +++++++++++++++++++++ indra/newview/llvoicevivox.h | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 84946ce5a3..a3bd2fe332 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -431,7 +431,9 @@ void LLVivoxVoiceClient::connectorCreate() << "V2 SDK" << "" << mVoiceAccountServerURI << "" << "Normal" +#ifndef LL_LINUX // FIRE-19556: Linux voice fix << "" << LLVivoxSecurity::getInstance()->connectorHandle() << "" +#endif // // Voice in multiple instances; by Latif Khalifa << (gSavedSettings.getBOOL("VoiceMultiInstance") ? "3000050000" : "") // @@ -708,6 +710,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() params.cwd = gDirUtilp->getAppRODataDir(); +#ifndef LL_LINUX // FIRE-19556: Linux voice fix # ifdef VIVOX_HANDLE_ARGS params.args.add("-ah"); params.args.add(LLVivoxSecurity::getInstance()->accountHandle()); @@ -715,6 +718,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() params.args.add("-ch"); params.args.add(LLVivoxSecurity::getInstance()->connectorHandle()); # endif // VIVOX_HANDLE_ARGS +#endif // sGatewayPtr = LLProcess::create(params); @@ -1883,7 +1887,9 @@ void LLVivoxVoiceClient::loginSendMessage() << "" << LLVivoxSecurity::getInstance()->connectorHandle() << "" << "" << mAccountName << "" << "" << mAccountPassword << "" +#ifndef LL_LINUX // FIRE-19556: Linux voice fix << "" << LLVivoxSecurity::getInstance()->accountHandle() << "" +#endif // << "VerifyAnswer" << "false" << "0" @@ -2904,6 +2910,7 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st else { // Connector created, move forward. +#ifndef LL_LINUX // FIRE-19556: Linux voice fix if (connectorHandle == LLVivoxSecurity::getInstance()->connectorHandle()) { LL_INFOS("Voice") << "Connector.Create succeeded, Vivox SDK version is " << versionID << " connector handle " << connectorHandle << LL_ENDL; @@ -2921,6 +2928,17 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st << LL_ENDL; result["connector"] = LLSD::Boolean(false); } + // FIRE-19556: Linux voice fix +#else + LL_INFOS("Voice") << "Connector.Create succeeded, Vivox SDK version is " << versionID << LL_ENDL; + mVoiceVersion.serverVersion = versionID; + LLVivoxSecurity::getInstance()->setConnectorHandle(connectorHandle); + mConnectorEstablished = true; + mTerminateDaemon = false; + + result["connector"] = LLSD::Boolean(true); +#endif + // } LLEventPumps::instance().post("vivoxClientPump", result); @@ -2948,6 +2966,9 @@ void LLVivoxVoiceClient::loginResponse(int statusCode, std::string &statusString else { // Login succeeded, move forward. +#ifdef LL_LINUX // FIRE-19556: Linux voice fix + LLVivoxSecurity::getInstance()->setConnectorHandle(accountHandle); +#endif // mAccountLoggedIn = true; mNumberOfAliases = numberOfAliases; result["login"] = LLSD::String("response_ok"); diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h index b54288e32a..6dc0a1a75a 100644 --- a/indra/newview/llvoicevivox.h +++ b/indra/newview/llvoicevivox.h @@ -1050,6 +1050,13 @@ class LLVivoxSecurity : public LLSingleton std::string connectorHandle() { return mConnectorHandle; }; std::string accountHandle() { return mAccountHandle; }; +// FIRE-19556: Linux voice fix +#ifdef LL_LINUX + void setConnectorHandle(const std::string& handle) { mConnectorHandle = handle; } + void setAccountHandle(const std::string& handle) { mAccountHandle = handle; } +#endif +// + private: std::string mConnectorHandle; std::string mAccountHandle; From 60a3e45c3a3713b919b113d3884ad27884fc6941 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 14 Jul 2016 09:48:48 +0200 Subject: [PATCH 034/124] FIRE-19556: Copy&paste error... --- indra/newview/llvoicevivox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index a3bd2fe332..11b2979b2f 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -2967,7 +2967,7 @@ void LLVivoxVoiceClient::loginResponse(int statusCode, std::string &statusString { // Login succeeded, move forward. #ifdef LL_LINUX // FIRE-19556: Linux voice fix - LLVivoxSecurity::getInstance()->setConnectorHandle(accountHandle); + LLVivoxSecurity::getInstance()->setAccountHandle(accountHandle); #endif // mAccountLoggedIn = true; mNumberOfAliases = numberOfAliases; From 657c89988dd6fff287fc478ad06900910429f5ee Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 14 Jul 2016 10:19:02 +0200 Subject: [PATCH 035/124] More voice copy&paste fixing coming from LL's side --- indra/newview/llvoicevivox.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 11b2979b2f..ab691ba80d 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -453,7 +453,10 @@ void LLVivoxVoiceClient::connectorCreate() void LLVivoxVoiceClient::connectorShutdown() { - if(!mConnectorEstablished) + // Voice fix + //if(!mConnectorEstablished) + if(mConnectorEstablished) + // { std::ostringstream stream; stream From eade2338e35a6a9ecb438a305334b561c6fe9b43 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 14 Jul 2016 17:45:32 +0200 Subject: [PATCH 036/124] Manually applying more fixes for MAINT-6460 Crash calculating mesh complexity --- indra/newview/llmeshrepository.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 9f19b342b5..b5e676baf0 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -4072,6 +4072,13 @@ void LLMeshRepository::uploadError(LLSD& args) //static F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value) { + if (header.has("404") + || !header.has("lowest_lod") + || (header.has("version") && header["version"].asInteger() > MAX_MESH_VERSION)) + { + return 0.f; + } + F32 max_distance = 512.f; F32 dlowest = llmin(radius/0.03f, max_distance); From 97b421ad7f40041dac9547bbe01ac958ef23c3f0 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 17 Jul 2016 23:58:08 +0200 Subject: [PATCH 037/124] Fix wrong UI control type --- indra/newview/llstatusbar.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 7a5668b28d..517b7a62c2 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -790,8 +790,11 @@ void LLStatusBar::onClickBuyCurrency() void LLStatusBar::onMouseEnterPresets() { LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder"); - LLIconCtrl* icon = getChild( "presets_icon" ); - LLRect icon_rect = icon->getRect(); + // Changed presets icon to LLButton + //LLIconCtrl* icon = getChild( "presets_icon" ); + //LLRect icon_rect = icon->getRect(); + LLRect icon_rect = mIconPresets->getRect(); + // LLRect pulldown_rect = mPanelPresetsPulldown->getRect(); pulldown_rect.setLeftTopAndSize(icon_rect.mLeft - (pulldown_rect.getWidth() - icon_rect.getWidth()), From 299ca5068f8e2461ba981286a945ee260c2beda8 Mon Sep 17 00:00:00 2001 From: Nicky Date: Mon, 18 Jul 2016 13:01:11 +0200 Subject: [PATCH 038/124] FIRE-19663; Linux only: Introduce a debug setting which will allow the viewer to use SLVoice via Wine, so the 32 bit Windows executable will be used rather than the native Linux one which uses a very old Vivox SDK version. --- autobuild.xml | 4 +- indra/newview/app_settings/settings.xml | 11 ++++ indra/newview/llvoicevivox.cpp | 81 +++++++++++++++++++------ indra/newview/llvoicevivox.h | 12 ++-- indra/newview/viewer_manifest.py | 3 +- 5 files changed, 84 insertions(+), 27 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index ae4bd5f639..558a10b9fb 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -2231,9 +2231,9 @@ archive hash - 06c3a9b1005249f0c94a8b9f3775f3d3 + 6e7b0961d6489a1b3c3090eccfd6e80e url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/vivox_3p-slvoice/rev/302004/arch/Linux/installer/slvoice-3.2.0002.10426.302004-linux-302004.tar.bz2 + http://downloads.phoenixviewer.com/slvoice-3.2.0002.10426.298329-linux-20160717.tar.bz2 name linux diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 32f0f3ee7a..afc9042f47 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -24020,6 +24020,17 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + FSLinuxEnableWin32VoiceProxy + + Comment + Use Win32 SLVoice.exe for voice. Needs wine (https://www.winehq.org/) installed, as SLVoice.exe is started inside wine. + Persist + 1 + Type + Boolean + Value + 0 + diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index ab691ba80d..444c71370d 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -395,6 +395,26 @@ bool LLVivoxVoiceClient::writeString(const std::string &str) return result; } +// On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/) +// Vivox does not support Linux anymore and the SDK SLVoice for Linux uses is old and according to LL +// will stop working 'soon' (as of 2016-07-17). See also FIRE-19663 +bool viewerUsesWineForVoice() +{ +#ifndef LL_LINUX + return false; +#else + static LLCachedControl sEnableVoiceChat(gSavedSettings, "FSLinuxEnableWin32VoiceProxy" ); + + return sEnableVoiceChat; +#endif +} + +bool viewerChoosesConnectionHandles() +{ + return viewerUsesWineForVoice(); +} +// + ///////////////////////////// // session control messages @@ -425,15 +445,19 @@ void LLVivoxVoiceClient::connectorCreate() loglevel = savedLogLevel; // } + + // Check if using the old SLVoice for Linux. the SDK in that version is too old to handle the extra args + std::string strConnectorHandle; + if( viewerChoosesConnectionHandles() ) + strConnectorHandle = "" + LLVivoxSecurity::getInstance()->connectorHandle() + ""; + // stream << "" << "V2 SDK" << "" << mVoiceAccountServerURI << "" << "Normal" -#ifndef LL_LINUX // FIRE-19556: Linux voice fix - << "" << LLVivoxSecurity::getInstance()->connectorHandle() << "" -#endif // + << strConnectorHandle // Voice in multiple instances; by Latif Khalifa << (gSavedSettings.getBOOL("VoiceMultiInstance") ? "3000050000" : "") // @@ -654,7 +678,13 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() #elif LL_DARWIN exe_path += "../Resources/SLVoice"; #else - exe_path += "SLVoice"; + // On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/) + // exe_path += "SLVoice"; + if( !viewerUsesWineForVoice() ) + exe_path += "SLVoice"; // native version + else + exe_path += "win32/SLVoice.exe"; // use bundled win32 version + // #endif // See if the vivox executable exists llstat s; @@ -662,8 +692,19 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() { // vivox executable exists. Build the command line and launch the daemon. LLProcess::Params params; + + // On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/) params.executable = exe_path; + if( !viewerUsesWineForVoice() ) + params.executable = exe_path; + else + { + params.executable = "wine"; + params.args.add( exe_path ); + } + // + std::string loglevel = gSavedSettings.getString("VivoxDebugLevel"); std::string shutdown_timeout = gSavedSettings.getString("VivoxShutdownTimeout"); if (loglevel.empty()) @@ -713,7 +754,8 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() params.cwd = gDirUtilp->getAppRODataDir(); -#ifndef LL_LINUX // FIRE-19556: Linux voice fix + // Check if using the old SLVoice for Linux. the SDK in that version is too old to handle the extra args + if( viewerChoosesConnectionHandles() ) { // # ifdef VIVOX_HANDLE_ARGS params.args.add("-ah"); params.args.add(LLVivoxSecurity::getInstance()->accountHandle()); @@ -721,7 +763,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() params.args.add("-ch"); params.args.add(LLVivoxSecurity::getInstance()->connectorHandle()); # endif // VIVOX_HANDLE_ARGS -#endif // + } // sGatewayPtr = LLProcess::create(params); @@ -1885,14 +1927,18 @@ void LLVivoxVoiceClient::loginSendMessage() bool autoPostCrashDumps = gSavedSettings.getBOOL("VivoxAutoPostCrashDumps"); + // Check if using the old SLVoice for Linux. the SDK in that version is too old to handle the extra args + std::string strAccountHandle; + if( viewerChoosesConnectionHandles() ) + strAccountHandle = "" + LLVivoxSecurity::getInstance()->accountHandle() + ""; + // + stream << "" << "" << LLVivoxSecurity::getInstance()->connectorHandle() << "" << "" << mAccountName << "" << "" << mAccountPassword << "" -#ifndef LL_LINUX // FIRE-19556: Linux voice fix - << "" << LLVivoxSecurity::getInstance()->accountHandle() << "" -#endif // + << strAccountHandle << "VerifyAnswer" << "false" << "0" @@ -2913,7 +2959,8 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st else { // Connector created, move forward. -#ifndef LL_LINUX // FIRE-19556: Linux voice fix + // Check if using the old SLVoice for Linux. the SDK in that version is too old to handle the extra args + if( viewerChoosesConnectionHandles() ) { // if (connectorHandle == LLVivoxSecurity::getInstance()->connectorHandle()) { LL_INFOS("Voice") << "Connector.Create succeeded, Vivox SDK version is " << versionID << " connector handle " << connectorHandle << LL_ENDL; @@ -2931,8 +2978,7 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st << LL_ENDL; result["connector"] = LLSD::Boolean(false); } - // FIRE-19556: Linux voice fix -#else + } else { // For old Linux Voice LL_INFOS("Voice") << "Connector.Create succeeded, Vivox SDK version is " << versionID << LL_ENDL; mVoiceVersion.serverVersion = versionID; LLVivoxSecurity::getInstance()->setConnectorHandle(connectorHandle); @@ -2940,8 +2986,7 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st mTerminateDaemon = false; result["connector"] = LLSD::Boolean(true); -#endif - // + } // For old Linux voice } LLEventPumps::instance().post("vivoxClientPump", result); @@ -2969,9 +3014,11 @@ void LLVivoxVoiceClient::loginResponse(int statusCode, std::string &statusString else { // Login succeeded, move forward. -#ifdef LL_LINUX // FIRE-19556: Linux voice fix - LLVivoxSecurity::getInstance()->setAccountHandle(accountHandle); -#endif // + + // Check if using the old SLVoice for Linux. + if( !viewerChoosesConnectionHandles() ) + LLVivoxSecurity::getInstance()->setAccountHandle(accountHandle); + // mAccountLoggedIn = true; mNumberOfAliases = numberOfAliases; result["login"] = LLSD::String("response_ok"); diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h index 6dc0a1a75a..b48da94084 100644 --- a/indra/newview/llvoicevivox.h +++ b/indra/newview/llvoicevivox.h @@ -1050,13 +1050,11 @@ class LLVivoxSecurity : public LLSingleton std::string connectorHandle() { return mConnectorHandle; }; std::string accountHandle() { return mAccountHandle; }; -// FIRE-19556: Linux voice fix -#ifdef LL_LINUX - void setConnectorHandle(const std::string& handle) { mConnectorHandle = handle; } - void setAccountHandle(const std::string& handle) { mAccountHandle = handle; } -#endif -// - + // For the old Vivox SDK used on Linux + void setConnectorHandle(const std::string& handle) { mConnectorHandle = handle; } + void setAccountHandle(const std::string& handle) { mAccountHandle = handle; } + // + private: std::string mConnectorHandle; std::string mAccountHandle; diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index c5d1746472..df445d25ef 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1489,6 +1489,7 @@ class LinuxManifest(ViewerManifest): # Currentelly, the 32-bit ones will work with a 64-bit client. if self.prefix(src="../packages/lib/release", dst="bin"): self.path("SLVoice") + self.path("win32") self.end_prefix() if self.prefix(src="../packages/lib/release", dst="lib"): self.path("libortp.so") @@ -1554,7 +1555,7 @@ class LinuxManifest(ViewerManifest): def strip_binaries(self): if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer(): print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" - self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install \! -name *.pak \! -name *.dat \! -name *.bin \! -name core | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure + self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install \! -name *.pak \! -name *.dat \! -name *.bin \! -name core \! -path '*win32*' | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure class Linux_i686_Manifest(LinuxManifest): def construct(self): From 3aeca30c240fee527e816e216e7a029ae9c26630 Mon Sep 17 00:00:00 2001 From: Nicky Date: Mon, 18 Jul 2016 13:11:23 +0200 Subject: [PATCH 039/124] Tip is now 4.7.10 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index b8de1561f0..e18c67b610 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -4.7.8 +4.7.10 From f8959588e4a53a4ef6e873a77c61772c10070b5a Mon Sep 17 00:00:00 2001 From: Ansariel Date: Mon, 18 Jul 2016 13:16:30 +0200 Subject: [PATCH 040/124] Fix warning: Failed to parse parameter "draw_border." --- indra/newview/skins/default/xui/en/floater_openobject.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml index ad5437b656..56962e92ac 100644 --- a/indra/newview/skins/default/xui/en/floater_openobject.xml +++ b/indra/newview/skins/default/xui/en/floater_openobject.xml @@ -30,7 +30,6 @@ Date: Mon, 18 Jul 2016 13:41:50 +0200 Subject: [PATCH 041/124] Print out region ID for logged region caps --- indra/newview/llviewerregion.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index ed6fd33065..c94939ea8d 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -2324,7 +2324,7 @@ void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features) std::stringstream str; LLSDSerialize::toPrettyXML(sim_features, str); - LL_INFOS() << str.str() << LL_ENDL; + LL_INFOS() << "Region ID " << getRegionID().asString() << ": " << str.str() << LL_ENDL; mSimulatorFeatures = sim_features; setSimulatorFeaturesReceived(true); From e8c9426f4e9e0a5d2b89b4e9f3fd8b3380acd5e9 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Mon, 18 Jul 2016 19:04:12 +0200 Subject: [PATCH 042/124] Update German translation --- indra/newview/skins/default/xui/de/rlva_strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/skins/default/xui/de/rlva_strings.xml b/indra/newview/skins/default/xui/de/rlva_strings.xml index 9297552d02..c26c6c1cac 100644 --- a/indra/newview/skins/default/xui/de/rlva_strings.xml +++ b/indra/newview/skins/default/xui/de/rlva_strings.xml @@ -61,6 +61,11 @@ value Die aktive Gruppe kann aufgrund von RLV-Einschränkungen nicht geändert werden. Setze zurück auf „[GROUP_SLURL]“. + blocked_nearby + + value + Avatare in der Nähe können aufgrund von RLV-Einschränkungen nicht angezeigt werden. + blocked_permattach value From fce63b04740fdcedc9790ad79551204f86c3bd6a Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Thu, 14 Jul 2016 18:51:00 +0300 Subject: [PATCH 043/124] MAINT-6559 Fixed a constant in Mesh Streaming calculation --- indra/newview/llmeshrepository.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index b5e676baf0..37cacc44e2 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -4153,7 +4153,7 @@ F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32 } } - F32 max_area = 102932.f; //area of circle that encompasses region + F32 max_area = 102944.f; //area of circle that encompasses region (see MAINT-6559) F32 min_area = 1.f; F32 high_area = llmin(F_PI*dmid*dmid, max_area); From 402af82077720ec368674e7a8924d05a507b3e64 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 19 Jul 2016 10:32:10 +0200 Subject: [PATCH 044/124] Adjust RLVa @shownames command handling for Firestorm radar --- indra/newview/rlvhandler.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 3a760372ed..63d68bc721 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -2089,14 +2089,27 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& const LLUUID idAgent = RlvCommandOptionHelper::parseOption(rlvCmd.getOption()); // Refresh the nearby people list (if necessary) - LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel("people", "panel_people"); - RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) ); - if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) && (pPeoplePanel->getNearbyList()->contains(idAgent)) ) - { - if (pPeoplePanel->getNearbyList()->isInVisibleChain()) - pPeoplePanel->onCommit(); - pPeoplePanel->getNearbyList()->updateAvatarNames(); - } + // [Standalone radar] + //LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel("people", "panel_people"); + //RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) ); + //if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) && (pPeoplePanel->getNearbyList()->contains(idAgent)) ) + //{ + // if (pPeoplePanel->getNearbyList()->isInVisibleChain()) + // pPeoplePanel->onCommit(); + // pPeoplePanel->getNearbyList()->updateAvatarNames(); + //} + FSRadar* pRadar = FSRadar::getInstance(); + RLV_ASSERT( (pRadar) ); + if ( (pRadar) ) + pRadar->updateNames(); + // [Standalone radar] + + // Refresh the speaker list + // [FS communication UI] + FSFloaterVoiceControls* pCallFloater = LLFloaterReg::findTypedInstance("fs_voice_controls"); + if (pCallFloater) + pCallFloater->getAvatarCallerList()->updateAvatarNames(); + // [FS communication UI] // Refresh that avatar's name tag and all HUD text LLVOAvatar::invalidateNameTag(idAgent); From 978447cb1203c8c53f9954d6606100c8076924d1 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 19 Jul 2016 10:33:06 +0200 Subject: [PATCH 045/124] Implement RLVa @shownearby command for Firestorm radar; still to do: Firestorm-specific nearby voice list --- indra/newview/fspanelradar.cpp | 3 ++ indra/newview/fsradar.cpp | 84 ++++++++++++++++++++-------------- indra/newview/rlvhandler.cpp | 32 +++++++------ 3 files changed, 71 insertions(+), 48 deletions(-) diff --git a/indra/newview/fspanelradar.cpp b/indra/newview/fspanelradar.cpp index d77d813c51..bbcc4ab87f 100644 --- a/indra/newview/fspanelradar.cpp +++ b/indra/newview/fspanelradar.cpp @@ -42,6 +42,7 @@ #include "llpanelblockedlist.h" #include "llviewercontrol.h" // for gSavedSettings #include "llviewermenu.h" // for gMenuHolder +#include "rlvactions.h" #include "rlvhandler.h" @@ -321,6 +322,8 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat S32 lastScroll = mRadarList->getScrollPos(); // Update list + mRadarList->setCommentText(RlvActions::canShowNearbyAgents() ? LLStringUtil::null : RlvStrings::getString("blocked_nearby")); + mRadarList->clearRows(); const std::vector::const_iterator it_end = entries.end(); for (std::vector::const_iterator it = entries.begin(); it != it_end; ++it) diff --git a/indra/newview/fsradar.cpp b/indra/newview/fsradar.cpp index f409b64a63..423f6b7864 100644 --- a/indra/newview/fsradar.cpp +++ b/indra/newview/fsradar.cpp @@ -55,8 +55,9 @@ #include "llvoiceclient.h" #include "llworld.h" #include "llspeakers.h" -#include "rlvhandler.h" #include "llviewerregion.h" +#include "rlvactions.h" +#include "rlvhandler.h" using namespace boost; @@ -229,13 +230,16 @@ void FSRadar::updateRadarList() std::vector positions; uuid_vec_t avatar_ids; std::map region_assignments; - if (sLimitRange) + if (RlvActions::canShowNearbyAgents()) { - world->getAvatars(&avatar_ids, &positions, gAgent.getPositionGlobal(), sNearMeRange, ®ion_assignments); - } - else - { - world->getAvatars(&avatar_ids, &positions, LLVector3d(), FLT_MAX, ®ion_assignments); + if (sLimitRange) + { + world->getAvatars(&avatar_ids, &positions, gAgent.getPositionGlobal(), sNearMeRange, ®ion_assignments); + } + else + { + world->getAvatars(&avatar_ids, &positions, LLVector3d(), FLT_MAX, ®ion_assignments); + } } // Determine lists of new added and removed avatars @@ -680,33 +684,35 @@ void FSRadar::updateRadarList() //3b: process alerts for avatars that where here last frame, but gone this frame (ie, they left) // as well as dispatch all earlier detected alerts for crossing range thresholds. // - - radarfields_map_t::iterator rf_it_end = mLastRadarSweep.end(); - for (radarfields_map_t::iterator i = mLastRadarSweep.begin(); i != rf_it_end; ++i) + if (RlvActions::canShowNearbyAgents()) { - LLUUID prevId = i->first; - RadarFields rf = i->second; - if ((sFSRadarShowMutedAndDerendered || !rf.lastIgnore) && mEntryList.find(prevId) == mEntryList.end()) + radarfields_map_t::iterator rf_it_end = mLastRadarSweep.end(); + for (radarfields_map_t::iterator i = mLastRadarSweep.begin(); i != rf_it_end; ++i) { - if (sRadarReportChatRangeLeave && (rf.lastDistance <= chat_range_say) && rf.lastDistance > AVATAR_UNKNOWN_RANGE) + LLUUID prevId = i->first; + RadarFields rf = i->second; + if ((sFSRadarShowMutedAndDerendered || !rf.lastIgnore) && mEntryList.find(prevId) == mEntryList.end()) { - make_ui_sound("UISndRadarChatLeave"); // FIRE-6069: Radar alerts sounds - LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_chat_leaving)); - } - if (sRadarReportDrawRangeLeave && (rf.lastDistance <= drawRadius) && rf.lastDistance > AVATAR_UNKNOWN_RANGE) - { - make_ui_sound("UISndRadarDrawLeave"); // FIRE-6069: Radar alerts sounds - LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_draw_distance_leaving)); - } - if (sRadarReportSimRangeLeave && (rf.lastRegion == regionSelf || rf.lastRegion.isNull())) - { - make_ui_sound("UISndRadarSimLeave"); // FIRE-6069: Radar alerts sounds - LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_region_leaving)); - } - - if (sRadarLeaveChannelAlert) - { - mRadarLeaveAlerts.push_back(prevId); + if (sRadarReportChatRangeLeave && (rf.lastDistance <= chat_range_say) && rf.lastDistance > AVATAR_UNKNOWN_RANGE) + { + make_ui_sound("UISndRadarChatLeave"); // FIRE-6069: Radar alerts sounds + LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_chat_leaving)); + } + if (sRadarReportDrawRangeLeave && (rf.lastDistance <= drawRadius) && rf.lastDistance > AVATAR_UNKNOWN_RANGE) + { + make_ui_sound("UISndRadarDrawLeave"); // FIRE-6069: Radar alerts sounds + LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_draw_distance_leaving)); + } + if (sRadarReportSimRangeLeave && (rf.lastRegion == regionSelf || rf.lastRegion.isNull())) + { + make_ui_sound("UISndRadarSimLeave"); // FIRE-6069: Radar alerts sounds + LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_region_leaving)); + } + + if (sRadarLeaveChannelAlert) + { + mRadarLeaveAlerts.push_back(prevId); + } } } } @@ -797,10 +803,18 @@ void FSRadar::updateRadarList() // //STEP 5: Final data updates and notification of subscribers // - - mAvatarStats["total"] = llformat("%d", mLastRadarSweep.size() - 1); - mAvatarStats["region"] = llformat("%d", inSameRegion); - mAvatarStats["chatrange"] = llformat("%d", inChatRange); + if (RlvActions::canShowNearbyAgents()) + { + mAvatarStats["total"] = llformat("%d", mLastRadarSweep.size() - 1); + mAvatarStats["region"] = llformat("%d", inSameRegion); + mAvatarStats["chatrange"] = llformat("%d", inChatRange); + } + else + { + mAvatarStats["total"] = "-"; + mAvatarStats["region"] = "-"; + mAvatarStats["chatrange"] = "-"; + } checkTracking(); diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 63d68bc721..fd613058c2 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -2150,20 +2150,26 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehavio return; // Nothing to do if the viewer is shutting down // Refresh the nearby people list - LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel("people", "panel_people"); - LLAvatarList* pNearbyList = (pPeoplePanel) ? pPeoplePanel->getNearbyList() : NULL; - RLV_ASSERT( (pPeoplePanel) && (pNearbyList) ); - if (pNearbyList) - { - static std::string s_strNoItemsMsg = pNearbyList->getNoItemsMsg(); - pNearbyList->setNoItemsMsg( (fHasBhvr) ? RlvStrings::getString("blocked_nearby") : s_strNoItemsMsg ); - pNearbyList->clear(); + // [Standalone radar] + // -> This is handled in FSRadar (filtering all items) and + // FSPanelRadar (setting the blocked message). Since the radar + // is updated once every second, we do not hassle to explicitly + // clear it here, since it will happening almost instantly anyway + //LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel("people", "panel_people"); + //LLAvatarList* pNearbyList = (pPeoplePanel) ? pPeoplePanel->getNearbyList() : NULL; + //RLV_ASSERT( (pPeoplePanel) && (pNearbyList) ); + //if (pNearbyList) + //{ + // static std::string s_strNoItemsMsg = pNearbyList->getNoItemsMsg(); + // pNearbyList->setNoItemsMsg( (fHasBhvr) ? RlvStrings::getString("blocked_nearby") : s_strNoItemsMsg ); + // pNearbyList->clear(); - if (pNearbyList->isInVisibleChain()) - pPeoplePanel->onCommit(); - if (!fHasBhvr) - pPeoplePanel->updateNearbyList(); - } + // if (pNearbyList->isInVisibleChain()) + // pPeoplePanel->onCommit(); + // if (!fHasBhvr) + // pPeoplePanel->updateNearbyList(); + //} + // [Standalone radar] // Refresh that avatar's name tag and all HUD text LLHUDText::refreshAllObjectText(); From b8c9af4515118f9e4041e710bc9effae82dd2d91 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Tue, 19 Jul 2016 11:30:47 +0200 Subject: [PATCH 046/124] Updated Polish translation --- indra/newview/skins/default/xui/pl/rlva_strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/skins/default/xui/pl/rlva_strings.xml b/indra/newview/skins/default/xui/pl/rlva_strings.xml index 315c9b1872..cf1a3d3b95 100644 --- a/indra/newview/skins/default/xui/pl/rlva_strings.xml +++ b/indra/newview/skins/default/xui/pl/rlva_strings.xml @@ -55,6 +55,11 @@ value Nie można zmienić aktywnej grupy ze względu na ograniczenia RLV; Zmieniam z powrotem na [GROUP_SLURL] + blocked_nearby + + value + Nie można widzieć osób w pobliżu ze względu na ograniczenia RLV + blocked_permattach value From f8be60e9d38e7f8e0217371355a9e0704ba25e96 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 19 Jul 2016 12:48:14 +0200 Subject: [PATCH 047/124] Implement RLVa @shownearby command for Firestorm-specific nearby voice list --- indra/newview/fsfloatervoicecontrols.cpp | 51 +++++++++++++++++-- indra/newview/fsfloatervoicecontrols.h | 7 +++ indra/newview/rlvhandler.cpp | 8 +++ .../xui/en/floater_fs_voice_controls.xml | 10 ++++ .../xui/en/floater_fs_voice_controls.xml | 10 ++++ 5 files changed, 82 insertions(+), 4 deletions(-) diff --git a/indra/newview/fsfloatervoicecontrols.cpp b/indra/newview/fsfloatervoicecontrols.cpp index bd6ecf230b..566d44f5b1 100644 --- a/indra/newview/fsfloatervoicecontrols.cpp +++ b/indra/newview/fsfloatervoicecontrols.cpp @@ -54,6 +54,8 @@ #include "llfirstuse.h" #include "llsliderctrl.h" +#include "lltextbox.h" +#include "rlvcommon.h" static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids); void reshape_floater(FSFloaterVoiceControls* floater, S32 delta_height); @@ -112,6 +114,7 @@ FSFloaterVoiceControls::FSFloaterVoiceControls(const LLSD& key) , mInitParticipantsVoiceState(false) , mVolumeSlider(NULL) , mMuteButton(NULL) +, mIsRlvShowNearbyRestricted(false) { static LLUICachedControl voice_left_remove_delay ("VoiceParticipantLeftRemoveDelay", 10); mSpeakerDelayRemover = new LLSpeakersDelayActionsStorage(boost::bind(&FSFloaterVoiceControls::removeVoiceLeftParticipant, this, _1), voice_left_remove_delay); @@ -158,6 +161,9 @@ BOOL FSFloaterVoiceControls::postBuild() mVolumeSlider = findChild("volume_slider"); mMuteButton = findChild("mute_btn"); + mRlvRestrictedText = getChild("rlv_restricted"); + mRlvRestrictedText->setText(RlvStrings::getString("blocked_nearby")); + if (mVolumeSlider && mMuteButton) { mAvatarList->setCommitCallback(boost::bind(&FSFloaterVoiceControls::onParticipantSelected, this)); @@ -350,8 +356,10 @@ void FSFloaterVoiceControls::refreshParticipantList() mNonAvatarCaller->setName(session->mName); } - mNonAvatarCaller->setVisible(non_avatar_caller); - mAvatarList->setVisible(!non_avatar_caller); + // Ansariel: Changed for RLVa @shownearby + //mNonAvatarCaller->setVisible(non_avatar_caller); + //mAvatarList->setVisible(!non_avatar_caller); + updateListVisibility(); if (!non_avatar_caller) { @@ -885,10 +893,45 @@ void FSFloaterVoiceControls::reset(const LLVoiceChannel::EState& new_state) mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData")); } - mAvatarList->setVisible(TRUE); - mNonAvatarCaller->setVisible(FALSE); + // Ansariel: Changed for RLVa @shownearby + //mAvatarList->setVisible(TRUE); + //mNonAvatarCaller->setVisible(FALSE); + updateListVisibility(); mSpeakerManager = NULL; } +void FSFloaterVoiceControls::toggleRlvShowNearbyRestriction(bool restricted) +{ + mIsRlvShowNearbyRestricted = restricted; + updateListVisibility(); +} + +void FSFloaterVoiceControls::updateListVisibility() +{ + if (mIsRlvShowNearbyRestricted && mVoiceType == VC_LOCAL_CHAT) + { + mAvatarList->setVisible(FALSE); + mNonAvatarCaller->setVisible(FALSE); + mRlvRestrictedText->setVisible(TRUE); + } + else + { + mRlvRestrictedText->setVisible(FALSE); + + if (mParticipants) + { + // Case coming from refreshParticipantList + bool non_avatar_caller = VC_PEER_TO_PEER_AVALINE == mVoiceType; + mNonAvatarCaller->setVisible(non_avatar_caller); + mAvatarList->setVisible(!non_avatar_caller); + } + else + { + // Case coming from reset() + mAvatarList->setVisible(TRUE); + mNonAvatarCaller->setVisible(FALSE); + } + } +} //EOF diff --git a/indra/newview/fsfloatervoicecontrols.h b/indra/newview/fsfloatervoicecontrols.h index 5df12f4b2a..c8b9359253 100644 --- a/indra/newview/fsfloatervoicecontrols.h +++ b/indra/newview/fsfloatervoicecontrols.h @@ -43,6 +43,7 @@ class LLOutputMonitorCtrl; class LLSpeakerMgr; class LLSpeakersDelayActionsStorage; class LLSliderCtrl; +class LLTextBox; /** * The Voice Control Panel is an ambient window summoned by clicking the flyout chevron @@ -82,6 +83,8 @@ public: LLAvatarList* getAvatarCallerList() { return mAvatarList; } // [/RLVa:KB] + void toggleRlvShowNearbyRestriction(bool restricted); + private: typedef enum e_voice_controls_type { @@ -248,6 +251,8 @@ private: */ void reset(const LLVoiceChannel::EState& new_state); + void updateListVisibility(); + private: speaker_state_map_t mSpeakerStateMap; LLSpeakerMgr* mSpeakerManager; @@ -258,10 +263,12 @@ private: LLPanel* mAgentPanel; LLOutputMonitorCtrl* mSpeakingIndicator; bool mIsModeratorMutedVoice; + bool mIsRlvShowNearbyRestricted; LLUUID mSelectedParticipant; LLSliderCtrl* mVolumeSlider; LLButton* mMuteButton; + LLTextBox* mRlvRestrictedText; /** * Flag indicated that participants voice states should be initialized. diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index fd613058c2..b0837338a5 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -2171,6 +2171,14 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehavio //} // [Standalone radar] + // [FS communication UI] + FSFloaterVoiceControls* pCallFloater = LLFloaterReg::findTypedInstance("fs_voice_controls"); + if (pCallFloater) + { + pCallFloater->toggleRlvShowNearbyRestriction(fHasBhvr); + } + // [FS communication UI] + // Refresh that avatar's name tag and all HUD text LLHUDText::refreshAllObjectText(); } diff --git a/indra/newview/skins/default/xui/en/floater_fs_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_fs_voice_controls.xml index c9889975dc..8021404872 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_voice_controls.xml @@ -152,6 +152,16 @@ name="non_avatar_caller" top="10" width="276" /> + diff --git a/indra/newview/skins/vintage/xui/en/floater_fs_voice_controls.xml b/indra/newview/skins/vintage/xui/en/floater_fs_voice_controls.xml index 454d32bc3d..c94f23bde9 100644 --- a/indra/newview/skins/vintage/xui/en/floater_fs_voice_controls.xml +++ b/indra/newview/skins/vintage/xui/en/floater_fs_voice_controls.xml @@ -114,6 +114,16 @@ name="non_avatar_caller" top="10" width="276" /> + Date: Tue, 19 Jul 2016 17:03:12 +0200 Subject: [PATCH 048/124] FIRE-19574: Add option to show own avatar complexity in nametag; also remove inverse logic introduced earlier --- indra/newview/app_settings/settings.xml | 35 +++++++++++------ indra/newview/llfloaterpreference.cpp | 6 +++ indra/newview/llvoavatar.cpp | 27 +++++++------ .../xui/de/panel_preferences_general.xml | 5 ++- .../xui/en/panel_preferences_general.xml | 39 +++++++++++-------- 5 files changed, 71 insertions(+), 41 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index afc9042f47..334faa329a 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -23998,18 +23998,7 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 - FSTagShowTooComplexARW - - Comment - If enabled, the avatar complexity will be shown in the nametag for too complex avatars (Jelly Dolls) - Persist - 1 - Type - Boolean - Value - 1 - - FSTagAlwaysShowARW + FSTagShowARW Comment If enabled, the avatar complexity will be shown in the nametag for every avatar. @@ -24018,8 +24007,30 @@ Change of this parameter will affect the layout of buttons in notification toast Type Boolean Value + 1 + + FSTagShowOwnARW + + Comment + If enabled, the avatar complexity for the own avatar will be shown in the nametag. + Persist + 1 + Type + Boolean + Value 0 + FSTagShowTooComplexOnlyARW + + Comment + If enabled, the avatar complexity will be shown in the nametag only for too complex avatars (Jelly Dolls) + Persist + 1 + Type + Boolean + Value + 1 + FSLinuxEnableWin32VoiceProxy Comment diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 46dcbedfac..ce96a1092d 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -767,6 +767,8 @@ BOOL LLFloaterPreference::postBuild() // Properly disable avatar tag setting gSavedSettings.getControl("NameTagShowUsernames")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onAvatarTagSettingsChanged, this)); gSavedSettings.getControl("FSNameTagShowLegacyUsernames")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onAvatarTagSettingsChanged, this)); + gSavedSettings.getControl("AvatarNameTagMode")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onAvatarTagSettingsChanged, this)); + gSavedSettings.getControl("FSTagShowARW")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onAvatarTagSettingsChanged, this)); onAvatarTagSettingsChanged(); // @@ -3403,6 +3405,10 @@ void LLFloaterPreference::onAvatarTagSettingsChanged() childSetEnabled("FSshow_legacyun", usernames_enabled); childSetEnabled("legacy_trim_check", usernames_enabled && legacy_enabled); + + bool arw_options_enabled = gSavedSettings.getBOOL("FSTagShowARW") && gSavedSettings.getS32("AvatarNameTagMode") > 0; + childSetEnabled("FSTagShowTooComplexOnlyARW", arw_options_enabled); + childSetEnabled("FSTagShowOwnARW", arw_options_enabled); } // diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 5a1b8f8238..c31306f020 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3051,26 +3051,30 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name) } // - // Show Arc in nametag (for Jelly Dolls) - // ...or everyone, if selected - static LLCachedControl show_too_complex_arw_tag(gSavedSettings, "FSTagShowTooComplexARW"); - static LLCachedControl show_arw_always_tag(gSavedSettings, "FSTagAlwaysShowARW"); + // Show ARW in nametag options (for Jelly Dolls) + static LLCachedControl show_arw_tag(gSavedSettings, "FSTagShowARW"); + static LLCachedControl show_too_complex_only_arw_tag(gSavedSettings, "FSTagShowTooComplexOnlyARW"); + static LLCachedControl show_own_arw_tag(gSavedSettings, "FSTagShowOwnARW"); U32 complexity(0); LLColor4 complexity_color(LLColor4::grey1); // default if we're not limiting the complexity - if (!isSelf() && (show_arw_always_tag || (show_too_complex_arw_tag && isTooComplex()))) + if (show_arw_tag && + ((isSelf() && show_own_arw_tag) || + (!isSelf() && (!show_too_complex_only_arw_tag || isTooComplex())))) { complexity = mVisualComplexity; - // This calculation is copied from idleUpdateRenderComplexity() + + // Show complexity color if we're limiting and not showing our own ARW... static LLCachedControl max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0); - // Show complexity color if we're limiting... - if (max_render_cost != 0) + if (max_render_cost != 0 && !isSelf()) { + // This calculation is copied from idleUpdateRenderComplexity() F32 green_level = 1.f - llclamp(((F32)complexity - (F32)max_render_cost) / (F32)max_render_cost, 0.f, 1.f); F32 red_level = llmin((F32)complexity / (F32)max_render_cost, 1.f); complexity_color.set(red_level, green_level, 0.f, 1.f); } } + // // Rebuild name tag if state change detected if (!mNameIsSet @@ -3269,10 +3273,11 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name) } // Show distance in tag - // Show Arc in nametag (for Jelly Dolls) - // ...or everyone, if selected + // Show ARW in nametag options (for Jelly Dolls) static const std::string complexity_label = LLTrans::getString("Nametag_Complexity_Label"); - if (!isSelf() && (show_arw_always_tag || (show_too_complex_arw_tag && isTooComplex()))) + if (show_arw_tag && + ((isSelf() && show_own_arw_tag) || + (!isSelf() && (!show_too_complex_only_arw_tag || isTooComplex())))) { std::string complexity_string; LLLocale locale(LLLocale::USER_LOCALE); diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml index e6c808d8ee..3ac2ae1ec7 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml @@ -63,8 +63,9 @@ - - + + + diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index 7e5455eacb..370b1f16c4 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -436,29 +436,36 @@ top_delta="0"/> - + name="FSTagShowARW" + tool_tip="If enabled, the nametag will show the current avatar complexity."/> + left="40" + width="140" + top_pad="3" + name="FSTagShowTooComplexOnlyARW" + tool_tip="If enabled, the nametag will show the current avatar complexity only if the avatar is too complex and shown as a jelly doll."/> + Away timeout: @@ -576,7 +583,7 @@ left="30" mouse_opaque="false" name="text_box3" - top_pad="25" + top_pad="10" width="500"> Unavailable and Autoresponse messages can be found under Privacy / Autoresponse From b7074ee8a6d3e12cc7a7b6c56f56d25647bf51a5 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 19 Jul 2016 18:05:41 +0200 Subject: [PATCH 049/124] Small RLVa-related cleanup for Firestorm radar --- indra/newview/llpanelpeople.cpp | 34 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 61b74cee48..00aadae38f 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1088,16 +1088,6 @@ void LLPanelPeople::updateButtons() } } } - -// [RLVa:KB] - Checked: RLVa-1.2.0 - if ( (nearby_tab_active) && (RlvActions::isRlvEnabled()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) ) - { - bool fCanShowNames = true; - std::for_each(selected_uuids.begin(), selected_uuids.end(), [&fCanShowNames](const LLUUID& idAgent) { fCanShowNames &= RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgent); }); - if (!fCanShowNames) - item_selected = multiple_selected = false; - } -// [/RLBa:KB] } std::string LLPanelPeople::getActiveTabName() const @@ -1345,10 +1335,11 @@ void LLPanelPeople::onAvatarListDoubleClicked(LLUICtrl* ctrl) } // [RLVa:KB] - Checked: RLVa-2.0.1 - if ( (RlvActions::isRlvEnabled()) && (NEARBY_TAB_NAME == getActiveTabName()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, clicked_id)) ) - { - return; - } + // Firestorm radar; commented out + //if ( (RlvActions::isRlvEnabled()) && (NEARBY_TAB_NAME == getActiveTabName()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, clicked_id)) ) + //{ + // return; + //} // [/RLVa:KB] #if 0 // SJB: Useful for testing, but not currently functional or to spec @@ -1468,13 +1459,14 @@ void LLPanelPeople::onImButtonClicked() uuid_vec_t selected_uuids; getCurrentItemIDs(selected_uuids); // [RLVa:KB] - Checked: RLVa-2.0.1 - if ( (RlvActions::isRlvEnabled()) && (NEARBY_TAB_NAME == getActiveTabName()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) ) - { - bool fCanShowNames = true; - std::for_each(selected_uuids.begin(), selected_uuids.end(), [&fCanShowNames](const LLUUID& idAgent) { fCanShowNames &= RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgent); }); - if (!fCanShowNames) - return; - } + // Firestorm radar; commented out + //if ( (RlvActions::isRlvEnabled()) && (NEARBY_TAB_NAME == getActiveTabName()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) ) + //{ + // bool fCanShowNames = true; + // std::for_each(selected_uuids.begin(), selected_uuids.end(), [&fCanShowNames](const LLUUID& idAgent) { fCanShowNames &= RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgent); }); + // if (!fCanShowNames) + // return; + //} // [/RLVa:KB] if ( selected_uuids.size() == 1 ) { From 8156ca3dcc6d007051f316f98ddfa60ba5c864c1 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 20 Jul 2016 09:00:27 +0200 Subject: [PATCH 050/124] FIRE-19619: Sort group notices descending by date by default --- indra/newview/skins/default/xui/en/panel_group_notices.xml | 3 +++ indra/newview/skins/starlight/xui/en/panel_group_notices.xml | 3 +++ .../newview/skins/starlightcui/xui/en/panel_group_notices.xml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml index 36b97894bb..e2f6dc0d75 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml @@ -44,6 +44,8 @@ Maximum 200 per group daily height="125" column_padding="0" draw_heading="true" + sort_column="4" + sort_ascending="false" follows="left|top|right" layout="topleft"> Date: Wed, 20 Jul 2016 09:19:55 +0200 Subject: [PATCH 051/124] Minor radar performance tweak: Don't resort the list while still adding avatars --- indra/newview/fspanelradar.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indra/newview/fspanelradar.cpp b/indra/newview/fspanelradar.cpp index bbcc4ab87f..aede0032b2 100644 --- a/indra/newview/fspanelradar.cpp +++ b/indra/newview/fspanelradar.cpp @@ -324,6 +324,9 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat // Update list mRadarList->setCommentText(RlvActions::canShowNearbyAgents() ? LLStringUtil::null : RlvStrings::getString("blocked_nearby")); + bool needs_sort = mRadarList->isSorted(); + mRadarList->setNeedsSort(false); + mRadarList->clearRows(); const std::vector::const_iterator it_end = entries.end(); for (std::vector::const_iterator it = entries.begin(); it != it_end; ++it) @@ -411,6 +414,9 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat } } + mRadarList->setNeedsSort(needs_sort); + mRadarList->updateSort(); + LLStringUtil::format_map_t name_count_args; name_count_args["[TOTAL]"] = stats["total"].asString(); name_count_args["[IN_REGION]"] = stats["region"].asString(); From bca867860451f24505d7b46ef5c5c0f5a350c754 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Wed, 20 Jul 2016 10:36:20 +0200 Subject: [PATCH 052/124] Updated Polish translation --- .../skins/default/xui/pl/panel_preferences_general.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml index ecafe9ee9b..a7321df24d 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml @@ -61,8 +61,9 @@ - - + + + Zasypiaj po czasie: From f5323715de8a47f87acdc287a9167ac1e9dea645 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 21 Jul 2016 09:05:44 +0200 Subject: [PATCH 053/124] FIRE-19684: Crash when using untabbed IM windows; calling LLTransientDockableFloater::setDocked() from the ctor will try to update messages before floater is built --- indra/newview/fsfloaterim.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/indra/newview/fsfloaterim.cpp b/indra/newview/fsfloaterim.cpp index a641ee626e..7e78c1dea4 100644 --- a/indra/newview/fsfloaterim.cpp +++ b/indra/newview/fsfloaterim.cpp @@ -2359,6 +2359,9 @@ void FSFloaterIM::handleMinimized(bool minimized) else { gConsole->addSession(mSessionID); - updateMessages(); + if (mChatHistory) + { + updateMessages(); + } } } From 613fa77cfa4141a8275b7ba9664a2dd2483c008b Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 21 Jul 2016 15:16:25 +0200 Subject: [PATCH 054/124] Silence debug messages from FSData --- indra/newview/app_settings/logcontrol.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index 62ef3bb2f1..7368dc8021 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -60,7 +60,6 @@ --> import export - fsdata SLURL Outfit From cd37baf22b4df6b13f87deea8441ba1095f903f3 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 21 Jul 2016 16:04:49 +0200 Subject: [PATCH 055/124] Fix pressing # in web search trying to start a gesture --- indra/newview/llviewerkeyboard.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index b591378c78..68759effc6 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -50,6 +50,7 @@ #include "rlvhandler.h" // [/RLVa:KB] #include "llfloaterwebcontent.h" +#include "fsfloatersearch.h" // // Constants @@ -631,7 +632,7 @@ void start_gesture( EKeystate s ) // FIRE-4167: Don't start gesture if a floater with web content has focus LLFloater* focused_floater = gFloaterView->getFocusedFloater(); - if (focused_floater && dynamic_cast(focused_floater)) + if (focused_floater && (dynamic_cast(focused_floater) || dynamic_cast(focused_floater))) { return; } From 688439cd2a986b60b536ee1382098fde6c161f9a Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Thu, 21 Jul 2016 18:11:08 +0200 Subject: [PATCH 056/124] BUG-20161: Detached object ends up in root of inventory --- indra/newview/llinventorymodel.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 1f1a255310..905737f445 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1025,8 +1025,11 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask) item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, category_id); if( item_array ) { + LLInventoryModel::LLCategoryUpdate update(category_id, 1); + gInventory.accountForUpdate(update); + // *FIX: bit of a hack to call update server from here... - new_item->updateServer(TRUE); + new_item->updateParentOnServer(FALSE); item_array->push_back(new_item); } else @@ -1067,9 +1070,12 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask) item_array = get_ptr_in_map(mParentChildItemTree, parent_id); if(item_array) { + LLInventoryModel::LLCategoryUpdate update(parent_id, 1); + gInventory.accountForUpdate(update); + // *FIX: bit of a hack to call update server from // here... - new_item->updateServer(TRUE); + new_item->updateParentOnServer(FALSE); item_array->push_back(new_item); } else From 833ee7b7eaaa6611e4dd131a2058459b661350e2 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 21 Jul 2016 19:36:11 +0200 Subject: [PATCH 057/124] Tag Firestorm changes --- indra/newview/llinventorymodel.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 905737f445..b23a718130 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1025,11 +1025,13 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask) item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, category_id); if( item_array ) { + // *FIX: bit of a hack to call update server from here... + // FIRE-19635 / BUG-20161: Detached object ends up in root of inventory + //new_item->updateServer(TRUE); LLInventoryModel::LLCategoryUpdate update(category_id, 1); gInventory.accountForUpdate(update); - - // *FIX: bit of a hack to call update server from here... new_item->updateParentOnServer(FALSE); + // item_array->push_back(new_item); } else @@ -1070,12 +1072,14 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask) item_array = get_ptr_in_map(mParentChildItemTree, parent_id); if(item_array) { - LLInventoryModel::LLCategoryUpdate update(parent_id, 1); - gInventory.accountForUpdate(update); - // *FIX: bit of a hack to call update server from // here... + // FIRE-19635 / BUG-20161: Detached object ends up in root of inventory + //new_item->updateServer(TRUE); + LLInventoryModel::LLCategoryUpdate update(parent_id, 1); + gInventory.accountForUpdate(update); new_item->updateParentOnServer(FALSE); + // item_array->push_back(new_item); } else From 741f59c0c77e2e2d7a06c2b1e71581bf9f661da8 Mon Sep 17 00:00:00 2001 From: Kadah_Coba Date: Thu, 21 Jul 2016 21:39:00 -0700 Subject: [PATCH 058/124] Fixed spelling on FSFlashOnMessage description --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 334faa329a..bc808a1c3b 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -22643,7 +22643,7 @@ Change of this parameter will affect the layout of buttons in notification toast FSFlashOnMessage Comment - Flash/Bounce the app icon when a new message is recieved and Firestorm is not in focus + Flash/Bounce the app icon when a new message is received and Firestorm is not in focus Persist 1 Type From 9b152a4bd9328a1ce8aed936d12a3150ab97933f Mon Sep 17 00:00:00 2001 From: Kadah_Coba Date: Thu, 21 Jul 2016 23:01:18 -0700 Subject: [PATCH 059/124] FIRE-19696: Add option to disable app icon flash/bounce on object IM --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llviewermessage.cpp | 5 ++++- .../skins/default/xui/en/panel_preferences_alerts.xml | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index bc808a1c3b..38bf2a2fa7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -22651,6 +22651,17 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + FSFlashOnObjectIM + + Comment + Flash/Bounce the app icon when a new instant message from an object is received and Firestorm is not in focus. + Persist + 1 + Type + Boolean + Value + 1 + FSDisableReturnObjectNotification Comment diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 51c14072ee..09e0244dc2 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4209,7 +4209,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // Make osx dashboard icon bounce when window isn't in focus //if (viewer_window && viewer_window->getMinimized()) static LLCachedControl sFlashIcon(gSavedSettings, "FSFlashOnMessage"); - if (viewer_window && dialog != IM_TYPING_START && dialog != IM_TYPING_STOP && sFlashIcon) + // FIRE-19696: Add option to disable app icon flash/bounce on object IM + static LLCachedControl sFSFlashOnObjectIM(gSavedSettings, "FSFlashOnObjectIM"); + // if (viewer_window && dialog != IM_TYPING_START && dialog != IM_TYPING_STOP && sFlashIcon) + if (viewer_window && dialog != IM_TYPING_START && dialog != IM_TYPING_STOP && sFlashIcon && (sFSFlashOnObjectIM || (chat.mChatType != CHAT_TYPE_IM))) { viewer_window->flashIcon(5.f); } diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml index 4e211f9127..c06bb356f1 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml @@ -119,11 +119,21 @@ name="FSFlashOnMessage" top="10" width="450"/> + From 68e034f72b1e01712aa3df363921b31ef3d124f8 Mon Sep 17 00:00:00 2001 From: Kadah_Coba Date: Thu, 21 Jul 2016 23:32:38 -0700 Subject: [PATCH 060/124] FIRE-11920: Always enable replace outfit from inventory --- indra/newview/llappearancemgr.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 870516143d..72482cbe66 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1982,17 +1982,20 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id) return false; } +// FIRE-11920: Always allow replacing outfit // Check whether the outfit contains any wearables we aren't wearing already (STORM-702). - LLInventoryModel::cat_array_t cats; - LLInventoryModel::item_array_t items; - LLFindWearablesEx is_worn(/*is_worn=*/ false, /*include_body_parts=*/ true); - gInventory.collectDescendentsIf(outfit_cat_id, - cats, - items, - LLInventoryModel::EXCLUDE_TRASH, - is_worn); +// LLInventoryModel::cat_array_t cats; +// LLInventoryModel::item_array_t items; +// LLFindWearablesEx is_worn(/*is_worn=*/ false, /*include_body_parts=*/ true); +// gInventory.collectDescendentsIf(outfit_cat_id, +// cats, +// items, +// LLInventoryModel::EXCLUDE_TRASH, +// is_worn); - return items.size() > 0; +// return items.size() > 0; + return TRUE; +// FIRE-11920: Always allow replacing outfit } // Moved from LLWearableList::ContextMenu for wider utility. From 16534ec8abaf005b31745d85dc4033e0955ff700 Mon Sep 17 00:00:00 2001 From: Kadah_Coba Date: Thu, 21 Jul 2016 23:50:25 -0700 Subject: [PATCH 061/124] FIRE-19697: Add setting to disable quick graphics preset menu popup on mouse over --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llstatusbar.cpp | 8 +++++++- .../skins/default/xui/en/panel_preferences_UI.xml | 8 ++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 38bf2a2fa7..66dabd3d50 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -24053,6 +24053,17 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + FSGraphicsPresetMenuButtonPopupOnRollover + + Comment + Enable rollover popup on quick graphics menu icon (Restart Required) + Persist + 1 + Type + Boolean + Value + 1 + diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 517b7a62c2..4442a43360 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -285,7 +285,13 @@ BOOL LLStatusBar::postBuild() //mBtnStats = getChildView("stat_btn"); mIconPresets = getChild( "presets_icon" ); - mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); + // FIRE-19697: Add setting to disable graphics preset menu popup on mouse over + // mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); + if (gSavedSettings.getBOOL("FSGraphicsPresetMenuButtonPopupOnRollover")) + { + mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); + } + // FIRE-19697: Add setting to disable graphics preset menu popup on mouse over mIconPresets->setClickedCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); mBtnVolume = getChild( "volume_btn" ); diff --git a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml index dcfdee66aa..2835697af0 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml @@ -626,6 +626,14 @@ name="FSShowCurrencyBalanceInStatusbar" width="270" control_name="FSShowCurrencyBalanceInStatusbar"/> + Date: Fri, 22 Jul 2016 00:22:03 -0700 Subject: [PATCH 062/124] FIRE-19697: Add setting to disable status bar icon menu popup on mouseover --- indra/newview/app_settings/settings.xml | 4 ++-- indra/newview/llstatusbar.cpp | 19 ++++++++++++++++--- .../default/xui/en/panel_preferences_UI.xml | 6 +++--- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 66dabd3d50..a17802bfd1 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -24053,10 +24053,10 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 - FSGraphicsPresetMenuButtonPopupOnRollover + FSStatusBarMenuButtonPopupOnRollover Comment - Enable rollover popup on quick graphics menu icon (Restart Required) + Enable rollover popups on top status bar menu icons: Quick Graphics Presets, Volume, and Media. (Restart Required) Persist 1 Type diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 4442a43360..ec0f029215 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -287,7 +287,7 @@ BOOL LLStatusBar::postBuild() mIconPresets = getChild( "presets_icon" ); // FIRE-19697: Add setting to disable graphics preset menu popup on mouse over // mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); - if (gSavedSettings.getBOOL("FSGraphicsPresetMenuButtonPopupOnRollover")) + if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover")) { mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); } @@ -296,7 +296,13 @@ BOOL LLStatusBar::postBuild() mBtnVolume = getChild( "volume_btn" ); mBtnVolume->setClickedCallback( onClickVolume, this ); - mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this)); + // FIRE-19697: Add setting to disable status bar icon menu popup on mouseover + // mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this)); + if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover")) + { + mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this)); + } + // FIRE-19697: Add setting to disable status bar icon menu popup on mouseover // ## Zi: Media/Stream separation mStreamToggle = getChild("stream_toggle_btn"); @@ -305,7 +311,14 @@ BOOL LLStatusBar::postBuild() mMediaToggle = getChild("media_toggle_btn"); mMediaToggle->setClickedCallback( &LLStatusBar::onClickMediaToggle, this ); - mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); + // FIRE-19697: Add setting to disable status bar icon menu popup on mouseover + if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover")) + // mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); + + { + mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); + } + // FIRE-19697: Add setting to disable status bar icon menu popup on mouseover LLHints::registerHintTarget("linden_balance", getChild("balance_bg")->getHandle()); diff --git a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml index 2835697af0..77c9a835c0 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml @@ -630,10 +630,10 @@ top_pad="4" follows="left|top" height="16" - label="Enable rollover popup on quick graphics menu icon (Restart Required)" - name="FSGraphicsPresetMenuButtonPopupOnRollover" + label="Enable mouse rollover popup on status bar menu icons (Restart Required)" + name="FSStatusBarMenuButtonPopupOnRollover" width="270" - control_name="FSGraphicsPresetMenuButtonPopupOnRollover"/> + control_name="FSStatusBarMenuButtonPopupOnRollover"/> Date: Fri, 22 Jul 2016 09:25:58 +0200 Subject: [PATCH 063/124] Cleanup --- indra/newview/llviewermessage.cpp | 2 -- .../newview/skins/default/xui/en/panel_preferences_alerts.xml | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 09e0244dc2..55d7333af0 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4209,9 +4209,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // Make osx dashboard icon bounce when window isn't in focus //if (viewer_window && viewer_window->getMinimized()) static LLCachedControl sFlashIcon(gSavedSettings, "FSFlashOnMessage"); - // FIRE-19696: Add option to disable app icon flash/bounce on object IM static LLCachedControl sFSFlashOnObjectIM(gSavedSettings, "FSFlashOnObjectIM"); - // if (viewer_window && dialog != IM_TYPING_START && dialog != IM_TYPING_STOP && sFlashIcon) if (viewer_window && dialog != IM_TYPING_START && dialog != IM_TYPING_STOP && sFlashIcon && (sFSFlashOnObjectIM || (chat.mChatType != CHAT_TYPE_IM))) { viewer_window->flashIcon(5.f); diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml index c06bb356f1..b1fe508b18 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml @@ -121,8 +121,9 @@ width="450"/> Date: Fri, 22 Jul 2016 09:51:43 +0200 Subject: [PATCH 064/124] FIRE-19697: Made toggle of FSStatusBarMenuButtonPopupOnRollover instant without restart --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llstatusbar.cpp | 69 ++++++++++++++++--- indra/newview/llstatusbar.h | 10 +++ .../default/xui/en/panel_preferences_UI.xml | 2 +- 4 files changed, 72 insertions(+), 11 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index a17802bfd1..643243ca32 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -24056,7 +24056,7 @@ Change of this parameter will affect the layout of buttons in notification toast FSStatusBarMenuButtonPopupOnRollover Comment - Enable rollover popups on top status bar menu icons: Quick Graphics Presets, Volume, and Media. (Restart Required) + Enable rollover popups on top status bar menu icons: Quick Graphics Presets, Volume, and Media. Persist 1 Type diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index ec0f029215..68ea169ea9 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -195,7 +195,12 @@ LLStatusBar::LLStatusBar(const LLRect& rect) mNearbyIcons(FALSE), // Script debug mSearchData(NULL), // Hook up and init for filtering mFilterEdit(NULL), // Edit for filtering - mSearchPanel(NULL) // Panel for filtering + mSearchPanel(NULL), // Panel for filtering + mIconPresets(NULL), + mMediaToggle(NULL), + mMouseEnterPresetsConnection(), + mMouseEnterVolumeConnection(), + mMouseEnterNearbyMediaConnection() { setRect(rect); @@ -244,6 +249,22 @@ LLStatusBar::~LLStatusBar() { mShowCoordsCtrlConnection.disconnect(); } + + // FIRE-19697: Add setting to disable graphics preset menu popup on mouse over + if (mMouseEnterPresetsConnection.connected()) + { + mMouseEnterPresetsConnection.disconnect(); + } + if (mMouseEnterVolumeConnection.connected()) + { + mMouseEnterVolumeConnection.disconnect(); + } + if (mMouseEnterNearbyMediaConnection.connected()) + { + mMouseEnterNearbyMediaConnection.disconnect(); + } + // + // LLView destructor cleans up children } @@ -289,7 +310,7 @@ BOOL LLStatusBar::postBuild() // mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover")) { - mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); + mMouseEnterPresetsConnection = mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); } // FIRE-19697: Add setting to disable graphics preset menu popup on mouse over mIconPresets->setClickedCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); @@ -300,23 +321,22 @@ BOOL LLStatusBar::postBuild() // mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this)); if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover")) { - mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this)); + mMouseEnterVolumeConnection = mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this)); } // FIRE-19697: Add setting to disable status bar icon menu popup on mouseover - // ## Zi: Media/Stream separation + // Media/Stream separation mStreamToggle = getChild("stream_toggle_btn"); - mStreamToggle->setClickedCallback( &LLStatusBar::onClickStreamToggle, this ); - // ## Zi: Media/Stream separation + mStreamToggle->setClickedCallback(&LLStatusBar::onClickStreamToggle, this); + // Media/Stream separation mMediaToggle = getChild("media_toggle_btn"); mMediaToggle->setClickedCallback( &LLStatusBar::onClickMediaToggle, this ); // FIRE-19697: Add setting to disable status bar icon menu popup on mouseover + // mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover")) - // mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); - { - mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); + mMouseEnterNearbyMediaConnection = mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); } // FIRE-19697: Add setting to disable status bar icon menu popup on mouseover @@ -324,6 +344,9 @@ BOOL LLStatusBar::postBuild() gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2)); + // FIRE-19697: Add setting to disable graphics preset menu popup on mouse over + gSavedSettings.getControl("FSStatusBarMenuButtonPopupOnRollover")->getSignal()->connect(boost::bind(&LLStatusBar::onPopupRolloverChanged, this, _2)); + // Adding Net Stat Graph S32 x = getRect().getWidth() - 2; S32 y = 0; @@ -1601,3 +1624,31 @@ void LLStatusBar::updateMenuSearchVisibility(const LLSD& data) } update(); } + +// FIRE-19697: Add setting to disable graphics preset menu popup on mouse over +void LLStatusBar::onPopupRolloverChanged(const LLSD& newvalue) +{ + bool new_value = newvalue.asBoolean(); + + if (new_value) + { + mMouseEnterPresetsConnection = mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); + mMouseEnterVolumeConnection = mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this)); + mMouseEnterNearbyMediaConnection = mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); + } + else + { + if (mMouseEnterPresetsConnection.connected()) + { + mMouseEnterPresetsConnection.disconnect(); + } + if (mMouseEnterVolumeConnection.connected()) + { + mMouseEnterVolumeConnection.disconnect(); + } + if (mMouseEnterNearbyMediaConnection.connected()) + { + mMouseEnterNearbyMediaConnection.disconnect(); + } + } +} diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index 730706bb8b..8a819b914f 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -261,6 +261,10 @@ private: void onNavMeshStatusChange(const LLPathfindingNavMeshStatus &pNavMeshStatus); void createNavMeshStatusListenerForCurrentRegion(); // Pathfinding support + + // FIRE-19697: Add setting to disable graphics preset menu popup on mouse over + void onPopupRolloverChanged(const LLSD& newvalue); + public: /** @@ -362,6 +366,12 @@ private: boost::signals2::connection mShowCoordsCtrlConnection; boost::signals2::connection mParcelMgrConnection; + // FIRE-19697: Add setting to disable graphics preset menu popup on mouse over + boost::signals2::connection mMouseEnterPresetsConnection; + boost::signals2::connection mMouseEnterVolumeConnection; + boost::signals2::connection mMouseEnterNearbyMediaConnection; + // + // Pathfinding rebake functions BOOL rebakeRegionCallback(const LLSD& notification,const LLSD& response); diff --git a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml index 77c9a835c0..d4ad3e6ee4 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml @@ -630,7 +630,7 @@ top_pad="4" follows="left|top" height="16" - label="Enable mouse rollover popup on status bar menu icons (Restart Required)" + label="Enable mouse rollover popup on status bar menu icons" name="FSStatusBarMenuButtonPopupOnRollover" width="270" control_name="FSStatusBarMenuButtonPopupOnRollover"/> From 85f155c342fe206fdab3aa8d86e0ca85fae20cb7 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 22 Jul 2016 09:51:54 +0200 Subject: [PATCH 065/124] Update German translation --- .../default/xui/de/panel_preferences_UI.xml | 1 + .../xui/de/panel_preferences_alerts.xml | 117 +++++++++--------- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/indra/newview/skins/default/xui/de/panel_preferences_UI.xml b/indra/newview/skins/default/xui/de/panel_preferences_UI.xml index 2a9e73f82c..5656244038 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_UI.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_UI.xml @@ -90,6 +90,7 @@ + Navigations- und Favoriten-Leiste: diff --git a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml index 9f8e0f5bc9..86186824e3 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml @@ -1,66 +1,65 @@ - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - Anzeigen, wenn meine Freunden sich an- oder abmelden: - - - - - + + + + + + + Anzeigen, wenn meine Freunden sich an- oder abmelden: + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - Immer anzeigen: - - - Niemals anzeigen: - - - - + + + + Immer anzeigen: + + + Niemals anzeigen: + + + From 99118e5eb936c85942d1e27325c4cca469506361 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 22 Jul 2016 09:55:04 +0200 Subject: [PATCH 066/124] Make this a bit smarter and always disconnect callbacks --- indra/newview/llstatusbar.cpp | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 68ea169ea9..d3699b3984 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -1630,25 +1630,23 @@ void LLStatusBar::onPopupRolloverChanged(const LLSD& newvalue) { bool new_value = newvalue.asBoolean(); + if (mMouseEnterPresetsConnection.connected()) + { + mMouseEnterPresetsConnection.disconnect(); + } + if (mMouseEnterVolumeConnection.connected()) + { + mMouseEnterVolumeConnection.disconnect(); + } + if (mMouseEnterNearbyMediaConnection.connected()) + { + mMouseEnterNearbyMediaConnection.disconnect(); + } + if (new_value) { mMouseEnterPresetsConnection = mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); mMouseEnterVolumeConnection = mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this)); mMouseEnterNearbyMediaConnection = mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); } - else - { - if (mMouseEnterPresetsConnection.connected()) - { - mMouseEnterPresetsConnection.disconnect(); - } - if (mMouseEnterVolumeConnection.connected()) - { - mMouseEnterVolumeConnection.disconnect(); - } - if (mMouseEnterNearbyMediaConnection.connected()) - { - mMouseEnterNearbyMediaConnection.disconnect(); - } - } } From bcddde997ec7cfe1531d212238d481e2f79bb855 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 22 Jul 2016 10:04:11 +0200 Subject: [PATCH 067/124] Properly enable/disable FSFilterGrowlKeywordDuplicateIMs growl option in preferences --- indra/newview/llfloaterpreference.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index ce96a1092d..df28c17beb 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -3621,9 +3621,11 @@ BOOL LLPanelPreference::postBuild() // Only enable Growl checkboxes if Growl is usable if (hasChild("notify_growl_checkbox", TRUE)) { + BOOL growl_enabled = gSavedSettings.getBOOL("FSEnableGrowl") && GrowlManager::isUsable(); getChild("notify_growl_checkbox")->setCommitCallback(boost::bind(&LLPanelPreference::onEnableGrowlChanged, this)); getChild("notify_growl_checkbox")->setEnabled(GrowlManager::isUsable()); - getChild("notify_growl_always_checkbox")->setEnabled(gSavedSettings.getBOOL("FSEnableGrowl") && GrowlManager::isUsable()); + getChild("notify_growl_always_checkbox")->setEnabled(growl_enabled); + getChild("FSFilterGrowlKeywordDuplicateIMs")->setEnabled(growl_enabled); } // @@ -3727,7 +3729,9 @@ void LLPanelPreference::handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const // Only enable Growl checkboxes if Growl is usable void LLPanelPreference::onEnableGrowlChanged() { - getChild("notify_growl_always_checkbox")->setEnabled(gSavedSettings.getBOOL("FSEnableGrowl") && GrowlManager::isUsable()); + BOOL growl_enabled = gSavedSettings.getBOOL("FSEnableGrowl") && GrowlManager::isUsable(); + getChild("notify_growl_always_checkbox")->setEnabled(growl_enabled); + getChild("FSFilterGrowlKeywordDuplicateIMs")->setEnabled(growl_enabled); } // From 2792c9fa54ed4e0c9bac5c3d1934e22846272f7e Mon Sep 17 00:00:00 2001 From: Nicky Date: Fri, 22 Jul 2016 13:30:24 +0200 Subject: [PATCH 068/124] Tip to default. --- README_BUILD_FIRESTORM_LINUX.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_BUILD_FIRESTORM_LINUX.txt b/README_BUILD_FIRESTORM_LINUX.txt index 18e7aef3ee..c6ea26031b 100755 --- a/README_BUILD_FIRESTORM_LINUX.txt +++ b/README_BUILD_FIRESTORM_LINUX.txt @@ -1,4 +1,4 @@ -First, make sure gcc-4.6 and g++-4.6 are installed. +First, make sure gcc-4.7 and g++-4.7 are installed. 32bit build platforms are better tested at this point and strongly recommended. From 2aef0878ce9cbcd97199218946aa2a0a9dfb2f4b Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 22 Jul 2016 13:46:15 +0200 Subject: [PATCH 069/124] Remove unused variable --- indra/newview/llstatusbar.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index d3699b3984..1053552cba 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -1415,7 +1415,7 @@ void LLStatusBar::onParcelIconClick(EParcelIcon icon) case PATHFINDING_DIRTY_ICON: // Pathfinding rebake functions // LLNotificationsUtil::add("PathfindingDirty"); - LLNotificationsUtil::add("PathfindingDirty",LLSD(),LLSD(),boost::bind(&LLStatusBar::rebakeRegionCallback,this,_1,_2)); + LLNotificationsUtil::add("PathfindingDirty", LLSD(), LLSD(), boost::bind(&LLStatusBar::rebakeRegionCallback, this, _1, _2)); // break; case PATHFINDING_DISABLED_ICON: @@ -1542,10 +1542,9 @@ void LLStatusBar::updateVolumeControlsVisibility(const LLSD& data) // // Pathfinding rebake functions -BOOL LLStatusBar::rebakeRegionCallback(const LLSD& notification,const LLSD& response) +BOOL LLStatusBar::rebakeRegionCallback(const LLSD& notification, const LLSD& response) { - std::string newSetName = response["message"].asString(); - S32 option = LLNotificationsUtil::getSelectedOption(notification,response); + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); if (option == 0) { From e7e60dba4f5e2edc19e82a460608a4e6c21c46ca Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Fri, 22 Jul 2016 20:26:33 +0200 Subject: [PATCH 070/124] Updated Polish translation --- indra/newview/skins/default/xui/pl/panel_preferences_UI.xml | 1 + indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml b/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml index 033c482582..dd7ae32df5 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml @@ -84,6 +84,7 @@ + Paski nawigacji i ulubionych: diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml index 7c3f2e0fab..2f6a0ee227 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml @@ -12,6 +12,7 @@ + From 25b3559787ac2ec8519ae1da01a99ae816dbbfe8 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 22 Jul 2016 20:32:29 +0200 Subject: [PATCH 071/124] FIRE-19700: Adjustments to AnsaStorm Blood theme by Paladin Forzane --- indra/newview/skins/ansastorm/themes/blood/colors.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/ansastorm/themes/blood/colors.xml b/indra/newview/skins/ansastorm/themes/blood/colors.xml index a301896073..dbb6facb7f 100644 --- a/indra/newview/skins/ansastorm/themes/blood/colors.xml +++ b/indra/newview/skins/ansastorm/themes/blood/colors.xml @@ -327,7 +327,7 @@ value="0.04 0.04 0.04 1.0" /> + value="0.2 0 0 0.5" /> From 40b742a0c178b109792545928053b304b639496c Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sat, 23 Jul 2016 13:04:19 +0200 Subject: [PATCH 072/124] FIRE-19614: Make CTRL-O toggle the appearance floater --- indra/newview/llviewermenu.cpp | 7 +++++++ indra/newview/skins/default/xui/da/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/de/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/en/menu_viewer.xml | 11 +++++++---- indra/newview/skins/default/xui/es/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/fr/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/it/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/ja/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/pl/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/pt/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/ru/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/tr/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/zh/menu_viewer.xml | 2 +- 13 files changed, 25 insertions(+), 15 deletions(-) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 1180e5257d..a54e0abdc4 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7508,6 +7508,13 @@ void handle_viewer_disable_message_log(void*) void handle_customize_avatar() { + // FIRE-19614: Make CTRL-O toggle the appearance floater + if (LLFloaterReg::instanceVisible("appearance")) + { + LLFloaterReg::hideInstance("appearance"); + } + else + // LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "my_outfits")); } diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml index b309ea0be3..9cd1b6d912 100644 --- a/indra/newview/skins/default/xui/da/menu_viewer.xml +++ b/indra/newview/skins/default/xui/da/menu_viewer.xml @@ -5,7 +5,7 @@ - + diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index d3cbc5aec0..396924de0d 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -11,7 +11,7 @@ - + diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 898799bd10..bc0c4743c2 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -90,15 +90,18 @@ parameter="agent" /> - - - + - + - + diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index ef38376991..bd51ca7215 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -9,7 +9,7 @@ - + diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index cafbc32795..adc325793f 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -8,7 +8,7 @@ - + diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index 93f919b44d..c5e0b09c93 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -16,7 +16,7 @@ - + diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml index 3be83d4c2e..2167b48af7 100644 --- a/indra/newview/skins/default/xui/pl/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml @@ -9,7 +9,7 @@ - + diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index abdb40d23f..e01af3b821 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -7,7 +7,7 @@ - + diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml index 524a4193d7..1e60f476d5 100644 --- a/indra/newview/skins/default/xui/ru/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml @@ -8,7 +8,7 @@ - + diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml index 70c1775a20..16519c7100 100644 --- a/indra/newview/skins/default/xui/tr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml @@ -2,7 +2,7 @@ - + diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml index 67bfce8e27..13388d9f32 100644 --- a/indra/newview/skins/default/xui/zh/menu_viewer.xml +++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml @@ -2,7 +2,7 @@ - + From bcf70aad1b25d1ad44e3d49cb17e89f29f3130b0 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sat, 23 Jul 2016 13:52:06 +0200 Subject: [PATCH 073/124] RLV fix: could zoom at people via IM chat history context menu under @shownames restrictions --- indra/newview/fscommon.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/fscommon.cpp b/indra/newview/fscommon.cpp index b29b8590a2..2df3b036a6 100644 --- a/indra/newview/fscommon.cpp +++ b/indra/newview/fscommon.cpp @@ -325,7 +325,7 @@ bool FSCommon::checkIsActionEnabled(const LLUUID& av_id, EFSRegistrarFunctionAct } else if (action == FS_RGSTR_ACT_ZOOM_IN) { - return (!isSelf && LLAvatarActions::canZoomIn(av_id)); + return (!isSelf && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) && LLAvatarActions::canZoomIn(av_id)); } else if (action == FS_RGSTR_ACT_OFFER_TELEPORT) { From a6e8f06052e750143a0c72791bf6d90926ecfacc Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 24 Jul 2016 10:22:43 +0200 Subject: [PATCH 074/124] FIRE-19707: Japanese translation update by Hiroshi Kumaki --- .../default/xui/ja/panel_fs_nui_login.xml | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 indra/newview/skins/default/xui/ja/panel_fs_nui_login.xml diff --git a/indra/newview/skins/default/xui/ja/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/ja/panel_fs_nui_login.xml new file mode 100644 index 0000000000..776761740f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_fs_nui_login.xml @@ -0,0 +1,72 @@ + + + + http://secondlife.com/account/request.php?lang=ja + + + + + + + + + + + + + + @@ -358,7 +358,7 @@ - + @@ -515,8 +515,6 @@ - - diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 0f808ed415..391d77cea0 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -1415,6 +1415,15 @@ https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries を参照してく + +ご使用の [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 表示の複雑さ] は [AGENT_COMPLEXITY] です。 +[OVERLIMIT_MSG] + + + + +ご使用の [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 表示の複雑さ] は [AGENT_COMPLEXITY] です。 + [APP_NAME] のインストールが完了しました。 @@ -1779,14 +1788,7 @@ http://secondlife.com/download から最新バージョンをダウンロード グループを抜けることができません。グループの最後のオーナーであるため、グループを抜けることができません。最初に、別のメンバーをオーナーの役割に割り当ててください。 - - グループを抜けることができません: [reason]。 - - - - グループ [group_name] を抜けました。 - - + 本当に住人全員をグリッドから追い出しますか? @@ -2492,6 +2494,12 @@ Linden Lab ごみ箱の中身をすべて削除しますか? + + +ゴミ箱が一杯です。ログイン時に問題が起こる可能性があります。 + + + トラベル、Web、検索の履歴をすべて削除しますか? @@ -3502,6 +3510,15 @@ M キーを押して変更します。 容姿のXMLファイルへの保存が失敗しました + + +事前設定 [NAME] の保存時にエラーが発生しました。 + + + +事前設定 [NAME] の削除時にエラーが発生しました。 + + ヘルプトピックが見つかりませんでした。 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_UI.xml b/indra/newview/skins/default/xui/ja/panel_preferences_UI.xml index a663d4ba83..be41e9927b 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_UI.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_UI.xml @@ -72,6 +72,8 @@ + + (再起動が必要) @@ -103,6 +105,7 @@ + ナビゲーション&お気に入りバー: diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml index 1653e737fe..65b72ccbe2 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml @@ -23,6 +23,7 @@ + diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_backup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_backup.xml index 519ee56ea5..7f032247ef 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_backup.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_backup.xml @@ -88,6 +88,12 @@ 抑止したグループチャット + + 事前設定 + + + アバター表示設定 + diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/ja/panel_preferences_firestorm.xml index ec24f62eb9..cfd8fcd588 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_firestorm.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_firestorm.xml @@ -101,6 +101,8 @@ (アバターの視線に関する設定は「プライバシー」タブにあります。) + + @@ -271,6 +273,8 @@ + + diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml index d2a8ec5ae3..7379b5e451 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml @@ -63,9 +63,9 @@ - + + + diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml index 000c3d273a..2d15e30260 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml @@ -6,7 +6,14 @@ - + + 使用中の事前設定: + + + + (なし) + + クォリティとスピード: @@ -82,7 +89,14 @@ m - + + + 0 + + + + 0 + 低 @@ -103,7 +117,6 @@ アバターレンダリング: - @@ -114,6 +127,13 @@ + + 事前設定: + + diff --git a/indra/newview/skins/default/xui/en/floater_fs_avatar_render_settings.xml b/indra/newview/skins/default/xui/en/floater_fs_avatar_render_settings.xml new file mode 100644 index 0000000000..9e7bcf053d --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_fs_avatar_render_settings.xml @@ -0,0 +1,57 @@ + + + + Never + + + Always + + + + + + Date: Tue, 9 Aug 2016 20:00:48 +0200 Subject: [PATCH 120/124] Remove unused method --- indra/newview/fsfloateravatarrendersettings.cpp | 4 ---- indra/newview/fsfloateravatarrendersettings.h | 1 - 2 files changed, 5 deletions(-) diff --git a/indra/newview/fsfloateravatarrendersettings.cpp b/indra/newview/fsfloateravatarrendersettings.cpp index f79b6c43a5..85aeaef0fb 100644 --- a/indra/newview/fsfloateravatarrendersettings.cpp +++ b/indra/newview/fsfloateravatarrendersettings.cpp @@ -71,10 +71,6 @@ void FSFloaterAvatarRenderSettings::addElementToList(const LLUUID& avatar_id, LL mAvatarList->addNameItemRow(item_params); } -void FSFloaterAvatarRenderSettings::onOpen(const LLSD& key) -{ -} - BOOL FSFloaterAvatarRenderSettings::postBuild() { mAvatarList = getChild("avatar_list"); diff --git a/indra/newview/fsfloateravatarrendersettings.h b/indra/newview/fsfloateravatarrendersettings.h index e23f886d22..ec5f302f0c 100644 --- a/indra/newview/fsfloateravatarrendersettings.h +++ b/indra/newview/fsfloateravatarrendersettings.h @@ -42,7 +42,6 @@ public: FSFloaterAvatarRenderSettings(const LLSD& key); virtual ~FSFloaterAvatarRenderSettings(); - /*virtual*/ void onOpen(const LLSD& key); /*virtual*/ BOOL postBuild(); private: From 3b952db668624a2e4be86f1560cdc1f74a93c835 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 9 Aug 2016 20:19:40 +0200 Subject: [PATCH 121/124] Added tag Firestorm_4.7.9_Release for changeset 6ef63161a501 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 98ba625367..05f4a5c142 100755 --- a/.hgtags +++ b/.hgtags @@ -551,3 +551,4 @@ e9d350764dfbf5a46229e627547ef5c1b1eeef00 4.0.2-release 0a5de9ec2cb868f367501024d8d6958c20869053 4.0.4-release 450de775fff66a011be1a001acd117cc623c445d 4.0.5-release 4070611edd95eb3a683d1cd97c4c07fe67793812 4.0.6-release +6ef63161a501b12536b1a94b74d0084a4b014572 Firestorm_4.7.9_Release From 040e24a1ee771637d1b7df970285e85107018101 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 9 Aug 2016 20:21:38 +0200 Subject: [PATCH 122/124] Changed order in .hgtags for less merge conflicts --- .hgtags | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.hgtags b/.hgtags index 05f4a5c142..37f7f52848 100755 --- a/.hgtags +++ b/.hgtags @@ -31,6 +31,7 @@ fdf1fd7884cf642ad3d41c3f5bc2521e4a7ab3aa Firestorm_4.6.9_Release 76c9998c37a52d58792e7a22cc5055e831c95023 Firestorm_4.7.3_Release a27ad24ed75000d96d056aa20495637386e4a53e Firestorm_4.7.5_Release 31f9b0f8e9365a87975af3aa73e3f782db17f994 Firestorm_4.7.7_Release +6ef63161a501b12536b1a94b74d0084a4b014572 Firestorm_4.7.9_Release bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release 003dd9461bfa479049afcc34545ab3431b147c7c v2start 52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3 @@ -551,4 +552,3 @@ e9d350764dfbf5a46229e627547ef5c1b1eeef00 4.0.2-release 0a5de9ec2cb868f367501024d8d6958c20869053 4.0.4-release 450de775fff66a011be1a001acd117cc623c445d 4.0.5-release 4070611edd95eb3a683d1cd97c4c07fe67793812 4.0.6-release -6ef63161a501b12536b1a94b74d0084a4b014572 Firestorm_4.7.9_Release From 6f7d6500d57ea339b072241b3a05f1ef2c113f71 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 9 Aug 2016 20:48:48 +0200 Subject: [PATCH 123/124] FIRE-10628/FIRE-19819: Option to supress upload cost notification --- indra/newview/llmeshrepository.cpp | 5 +++++ indra/newview/llviewerassetupload.cpp | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index b97bc678b2..b583dd58ec 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -4863,9 +4863,14 @@ void on_new_single_inventory_upload_complete( // and display something saying that it cost L$ LLStatusBar::sendMoneyBalanceRequest(); + // FIRE-10628 - Option to supress upload cost notification + if (gSavedSettings.getBOOL("FSShowUploadPaymentToast")) + { LLSD args; args["AMOUNT"] = llformat("%d", upload_price); LLNotificationsUtil::add("UploadPayment", args); + } + // } if (item_folder_id.notNull()) diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp index fc2654444a..2135829b87 100644 --- a/indra/newview/llviewerassetupload.cpp +++ b/indra/newview/llviewerassetupload.cpp @@ -52,6 +52,7 @@ #include "llcoproceduremanager.h" #include "llviewernetwork.h" +#include "llviewercontrol.h" void dialog_refresh_all(); @@ -758,9 +759,14 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti // and display something saying that it cost L$ LLStatusBar::sendMoneyBalanceRequest(); + // FIRE-10628 - Option to supress upload cost notification + if (gSavedSettings.getBOOL("FSShowUploadPaymentToast")) + { LLSD args; args["AMOUNT"] = llformat("%d", uploadPrice); LLNotificationsUtil::add("UploadPayment", args); + } + // } } else From f3f15ea170fe8fe2f69613d93c500c3b191bd3e6 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Wed, 10 Aug 2016 12:48:56 +0200 Subject: [PATCH 124/124] Updated Polish translation --- .../xui/pl/floater_fs_avatar_render_settings.xml | 14 ++++++++++++++ .../xui/pl/menu_fs_avatar_render_setting.xml | 6 ++++++ indra/newview/skins/default/xui/pl/menu_viewer.xml | 1 + 3 files changed, 21 insertions(+) create mode 100644 indra/newview/skins/default/xui/pl/floater_fs_avatar_render_settings.xml create mode 100644 indra/newview/skins/default/xui/pl/menu_fs_avatar_render_setting.xml diff --git a/indra/newview/skins/default/xui/pl/floater_fs_avatar_render_settings.xml b/indra/newview/skins/default/xui/pl/floater_fs_avatar_render_settings.xml new file mode 100644 index 0000000000..1cdb2de839 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_fs_avatar_render_settings.xml @@ -0,0 +1,14 @@ + + + + Nigdy + + + Zawsze + + + + + +