From c3eec8d391a984b19f9a52b58f074462cf3e2d80 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Fri, 1 Jul 2016 20:22:39 +0200 Subject: [PATCH 01/27] 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 a9ed782bcadc2ce890dc784caf25dfb2a62da5c3 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 13 Jul 2016 15:55:32 +0200 Subject: [PATCH 02/27] 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 03/27] 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 04/27] 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 05/27] 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 51b95b190b1f052e3733d17b1d77b9472af5b239 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 12 Jul 2016 23:10:50 +0200 Subject: [PATCH 06/27] [FIXED] An RLV_LOCK_ADD locked root folder is considered remove-locked when determining whether a folder is RLV_LOCK_REMOVE type locked -> see FIRE-3485 --HG-- branch : RLVa --- indra/newview/rlvdefines.h | 7 ++++--- indra/newview/rlvlocks.cpp | 10 +++++----- indra/newview/rlvlocks.h | 10 +++++----- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 5f681a430c..02ab5b8985 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -307,9 +307,10 @@ enum ERlvExceptionCheck enum ERlvLockMask { - RLV_LOCK_ADD = 0x01, - RLV_LOCK_REMOVE = 0x02, - RLV_LOCK_ANY = RLV_LOCK_ADD | RLV_LOCK_REMOVE + RLV_LOCK_NONE = 0x00, + RLV_LOCK_ADD = 0x01, + RLV_LOCK_REMOVE = 0x02, + RLV_LOCK_ANY = RLV_LOCK_ADD | RLV_LOCK_REMOVE }; enum ERlvWearMask diff --git a/indra/newview/rlvlocks.cpp b/indra/newview/rlvlocks.cpp index f9ba91e049..b7ac55da32 100644 --- a/indra/newview/rlvlocks.cpp +++ b/indra/newview/rlvlocks.cpp @@ -941,7 +941,7 @@ protected: // Checked: 2011-03-28 (RLVa-1.3.0g) | Modified: RLVa-1.3.0g RlvFolderLocks::RlvFolderLocks() - : m_fLookupDirty(false), m_fLockedRoot(false), m_cntLockAdd(0), m_cntLockRem(0) + : m_fLookupDirty(false), m_RootLockType(RLV_LOCK_NONE), m_cntLockAdd(0), m_cntLockRem(0) { LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&RlvFolderLocks::onNeedsLookupRefresh, this)); RlvInventory::instance().addSharedRootIDChangedCallback(boost::bind(&RlvFolderLocks::onNeedsLookupRefresh, this)); @@ -1193,7 +1193,7 @@ bool RlvFolderLocks::isLockedFolder(LLUUID idFolder, ERlvLockMask eLockTypeMask, idFolderCur = (pParent) ? pParent->getParentUUID() : idFolderRoot; } // If we didn't encounter an explicit deny lock with no exception then the folder is locked if the entire inventory is locked down - return (m_fLockedRoot) && (eSourceTypeMask & ST_ROOTFOLDER) && (idsRlvObjRem.empty()) && (idsRlvObjAdd.empty()); + return (m_RootLockType & eLockTypeMask) && (eSourceTypeMask & ST_ROOTFOLDER) && (idsRlvObjRem.empty()) && (idsRlvObjAdd.empty()); } // Checked: 2010-11-30 (RLVa-1.3.0b) | Added: RLVa-1.3.0b @@ -1209,7 +1209,7 @@ void RlvFolderLocks::refreshLockedLookups() const // // Refresh locked folders // - m_fLockedRoot = false; + m_RootLockType = RLV_LOCK_NONE; m_LockedFolderMap.clear(); for (folderlock_list_t::const_iterator itFolderLock = m_FolderLocks.begin(); itFolderLock != m_FolderLocks.end(); ++itFolderLock) { @@ -1223,8 +1223,8 @@ void RlvFolderLocks::refreshLockedLookups() const const LLViewerInventoryCategory* pFolder = lockedFolders.at(idxFolder); if (idFolderRoot != pFolder->getUUID()) m_LockedFolderMap.insert(std::pair(pFolder->getUUID(), pLockDescr)); - else - m_fLockedRoot |= (SCOPE_SUBTREE == pLockDescr->eLockScope); + else if (SCOPE_SUBTREE == pLockDescr->eLockScope) + m_RootLockType |= (U32)pLockDescr->eLockType; } } } diff --git a/indra/newview/rlvlocks.h b/indra/newview/rlvlocks.h index 3643845f91..61ab0acbb0 100644 --- a/indra/newview/rlvlocks.h +++ b/indra/newview/rlvlocks.h @@ -376,11 +376,11 @@ protected: // Cached item look-up variables typedef std::multimap folderlock_map_t; - mutable bool m_fLookupDirty; - mutable bool m_fLockedRoot; - mutable uuid_vec_t m_LockedAttachmentRem; - mutable folderlock_map_t m_LockedFolderMap; - mutable uuid_vec_t m_LockedWearableRem; + mutable bool m_fLookupDirty; + mutable U32 m_RootLockType; + mutable uuid_vec_t m_LockedAttachmentRem; + mutable folderlock_map_t m_LockedFolderMap; + mutable uuid_vec_t m_LockedWearableRem; private: friend class LLSingleton; }; From 67e4c672c78df8d5d4c8dbd065b5665a75fde22b Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 13 Jul 2016 19:35:27 +0200 Subject: [PATCH 07/27] 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 08/27] 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 09/27] 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 10/27] 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 11/27] 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 12/27] 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 13/27] 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 14/27] 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 15/27] 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 16/27] 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 17/27] 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 18/27] 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 19/27] 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 20/27] 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 21/27] 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 22/27] 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 23/27] 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 24/27] 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 25/27] 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 26/27] 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 27/27] 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: