diff --git a/README b/README index 4a048e09c..a441bfedf 100644 --- a/README +++ b/README @@ -18,7 +18,7 @@ as those based upon the OpenSim platform. Singulariy is maintained by a small group of volunteers who can be contacted both, in-world (SingularityViewer group) as well on IRC (#SingularityViewer @ FreeNode). Bug requests and features requests can be submitted through our -Issue Tracket (http://code.google.com/p/singularity-viewer/issues/list or from +Issue Tracker (http://code.google.com/p/singularity-viewer/issues/list or from the viewer menu: Help --> Bug Reporting --> Singularity Issue Tracker...) @@ -33,6 +33,6 @@ As this Readme grows out of date, please refer to History The Singularity viewer was started by Siana Gearz in November 2010 by forking it -of the Ascent Viewer, by Balseraph Software Group, which in turn was based upon -source code released by Linden Lab. +from the Ascent Viewer, by Balseraph Software Group, which in turn was based upon +source code modified from the snowglobe source code released by Linden Lab. diff --git a/indra/llmessage/aihttptimeoutpolicy.cpp b/indra/llmessage/aihttptimeoutpolicy.cpp index 8677a0ac2..602db6bc3 100644 --- a/indra/llmessage/aihttptimeoutpolicy.cpp +++ b/indra/llmessage/aihttptimeoutpolicy.cpp @@ -839,6 +839,7 @@ P(estateChangeInfoResponder); P(eventPollResponder); P(fetchInventoryResponder); P(fnPtrResponder); +P2(groupMemberDataResponder, transfer_300s); P2(groupProposalBallotResponder, transfer_300s); P(homeLocationResponder); P(HTTPGetResponder); diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index cd71efea9..48b6e4f63 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -24,12 +24,12 @@ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ - #include "linden_common.h" #include "llavatarnamecache.h" #include "llcachename.h" // we wrap this system +#include "llcontrol.h" // For LLCachedControl #include "llframetimer.h" #include "llhttpclient.h" #include "llsd.h" @@ -624,7 +624,6 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name) // ...only do immediate lookups when cache is running if (useDisplayNames()) { - // ...use display names cache std::map::iterator it = sCache.find(agent_id); if (it != sCache.end()) @@ -669,6 +668,29 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name) return false; } +// Return true when name has been set to Phoenix Name System Name, if not return false. +bool LLAvatarNameCache::getPNSName(const LLUUID& agent_id, std::string& name) +{ + LLAvatarName avatar_name; + if (get(agent_id, &avatar_name)) + getPNSName(avatar_name, name); + else return false; + return true; +} + +// get() with callback compatible version of getPNSName +void LLAvatarNameCache::getPNSName(const LLAvatarName& avatar_name, std::string& name) +{ + static LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); + switch (phoenix_name_system) + { + case 0 : name = avatar_name.getLegacyName(); break; + case 1 : name = avatar_name.getCompleteName(); break; + case 2 : name = avatar_name.mDisplayName; break; + default : name = avatar_name.getLegacyName(); break; + } +} + void LLAvatarNameCache::fireSignal(const LLUUID& agent_id, const callback_slot_t& slot, const LLAvatarName& av_name) diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 18f192c65..99e3fba57 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -65,6 +65,12 @@ namespace LLAvatarNameCache // If name is in cache, returns true and fills in provided LLAvatarName // otherwise returns false bool get(const LLUUID& agent_id, LLAvatarName *av_name); + // If get() succeeds, returns true and fills in name string + // via void function below, otherwise returns false + bool getPNSName(const LLUUID& agent_id, std::string& name); + // Perform a filling of name string according to Phoenix Name System, + // when we have an LLAvatarName already. + void getPNSName(const LLAvatarName& avatar_name, std::string& name); // Callback types for get() below typedef boost::signals2::signal< diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index c30b30f72..540eb44c8 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -693,6 +693,17 @@ Value 0 + LiruNoTransactionClutter + + Comment + Use notifytips for transactions instead of notifys, this way they do not collect in the top right of the screen. + Persist + 1 + Type + Boolean + Value + 0 + LiruSensibleARC Comment diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index 12dd4a4b9..34b8785c9 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -638,22 +638,11 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg) { if((mBuddyInfo[agent_id]->getRightsGrantedFrom() ^ new_rights) & LLRelationship::GRANT_MODIFY_OBJECTS) { - std::string first, last; std::string fullname; LLSD args; - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(agent_id, &avatar_name)) - { - switch (gSavedSettings.getS32("PhoenixNameSystem")) - { - case 0 : fullname = avatar_name.getLegacyName(); break; - case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : fullname = avatar_name.mDisplayName; break; - default : fullname = avatar_name.getCompleteName(); break; - } + if (LLAvatarNameCache::getPNSName(agent_id, fullname)) args["NAME"] = fullname; - } - + LLSD payload; payload["from_id"] = agent_id; if(LLRelationship::GRANT_MODIFY_OBJECTS & new_rights) @@ -740,15 +729,11 @@ static void on_avatar_name_cache_notify(const LLUUID& agent_id, { // Popup a notify box with online status of this agent // Use display name only because this user is your friend + std::string name; + LLAvatarNameCache::getPNSName(av_name, name); LLSD args; - switch (gSavedSettings.getS32("PhoenixNameSystem")) - { - case 0 : args["NAME"] = av_name.getLegacyName(); break; - case 1 : args["NAME"] = (av_name.mIsDisplayNameDefault ? av_name.mDisplayName : av_name.getCompleteName()); break; - case 2 : args["NAME"] = av_name.mDisplayName; break; - default : args["NAME"] = av_name.getCompleteName(); break; - } - + args["NAME"] = name; + // Popup a notify box with online status of this agent LLNotificationPtr notification = LLNotificationsUtil::add(online ? "FriendOnline" : "FriendOffline", args, payload); diff --git a/indra/newview/llfloateractivespeakers.cpp b/indra/newview/llfloateractivespeakers.cpp index 6c16dc94f..5eb9afa32 100644 --- a/indra/newview/llfloateractivespeakers.cpp +++ b/indra/newview/llfloateractivespeakers.cpp @@ -70,6 +70,8 @@ const LLColor4 INACTIVE_COLOR(0.3f, 0.3f, 0.3f, 0.5f); const LLColor4 ACTIVE_COLOR(0.5f, 0.5f, 0.5f, 1.f); const F32 TYPING_ANIMATION_FPS = 2.5f; +static void on_avatar_name_lookup(const LLUUID&, const LLAvatarName& avatar_name, std::string& mDisplayName); + LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerType type) : mStatus(LLSpeaker::STATUS_TEXT_ONLY), mLastSpokeTime(0.f), @@ -102,41 +104,22 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerTy void LLSpeaker::lookupName() { - // [Ansariel: Display name support] - LLAvatarNameCache::get(mID, boost::bind(&LLSpeaker::onAvatarNameLookup, _1, _2, new LLHandle(getHandle()))); - // [/Ansariel: Display name support] + LLAvatarNameCache::get(mID, boost::bind(&on_avatar_name_lookup, _1, _2, boost::ref(mDisplayName))); + + // Also set the legacy name. We will need it to initiate a new + // IM session. + gCacheName->getFullName(mID, mLegacyName); + mLegacyName = LLCacheName::cleanFullName(mLegacyName); } -//static -// [Ansariel: Display name support] -void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data) -// [/Ansariel: Display name support] +static void on_avatar_name_lookup(const LLUUID&, const LLAvatarName& avatar_name, std::string& mDisplayName) { - LLSpeaker* speaker_ptr = ((LLHandle*)user_data)->get(); - delete (LLHandle*)user_data; - - if (speaker_ptr) - { - // [Ansariel: Display name support] - switch (gSavedSettings.getS32("PhoenixNameSystem")) - { - case 0 : speaker_ptr->mDisplayName = avatar_name.getLegacyName(); break; - case 1 : speaker_ptr->mDisplayName = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : speaker_ptr->mDisplayName = avatar_name.mDisplayName; break; - default : speaker_ptr->mDisplayName = avatar_name.getLegacyName(); break; - } - - // Also set the legacy name. We will need it to initiate a new - // IM session. - speaker_ptr->mLegacyName = LLCacheName::cleanFullName(avatar_name.getLegacyName()); - // [/Ansariel: Display name support] - + LLAvatarNameCache::getPNSName(avatar_name, mDisplayName); // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-1.0.0g - // TODO-RLVa: this seems to get called per frame which is very likely an LL bug that will eventuall get fixed - if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) - speaker_ptr->mDisplayName = RlvStrings::getAnonym(speaker_ptr->mDisplayName); + // TODO-RLVa: this seems to get called per frame which is very likely an LL bug that will eventually get fixed + if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) + mDisplayName = RlvStrings::getAnonym(mDisplayName); // [/RLVa:KB] - } } LLSpeakerTextModerationEvent::LLSpeakerTextModerationEvent(LLSpeaker* source) diff --git a/indra/newview/llfloateractivespeakers.h b/indra/newview/llfloateractivespeakers.h index d641bcdf1..757c00bc7 100644 --- a/indra/newview/llfloateractivespeakers.h +++ b/indra/newview/llfloateractivespeakers.h @@ -77,11 +77,6 @@ public: ~LLSpeaker() {}; void lookupName(); - // [Ansariel: Display name support] - //static void onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* user_data); - static void onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data); - // [/Ansariel: Display name support] - ESpeakerStatus mStatus; // current activity status in speech group F32 mLastSpokeTime; // timestamp when this speaker last spoke F32 mSpeechVolume; // current speech amplitude (timea average rms amplitude?) diff --git a/indra/newview/llfloateravatarlist.cpp b/indra/newview/llfloateravatarlist.cpp index 015bb165e..887afe476 100644 --- a/indra/newview/llfloateravatarlist.cpp +++ b/indra/newview/llfloateravatarlist.cpp @@ -83,6 +83,7 @@ typedef enum e_radar_alert_type void chat_avatar_status(std::string name, LLUUID key, ERadarAlertType type, bool entering) { + if(gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) return; //RLVa:LF Don't announce people are around when blind, that cheats the system. static LLCachedControl radar_chat_alerts(gSavedSettings, "RadarChatAlerts"); if (!radar_chat_alerts) return; static LLCachedControl radar_alert_sim(gSavedSettings, "RadarAlertSim"); @@ -462,8 +463,6 @@ void LLFloaterAvatarList::updateAvatarList() for (i = 0; i < count; ++i) { std::string name; - std::string first; - std::string last; const LLUUID &avid = avatar_ids[i]; LLVector3d position; @@ -483,29 +482,13 @@ void LLFloaterAvatarList::updateAvatarList() position = gAgent.getPosGlobalFromAgent(avatarp->getCharacterPosition()); name = avatarp->getFullname(); - // [Ansariel: Display name support] - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(avatarp->getID(), &avatar_name)) - { - static LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - switch (phoenix_name_system) - { - case 0 : name = avatar_name.getLegacyName(); break; - case 1 : name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : name = avatar_name.mDisplayName; break; - default : name = avatar_name.getLegacyName(); break; - } - - first = avatar_name.mLegacyFirstName; - last = avatar_name.mLegacyLastName; - } - else continue; - // [/Ansariel: Display name support] + if (!LLAvatarNameCache::getPNSName(avatarp->getID(), name)) + continue; //duped for lower section if (name.empty() || (name.compare(" ") == 0))// || (name.compare(gCacheName->getDefaultName()) == 0)) { - if (!gCacheName->getFullName(avid, name)) //seems redudant with LLAvatarNameCache::get above... + if (!gCacheName->getFullName(avid, name)) //seems redudant with LLAvatarNameCache::getPNSName above... { continue; } @@ -545,7 +528,7 @@ void LLFloaterAvatarList::updateAvatarList() continue; } - if (!gCacheName->getFullName(avid, name)) + if (!LLAvatarNameCache::getPNSName(avid, name)) { //name = gCacheName->getDefaultName(); continue; //prevent (Loading...) @@ -982,14 +965,12 @@ void LLFloaterAvatarList::onClickIM() // Single avatar LLUUID agent_id = ids[0]; - // [Ansariel: Display name support] - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(agent_id, &avatar_name)) + std::string avatar_name; + if (gCacheName->getFullName(agent_id, avatar_name)) { gIMMgr->setFloaterOpen(TRUE); - gIMMgr->addSession(LLCacheName::cleanFullName(avatar_name.getLegacyName()),IM_NOTHING_SPECIAL,agent_id); + gIMMgr->addSession(avatar_name,IM_NOTHING_SPECIAL,agent_id); } - // [Ansariel: Display name support] } else { @@ -1114,14 +1095,12 @@ BOOL LLFloaterAvatarList::handleKeyHere(KEY key, MASK mask) // Single avatar LLUUID agent_id = ids[0]; - // [Ansariel: Display name support] - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(agent_id, &avatar_name)) + std::string avatar_name; + if (gCacheName->getFullName(agent_id, avatar_name)) { gIMMgr->setFloaterOpen(TRUE); - gIMMgr->addSession(LLCacheName::cleanFullName(avatar_name.getLegacyName()),IM_NOTHING_SPECIAL,agent_id); + gIMMgr->addSession(avatar_name,IM_NOTHING_SPECIAL,agent_id); } - // [Ansariel: Display name support] } else { diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index 6d6d1e251..dc0ad358c 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -33,24 +33,26 @@ #include "llfloateravatarpicker.h" -#include "message.h" - +// Viewer includes #include "llagent.h" -#include "llbutton.h" -#include "llcachename.h" #include "llfocusmgr.h" #include "llfoldervieweventlistener.h" -#include "llinventorypanel.h" -#include "llinventorymodel.h" #include "llinventoryfunctions.h" +#include "llinventorymodel.h" +#include "llinventorypanel.h" +#include "llviewercontrol.h" +#include "llviewerregion.h" +#include "llworld.h" + +// Linden libraries #include "llavatarnamecache.h" // IDEVO +#include "llbutton.h" +#include "llcachename.h" #include "lllineeditor.h" #include "llscrolllistctrl.h" #include "lltextbox.h" #include "lluictrlfactory.h" -#include "llviewercontrol.h" -#include "llworld.h" -#include "llviewerregion.h" +#include "message.h" // [RLVa:KB] #include "rlvhandler.h" diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp index 5432f3789..40af23889 100644 --- a/indra/newview/llfloaterfriends.cpp +++ b/indra/newview/llfloaterfriends.cpp @@ -44,10 +44,7 @@ #include "llagent.h" #include "llappviewer.h" // for gLastVersionChannel -// [Ansariel: Display name support] -#include "llavatarname.h" #include "llavatarnamecache.h" -// [/Ansariel: Display name support] #include "llfloateravatarpicker.h" #include "llviewerwindow.h" @@ -437,26 +434,8 @@ BOOL LLPanelFriends::addFriend(const LLUUID& agent_id) bool isOnline = relationInfo->isOnline(); std::string fullname; - // [Ansariel: Display name support] - //BOOL have_name = gCacheName->getFullName(agent_id, fullname); - LLAvatarName avatar_name; - BOOL have_name; - if (LLAvatarNameCache::get(agent_id, &avatar_name)) - { - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - switch (phoenix_name_system) - { - case 0 : fullname = avatar_name.getLegacyName(); break; - case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : fullname = avatar_name.mDisplayName; break; - default : fullname = avatar_name.getCompleteName(); break; - } + BOOL have_name = LLAvatarNameCache::getPNSName(agent_id, fullname); - have_name = TRUE; - } - else have_name = FALSE; - // [/Ansariel: Display name support] - LLSD element; element["id"] = agent_id; LLSD& friend_column = element["columns"][LIST_FRIEND_NAME]; @@ -536,26 +515,8 @@ BOOL LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh bool isOnlineSIP = LLVoiceClient::getInstance()->isOnlineSIP(itemp->getUUID()); bool isOnline = info->isOnline(); - std::string fullname; - // [Ansariel: Display name support] - //BOOL have_name = gCacheName->getFullName(agent_id, fullname); - LLAvatarName avatar_name; - BOOL have_name; - if (LLAvatarNameCache::get(agent_id, &avatar_name)) - { - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - switch (phoenix_name_system) - { - case 0 : fullname = avatar_name.getLegacyName(); break; - case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : fullname = avatar_name.mDisplayName; break; - default : fullname = avatar_name.getCompleteName(); break; - } - - have_name = TRUE; - } - else have_name = FALSE; - // [/Ansariel: Display name support] + std::string fullname; + BOOL have_name = LLAvatarNameCache::getPNSName(agent_id, fullname); // Name of the status icon to use std::string statusIcon; @@ -898,20 +859,12 @@ void LLPanelFriends::onClickIM(void* user_data) { LLUUID agent_id = ids[0]; const LLRelationship* info = LLAvatarTracker::instance().getBuddyInfo(agent_id); - // [Ansariel: Display name support] - //std::string fullname; - //if(info && gCacheName->getFullName(agent_id, fullname)) - //{ - // gIMMgr->setFloaterOpen(TRUE); - // gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id); - //} - LLAvatarName avatar_name; - if (info && LLAvatarNameCache::get(agent_id, &avatar_name)) + std::string fullname; + if(info && gCacheName->getFullName(agent_id, fullname)) { gIMMgr->setFloaterOpen(TRUE); - gIMMgr->addSession(LLCacheName::cleanFullName(avatar_name.getLegacyName()),IM_NOTHING_SPECIAL,agent_id); + gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id); } - // [/Ansariel: Display name support] } else { @@ -1027,30 +980,9 @@ void LLPanelFriends::onClickRemove(void* user_data) if(ids.size() == 1) { LLUUID agent_id = ids[0]; - // [Ansariel: Display name support] - //std::string first, last; - //if(gCacheName->getName(agent_id, first, last)) - //{ - // args["FIRST_NAME"] = first; - // args["LAST_NAME"] = last; - //} - - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(agent_id, &avatar_name)) - { - std::string fullname; - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - switch (phoenix_name_system) - { - case 0 : fullname = avatar_name.getLegacyName(); break; - case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : fullname = avatar_name.mDisplayName; break; - default : fullname = avatar_name.getCompleteName(); break; - } - + std::string fullname; + if (LLAvatarNameCache::getPNSName(agent_id, fullname)) args["NAME"] = fullname; - } - // [/Ansariel: Display name support] } else { @@ -1294,28 +1226,9 @@ void LLPanelFriends::confirmModifyRights(rights_map_t& ids, EGrantRevoke command if(ids.size() == 1) { LLUUID agent_id = ids.begin()->first; - //std::string first, last; - //if(gCacheName->getName(agent_id, first, last)) - //{ - // args["FIRST_NAME"] = first; - // args["LAST_NAME"] = last; - //} - - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(agent_id, &avatar_name)) - { - std::string fullname; - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - switch (phoenix_name_system) - { - case 0 : fullname = avatar_name.getLegacyName(); break; - case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : fullname = avatar_name.mDisplayName; break; - default : fullname = avatar_name.getCompleteName(); break; - } - + std::string fullname; + if (LLAvatarNameCache::getPNSName(agent_id, fullname)) args["NAME"] = fullname; - } if (command == GRANT) { diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 1219176d6..f52b0960c 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -277,6 +277,8 @@ BOOL LLFloaterTools::postBuild() mComboGridMode = getChild("combobox grid mode"); childSetCommitCallback("combobox grid mode",commit_grid_mode, this); + mCheckShowHighlight = getChild("checkbox show highlight"); + mCheckActualRoot = getChild("checkbox actual root"); // // Create Buttons // @@ -382,6 +384,8 @@ LLFloaterTools::LLFloaterTools() mCheckStretchUniform(NULL), mCheckStretchTexture(NULL), mCheckLimitDrag(NULL), + mCheckShowHighlight(NULL), + mCheckActualRoot(NULL), mBtnRotateLeft(NULL), mBtnRotateReset(NULL), @@ -712,6 +716,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) if (mCheckStretchUniform) mCheckStretchUniform->setVisible( edit_visible ); if (mCheckStretchTexture) mCheckStretchTexture->setVisible( edit_visible ); if (mCheckLimitDrag) mCheckLimitDrag->setVisible( edit_visible ); + if (mCheckShowHighlight) mCheckShowHighlight->setVisible(edit_visible); + if (mCheckActualRoot) mCheckActualRoot->setVisible(edit_visible); // Create buttons BOOL create_visible = (tool == LLToolCompCreate::getInstance()); diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 085a2774e..90cdf83eb 100644 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -143,6 +143,8 @@ public: LLCheckBoxCtrl* mCheckStretchUniform; LLCheckBoxCtrl* mCheckStretchTexture; LLCheckBoxCtrl* mCheckLimitDrag; + LLCheckBoxCtrl* mCheckShowHighlight; + LLCheckBoxCtrl* mCheckActualRoot; LLButton *mBtnRotateLeft; diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h index 3bfbf3611..69060653f 100644 --- a/indra/newview/llfoldervieweventlistener.h +++ b/indra/newview/llfoldervieweventlistener.h @@ -77,7 +77,7 @@ public: virtual BOOL copyToClipboard() const = 0; virtual void cutToClipboard() = 0; virtual BOOL isClipboardPasteable() const = 0; - virtual void pasteFromClipboard() = 0; + virtual void pasteFromClipboard(bool only_copies = false) = 0; virtual void pasteLinkFromClipboard() = 0; virtual void buildContextMenu(LLMenuGL& menu, U32 flags) = 0; virtual BOOL isUpToDate() const = 0; diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index c89c414b5..3cde11774 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -36,6 +36,7 @@ #include #include +#include "llappviewer.h" //For gFrameCount #include "llagent.h" #include "llui.h" #include "message.h" @@ -44,6 +45,7 @@ #include "llstatusbar.h" #include "lleconomy.h" #include "llviewercontrol.h" +#include "llviewerregion.h" #include "llviewerwindow.h" #include "llfloaterdirectory.h" #include "llfloatergroupinfo.h" @@ -821,6 +823,7 @@ void LLGroupMgrGroupData::cancelRoleChanges() LLGroupMgr::LLGroupMgr() { + mLastGroupMembersRequestFrame = 0; } LLGroupMgr::~LLGroupMgr() @@ -1885,6 +1888,187 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id, } } + +class AIHTTPTimeoutPolicy; +extern AIHTTPTimeoutPolicy groupMemberDataResponder_timeout; + +// Responder class for capability group management +class GroupMemberDataResponder : public LLHTTPClient::ResponderWithResult +{ +public: + virtual AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return groupMemberDataResponder_timeout; } + + GroupMemberDataResponder() {} + virtual ~GroupMemberDataResponder() {} + virtual void result(const LLSD& pContent); + virtual void error(U32 pStatus, const std::string& pReason); +private: + LLSD mMemberData; +}; + +void GroupMemberDataResponder::error(U32 pStatus, const std::string& pReason) +{ + LL_WARNS("GrpMgr") << "Error receiving group member data." << LL_ENDL; +} + +void GroupMemberDataResponder::result(const LLSD& content) +{ + LLGroupMgr::processCapGroupMembersRequest(content); +} + + +// static +void LLGroupMgr::sendCapGroupMembersRequest(const LLUUID& group_id) +{ + // Have we requested the information already this frame? + if (mLastGroupMembersRequestFrame == gFrameCount) + return; + + LLViewerRegion* currentRegion = gAgent.getRegion(); + // Thank you FS:Ansariel! + if (!currentRegion) + { + LL_WARNS("GrpMgr") << "Agent does not have a current region. Uh-oh!" << LL_ENDL; + return; + } + + // Check to make sure we have our capabilities + if (!currentRegion->capabilitiesReceived()) + { + LL_WARNS("GrpMgr") << " Capabilities not received!" << LL_ENDL; + return; + } + + // Get our capability + std::string cap_url = currentRegion->getCapability("GroupMemberData"); + + // Thank you FS:Ansariel! + if (cap_url.empty()) + { + LL_INFOS("GrpMgr") << "Region has no GroupMemberData capability. Falling back to UDP fetch." << LL_ENDL; + sendGroupMembersRequest(group_id); + return; + } + + // Post to our service. Add a body containing the group_id. + LLSD body = LLSD::emptyMap(); + body["group_id"] = group_id; + + LLHTTPClient::ResponderPtr grp_data_responder = new GroupMemberDataResponder(); + + // This could take a while to finish, timeout after 5 minutes. + LLHTTPClient::post(cap_url, body, grp_data_responder); + + mLastGroupMembersRequestFrame = gFrameCount; +} + +// static +void LLGroupMgr::processCapGroupMembersRequest(const LLSD& content) +{ + // Did we get anything in content? + if (!content.size()) + { + LL_DEBUGS("GrpMgr") << "No group member data received." << LL_ENDL; + return; + } + + // If we have no members, there's no reason to do anything else + S32 num_members = content["member_count"]; + if (num_members < 1) + return; + + LLUUID group_id = content["group_id"].asUUID(); + + LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id); + if (!group_datap) + { + LL_WARNS("GrpMgr") << "Received incorrect, possibly stale, group or request id" << LL_ENDL; + return; + } + + group_datap->mMemberCount = num_members; + + LLSD member_list = content["members"]; + LLSD titles = content["titles"]; + LLSD defaults = content["defaults"]; + + std::string online_status; + std::string title; + S32 contribution; + U64 member_powers; + // If this is changed to a bool, make sure to change the LLGroupMemberData constructor + BOOL is_owner; + + // Compute this once, rather than every time. + U64 default_powers = llstrtou64(defaults["default_powers"].asString().c_str(), NULL, 16); + + LLSD::map_const_iterator member_iter_start = member_list.beginMap(); + LLSD::map_const_iterator member_iter_end = member_list.endMap(); + for ( ; member_iter_start != member_iter_end; ++member_iter_start) + { + // Reset defaults + online_status = "unknown"; + title = titles[0].asString(); + contribution = 0; + member_powers = default_powers; + is_owner = false; + + const LLUUID member_id(member_iter_start->first); + LLSD member_info = member_iter_start->second; + + if (member_info.has("last_login")) + { + online_status = member_info["last_login"].asString(); + if (online_status == "Online") + online_status = LLTrans::getString("group_member_status_online"); + else + formatDateString(online_status); + } + + if (member_info.has("title")) + title = titles[member_info["title"].asInteger()].asString(); + + if (member_info.has("powers")) + member_powers = llstrtou64(member_info["powers"].asString().c_str(), NULL, 16); + + if (member_info.has("donated_square_meters")) + contribution = member_info["donated_square_meters"]; + + if (member_info.has("owner")) + is_owner = true; + + LLGroupMemberData* data = new LLGroupMemberData(member_id, + contribution, + member_powers, + title, + online_status, + is_owner); + + group_datap->mMembers[member_id] = data; + } + + // Technically, we have this data, but to prevent completely overhauling + // this entire system (it would be nice, but I don't have the time), + // I'm going to be dumb and just call services I most likely don't need + // with the thought being that the system might need it to be done. + // + // TODO: Refactor to reduce multiple calls for data we already have. + if (group_datap->mTitles.size() < 1) + LLGroupMgr::getInstance()->sendGroupTitlesRequest(group_id); + + group_datap->mMemberDataComplete = TRUE; + group_datap->mMemberRequestID.setNull(); + // Make the role-member data request + if (group_datap->mPendingRoleMemberRequest) + { + group_datap->mPendingRoleMemberRequest = FALSE; + LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_id); + } + + group_datap->mChanged = TRUE; + LLGroupMgr::getInstance()->notifyObservers(GC_MEMBER_DATA); +} + void LLGroupMgr::sendGroupRoleChanges(const LLUUID& group_id) { lldebugs << "LLGroupMgr::sendGroupRoleChanges" << llendl; diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h index 225db1735..6a18add68 100644 --- a/indra/newview/llgroupmgr.h +++ b/indra/newview/llgroupmgr.h @@ -335,6 +335,9 @@ public: static void sendGroupMemberEjects(const LLUUID& group_id, uuid_vec_t& member_ids); + void sendCapGroupMembersRequest(const LLUUID& group_id); + static void processCapGroupMembersRequest(const LLSD& content); + void cancelGroupRoleChanges(const LLUUID& group_id); static void processGroupPropertiesReply(LLMessageSystem* msg, void** data); @@ -370,6 +373,8 @@ private: typedef std::set observer_set_t; typedef std::map observer_map_t; observer_map_t mParticularObservers; + + S32 mLastGroupMembersRequestFrame; }; diff --git a/indra/newview/llhoverview.cpp b/indra/newview/llhoverview.cpp index f6cff6f16..fa922a94b 100644 --- a/indra/newview/llhoverview.cpp +++ b/indra/newview/llhoverview.cpp @@ -262,39 +262,16 @@ void LLHoverView::updateText() else { // [/RLVa:KB] - - // [Ansariel: Display name support] - std::string complete_name = firstname->getString(); - complete_name += " "; - complete_name += lastname->getString(); - - if (LLAvatarNameCache::useDisplayNames()) - { - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(hit_object->getID(), &avatar_name)) - { - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - if (phoenix_name_system == 2 || (phoenix_name_system == 1 && avatar_name.mIsDisplayNameDefault)) - { - complete_name = avatar_name.mDisplayName; - } - else - { - complete_name = avatar_name.getCompleteName(); - } - } - } - // [/Ansariel: Display name support] + std::string complete_name; + if (!LLAvatarNameCache::getPNSName(hit_object->getID(), complete_name)) + complete_name = firstname->getString() + std::string(" ") + lastname->getString(); if (title) { line.append(title->getString()); line.append(1, ' '); } - - // [Ansariel: Display name support] line += complete_name; - // [/Ansariel: Display name support] // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) } @@ -347,27 +324,13 @@ void LLHoverView::updateText() std::string name; if (!nodep->mPermissions->isGroupOwned()) { - // [Ansariel: Display name support] - LLAvatarName avatar_name; - // [/Ansariel: Display name support] owner = nodep->mPermissions->getOwner(); if (LLUUID::null == owner) { line.append(LLTrans::getString("TooltipPublic")); } - // [Ansariel: Display name support] - //else if(gCacheName->getFullName(owner, name)) - else if (LLAvatarNameCache::get(owner, &avatar_name)) + else if(LLAvatarNameCache::getPNSName(owner, name)) { - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - switch (phoenix_name_system) - { - case 0 : name = avatar_name.getCompleteName(); break; - case 1 : name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : name = avatar_name.mDisplayName; break; - default : name = avatar_name.getCompleteName(); break; - } - // [/Ansariel: Display name support] // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) { diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index bd8ec64be..2cbe64c02 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -1297,27 +1297,23 @@ void LLFloaterIMPanel::init(const std::string& session_label) } } -// [Ansariel: Display name support] void LLFloaterIMPanel::lookupName() { LLAvatarNameCache::get(mOtherParticipantUUID, boost::bind(&LLFloaterIMPanel::onAvatarNameLookup, _1, _2, this)); } //static -void LLFloaterIMPanel::onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data) +void LLFloaterIMPanel::onAvatarNameLookup(const LLUUID&, const LLAvatarName& avatar_name, void* data) { - LLFloaterIMPanel* self = (LLFloaterIMPanel*)user_data; + LLFloaterIMPanel* self = (LLFloaterIMPanel*)data; if (self && sFloaterIMPanels.count(self) != 0) { - std::string title = avatar_name.getCompleteName(); - if (!title.empty()) - { - self->setTitle(title); - } + std::string title; + LLAvatarNameCache::getPNSName(avatar_name, title); + self->setTitle(title); } } -// [/Ansariel: Display name support] LLFloaterIMPanel::~LLFloaterIMPanel() { @@ -1676,19 +1672,8 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, LLColor4 incol else { std::string show_name = name; - LLAvatarName avatar_name; - if (source.notNull() && - LLAvatarNameCache::get(source, &avatar_name)) - { - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - switch (phoenix_name_system) - { - case 0 : show_name = avatar_name.getCompleteName(); break; - case 1 : show_name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : show_name = avatar_name.mDisplayName; break; - default : show_name = avatar_name.getCompleteName(); break; - } - } + if (source.notNull()) + LLAvatarNameCache::getPNSName(source, show_name); // Convert the name to a hotlink and add to message. const LLStyleSP &source_style = LLStyleMap::instance().lookupAgent(source); mHistoryEditor->appendStyledText(show_name,false,prepend_newline,source_style); diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h index 943bd37c1..61d8c01f7 100644 --- a/indra/newview/llimpanel.h +++ b/indra/newview/llimpanel.h @@ -196,10 +196,8 @@ public: EInstantMessage dialog); virtual ~LLFloaterIMPanel(); - // [Ansariel: Display name support] void lookupName(); - static void onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data); - // [/Ansariel: Display name support] + static void onAvatarNameLookup(const LLUUID&, const LLAvatarName& avatar_name, void* data); /*virtual*/ BOOL postBuild(); @@ -400,7 +398,6 @@ private: typedef std::map styleMap; static styleMap mStyleMap; - // [Ansariel: Display name support] static std::set sFloaterIMPanels; }; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 84e1d1199..63bb8426a 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -612,6 +612,48 @@ BOOL LLInvFVBridge::isClipboardPasteable() const return TRUE; } +bool LLInvFVBridge::isClipboardPasteableAsCopy() const +{ + // In cut mode, we don't paste copies. + if (LLInventoryClipboard::instance().isCutMode()) + { + return false; + } + + LLInventoryModel* model = getInventoryModel(); + if (!model) + { + return false; + } + + // In copy mode, we need to check each element of the clipboard to know if it's a link + LLInventoryPanel* panel = dynamic_cast(mInventoryPanel.get()); + LLDynamicArray objects; + LLInventoryClipboard::instance().retrieve(objects); + const S32 count = objects.count(); + for(S32 i = 0; i < count; i++) + { + const LLUUID &item_id = objects.get(i); + + // Folders may be links + const LLInventoryCategory *cat = model->getCategory(item_id); + if (cat) + { + const LLFolderBridge cat_br(panel, mRoot, item_id); + if (cat_br.isLink()) + return true; + // Skip to the next item in the clipboard + continue; + } + + // May be link item + const LLItemBridge item_br(panel, mRoot, item_id); + if (item_br.isLink()) + return true; + } + return false; +} + BOOL LLInvFVBridge::isClipboardPasteableAsLink() const { if (!InventoryLinksEnabled()) @@ -731,6 +773,20 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, { if (obj->getIsLinkType()) { + // Patch: Inventory-Links tweak, Can copy and cut Inventory Links + items.push_back(std::string("Copy Separator")); + + items.push_back(std::string("Copy")); + if (!isItemCopyable()) + { + disabled_items.push_back(std::string("Copy")); + } + + items.push_back(std::string("Cut")); + if (!isItemMovable() || !isItemRemovable()) + { + disabled_items.push_back(std::string("Cut")); + } items.push_back(std::string("Find Original")); if (isLinkedObjectMissing()) { @@ -802,10 +858,14 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, if (!isCOFFolder() && !isInboxFolder() && !isOutboxFolder()) { items.push_back(std::string("Paste")); + // Paste as copy if we have links. + if (InventoryLinksEnabled() && isClipboardPasteableAsCopy()) + items.push_back(std::string("Paste As Copy")); } if (!isClipboardPasteable() || ((flags & FIRST_SELECTED_ITEM) == 0)) { disabled_items.push_back(std::string("Paste")); + disabled_items.push_back(std::string("Paste As Copy")); } if(InventoryLinksEnabled()) @@ -1469,6 +1529,18 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action) folder_view_itemp->getListener()->pasteFromClipboard(); return; } + else if ("paste_copies" == action) + { + // Single item only + LLInventoryItem* itemp = model->getItem(mUUID); + if (!itemp) return; + + LLFolderViewItem* folder_view_itemp = mRoot->getItemByID(itemp->getParentUUID()); + if (!folder_view_itemp) return; + + folder_view_itemp->getListener()->pasteFromClipboard(true); + return; + } else if ("paste_link" == action) { // Single item only @@ -1812,7 +1884,10 @@ BOOL LLItemBridge::removeItem() // we can't do this check because we may have items in a folder somewhere that is // not yet in memory, so we don't want false negatives. (If disabled, then we // know we only have links in the Outfits folder which we explicitly fetch.) - if (!InventoryLinksEnabled()) +// [SL:KB] - Patch: Inventory-Links | Checked: 2010-06-01 (Catznip-2.2.0a) | Added: Catznip-2.0.1a + // Users move folders around and reuse links that way... if we know something has links then it's just bad not to warn them :| +// [/SL:KB] +// if (!InventoryLinksEnabled()) { if (!item->getIsLinkType()) { @@ -1873,13 +1948,26 @@ BOOL LLItemBridge::isItemCopyable() const return FALSE; }*/ - // You can never copy a link. - if (item->getIsLinkType()) +// // You can never copy a link. +// if (item->getIsLinkType()) +// [SL:KB] - Patch: Inventory-Links | Checked: 2010-04-12 (Catznip-2.2.0a) | Added: Catznip-2.0.0a + // We'll allow copying a link if: + // - its target is available + // - it doesn't point to another link [see LLViewerInventoryItem::getLinkedItem() which returns NULL in that case] + if (item->getIsLinkType() && !item->getLinkedItem()) +// [/SL:KB] { return FALSE; } - return item->getPermissions().allowCopyBy(gAgent.getID()) || InventoryLinksEnabled(); +// [SL:KB] - Patch: Inventory-Links | Checked: 2010-04-12 (Catznip-2.2.0a) | Added: Catznip-2.0.0a + // User can copy the item if: + // - the item (or its target in the case of a link) is "copy" + // - and/or if the item (or its target in the case of a link) has a linkable asset type + // NOTE: we do *not* want to return TRUE on everything like LL seems to do in SL-2.1.0 because not all types are "linkable" + return (item->getPermissions().allowCopyBy(gAgent.getID())) || (LLAssetType::lookupCanLink(item->getType())); +// [/SL:KB] +// return item->getPermissions().allowCopyBy(gAgent.getID()) || InventoryLinksEnabled(); } return FALSE; } @@ -2824,6 +2912,11 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action) pasteFromClipboard(); return; } + else if ("paste_copies" == action) + { + pasteFromClipboard(true); + return; + } else if ("paste_link" == action) { pasteLinkFromClipboard(); @@ -3062,7 +3155,7 @@ bool LLFolderBridge::removeItemResponse(const LLSD& notification, const LLSD& re return FALSE; } -void LLFolderBridge::pasteFromClipboard() +void LLFolderBridge::pasteFromClipboard(bool only_copies) { LLInventoryModel* model = getInventoryModel(); if(model && isClipboardPasteable()) @@ -3135,7 +3228,7 @@ void LLFolderBridge::pasteFromClipboard() dropToOutfit(item, move_is_into_current_outfit); } } - else if(LLInventoryClipboard::instance().isCutMode()) + else if (!only_copies && LLInventoryClipboard::instance().isCutMode()) { // Do a move to "paste" a "cut" // move_inventory_item() is not enough, as we have to update inventory locally too @@ -3160,6 +3253,11 @@ void LLFolderBridge::pasteFromClipboard() } else { + if (only_copies) + { + item = model->getLinkedItem(item_id); + obj = model->getObject(item->getUUID()); + } // Do a "copy" to "paste" a regular copy clipboard if (LLAssetType::AT_CATEGORY == obj->getType()) { @@ -3170,6 +3268,19 @@ void LLFolderBridge::pasteFromClipboard() copy_inventory_category(model, vicat, parent_id); } } +// [SL:KB] - Patch: Inventory-Links | Checked: 2010-04-12 (Catznip-2.2.0a) | Added: Catznip-2.0.0a + else if (!only_copies && LLAssetType::lookupIsLinkType(item->getActualType())) + { + link_inventory_item( + gAgent.getID(), + item->getLinkedUUID(), + parent_id, + item->getName(), + item->getDescription(), + item->getActualType(), + LLPointer(NULL)); + } +// [/SL:KB] else { copy_inventory_item( diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 945c653ba..c5e26b752 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -108,8 +108,9 @@ public: virtual BOOL copyToClipboard() const; virtual void cutToClipboard(); virtual BOOL isClipboardPasteable() const; + bool isClipboardPasteableAsCopy() const; virtual BOOL isClipboardPasteableAsLink() const; - virtual void pasteFromClipboard() {} + virtual void pasteFromClipboard(bool only_copies = false) {} virtual void pasteLinkFromClipboard() {} void getClipboardEntries(bool show_asset_id, menuentry_vec_t &items, menuentry_vec_t &disabled_items, U32 flags); @@ -261,7 +262,7 @@ public: BOOL removeSystemFolder(); bool removeItemResponse(const LLSD& notification, const LLSD& response); - virtual void pasteFromClipboard(); + virtual void pasteFromClipboard(bool only_copies = false); virtual void pasteLinkFromClipboard(); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual BOOL hasChildren() const; diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp index 3cb77c432..e454cf65b 100644 --- a/indra/newview/llmarketplacefunctions.cpp +++ b/indra/newview/llmarketplacefunctions.cpp @@ -74,8 +74,7 @@ static std::string getMarketplaceDomain() // SecondLife(tm) BETA grid. // Using the login URI is a bit of a kludge, but it's the best we've got at the moment. domain = utf8str_tolower(getLoginUriDomain()); // .lindenlab.com; ie, "aditi.lindenlab.com". - std::string::size_type len = domain.length(); - llassert(len > 14 && domain.substr(len - 14) == ".lindenlab.com"); + llassert(domain.length() > 14 && domain.substr(domain.length() - 14) == ".lindenlab.com"); if (domain == "damballah.lindenlab.com") { domain = "secondlife-staging.com"; diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index f948b480b..724b15c94 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -629,37 +629,11 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec { msg.assign(""); std::string fullname; - if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname)) + if(mClosestAgentToCursor.notNull() && LLAvatarNameCache::getPNSName(mClosestAgentToCursor, fullname)) { //msg.append(fullname); // [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-0.2.0b - // [Ansariel: Display name support] - // msg.append( (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ? fullname : RlvStrings::getAnonym(fullname) ); - if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) - { - msg.append(RlvStrings::getAnonym(fullname)); - } - else - { - if (LLAvatarNameCache::useDisplayNames()) - { - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(mClosestAgentToCursor, &avatar_name)) - { - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - if (phoenix_name_system == 2 || (phoenix_name_system == 1 && avatar_name.mIsDisplayNameDefault)) - { - fullname = avatar_name.mDisplayName; - } - else - { - fullname = avatar_name.getCompleteName(true); - } - } - } - msg.append(fullname); - } - // [/Ansariel: Display name support] + msg.append( (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ? fullname : RlvStrings::getAnonym(fullname) ); // [/RLVa:KB] msg.append("\n"); diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 0ffd26e0f..cf1f3c23c 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -167,21 +167,9 @@ void LLPanelAvatarSecondLife::updatePartnerName() { if (mPartnerID.notNull()) { - // [Ansariel: Display name support] - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(mPartnerID, &avatar_name)) - { - std::string name; - switch (gSavedSettings.getS32("PhoenixNameSystem")) - { - case 0 : name = avatar_name.getLegacyName(); break; - case 1 : name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break; - case 2 : name = avatar_name.mDisplayName; break; - default : name = avatar_name.getLegacyName(); break; - } + std::string name; + if (LLAvatarNameCache::getPNSName(mPartnerID, name)) childSetTextArg("partner_edit", "[NAME]", name); - } - // [/Ansariel: Display name support] childSetEnabled("partner_info", TRUE); } } @@ -202,9 +190,7 @@ void LLPanelAvatarSecondLife::clearControls() childSetValue("born", ""); childSetValue("acct", ""); - // [Ansariel: Display name support] childSetTextArg("partner_edit", "[NAME]", LLStringUtil::null); - // [/Ansariel: Display name support] mPartnerID = LLUUID::null; diff --git a/indra/newview/llpanelgeneral.cpp b/indra/newview/llpanelgeneral.cpp index fbd323a09..097f0d8db 100644 --- a/indra/newview/llpanelgeneral.cpp +++ b/indra/newview/llpanelgeneral.cpp @@ -70,8 +70,10 @@ BOOL LLPanelGeneral::postBuild() childSetValue("show_my_name_checkbox", gSavedSettings.getBOOL("RenderNameHideSelf")); childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames")); childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle")); + childSetValue("away_when_idle_checkbox", gSavedSettings.getBOOL("AllowIdleAFK")); childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout")); childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange")); + childSetValue("no_transaction_clutter_checkbox", gSavedSettings.getBOOL("LiruNoTransactionClutter")); @@ -111,6 +113,12 @@ BOOL LLPanelGeneral::postBuild() childSetVisible("maturity_desired_combobox", can_choose); childSetVisible("maturity_desired_textbox", !can_choose); + childSetEnabled("afk_timeout_spinner", gSavedSettings.getBOOL("AllowIdleAFK")); + childSetCommitCallback("away_when_idle_checkbox", &onClickCheckbox, this); + + childSetEnabled("no_transaction_clutter_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange")); + childSetCommitCallback("notify_money_change_checkbox", &onClickCheckbox, this); + childSetAction("clear_settings", &onClickClearSettings, this); return TRUE; @@ -145,8 +153,10 @@ void LLPanelGeneral::apply() gSavedSettings.setBOOL("RenderNameHideSelf", childGetValue("show_my_name_checkbox")); gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox")); gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox")); + gSavedSettings.setBOOL("AllowIdleAFK", childGetValue("away_when_idle_checkbox")); gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal()); gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox")); + gSavedSettings.setBOOL("LiruNoTransactionClutter", childGetValue("no_transaction_clutter_checkbox")); gSavedSettings.setF32("UIScaleFactor", childGetValue("ui_scale_slider").asReal()); @@ -163,6 +173,17 @@ void LLPanelGeneral::cancel() { } +// static +void LLPanelGeneral::onClickCheckbox(LLUICtrl* ctrl, void* data) +{ + LLPanelGeneral* self = (LLPanelGeneral*)data; + bool enabled = ctrl->getValue().asBoolean(); + if(ctrl->getName() == "away_when_idle_checkbox") + self->childSetEnabled("afk_timeout_spinner", enabled); + else if(ctrl->getName() == "notify_money_change_checkbox") + self->childSetEnabled("no_transaction_clutter_checkbox", enabled); +} + // static void LLPanelGeneral::onClickClearSettings(void*) { diff --git a/indra/newview/llpanelgeneral.h b/indra/newview/llpanelgeneral.h index 1249ec8ca..48c44b15c 100644 --- a/indra/newview/llpanelgeneral.h +++ b/indra/newview/llpanelgeneral.h @@ -47,6 +47,7 @@ public: void apply(); void cancel(); + static void onClickCheckbox(LLUICtrl* ctrl, void* data); static void onClickClearSettings(void*); static void callbackResetAllSettings(const LLSD& notification, const LLSD& response); }; diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 6f099f483..776f7fb9f 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -415,10 +415,9 @@ void LLPanelGroupGeneral::activate() LLGroupMgr::getInstance()->sendGroupTitlesRequest(mGroupID); LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mGroupID); - if (!gdatap || !gdatap->isMemberDataComplete() ) { - LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID); + LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID); } mFirstUse = FALSE; @@ -884,7 +883,7 @@ void LLPanelGroupGeneral::updateMembers() for( ; mMemberProgress != gdatap->mMembers.end() && ifirst << ", " << iter->second->getTitle() << llendl; + lldebugs << "Adding " << mMemberProgress->first << ", " << mMemberProgress->second->getTitle() << llendl; LLGroupMemberData* member = mMemberProgress->second; if (!member) { @@ -924,15 +923,15 @@ void LLPanelGroupGeneral::updateMembers() } sAllTime += all_timer.getElapsedTimeF32(); - llinfos << "Updated " << i << " of " << UPDATE_MEMBERS_PER_FRAME << "members in the list." << llendl; + lldebugs << "Updated " << i << " of " << UPDATE_MEMBERS_PER_FRAME << "members in the list." << llendl; if (mMemberProgress == gdatap->mMembers.end()) { - llinfos << " member list completed." << llendl; + lldebugs << " member list completed." << llendl; mListVisibleMembers->setEnabled(TRUE); - llinfos << "All Time: " << sAllTime << llendl; - llinfos << "SD Time: " << sSDTime << llendl; - llinfos << "Element Time: " << sElementTime << llendl; + lldebugs << "All Time: " << sAllTime << llendl; + lldebugs << "SD Time: " << sSDTime << llendl; + lldebugs << "Element Time: " << sElementTime << llendl; } else { diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index c9e765d7a..2f44a34bc 100644 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -576,8 +576,8 @@ void LLPanelGroupInvite::updateLists() if (!mPendingUpdate) { LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mImplementation->mGroupID); - LLGroupMgr::getInstance()->sendGroupMembersRequest(mImplementation->mGroupID); LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mImplementation->mGroupID); + LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mImplementation->mGroupID); } mPendingUpdate = TRUE; } diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 8ffae0c64..b7f09bd69 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -402,7 +402,7 @@ void LLPanelGroupRoles::activate() if (!gdatap || !gdatap->isMemberDataComplete() ) { - LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID); + LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID); } // Check role data. @@ -1979,7 +1979,7 @@ void LLPanelGroupRolesSubTab::update(LLGroupChange gc) if (!gdatap || !gdatap->isMemberDataComplete()) { - LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID); + LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID); } if (!gdatap || !gdatap->isRoleMemberDataComplete()) @@ -2571,7 +2571,7 @@ void LLPanelGroupActionsSubTab::handleActionSelect() } else { - LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID); + LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID); } if (gdatap->isRoleDataComplete()) diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 8929780d5..cd9d17587 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -131,7 +131,7 @@ public: virtual BOOL copyToClipboard() const; virtual void cutToClipboard(); virtual BOOL isClipboardPasteable() const; - virtual void pasteFromClipboard(); + virtual void pasteFromClipboard(bool only_copies = false); virtual void pasteLinkFromClipboard(); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual void performAction(LLInventoryModel* model, std::string action); @@ -604,7 +604,7 @@ BOOL LLTaskInvFVBridge::isClipboardPasteable() const return FALSE; } -void LLTaskInvFVBridge::pasteFromClipboard() +void LLTaskInvFVBridge::pasteFromClipboard(bool only_copies) { } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 57510b4ac..e5c7dbcb3 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -213,6 +213,7 @@ extern bool gShiftFrame; // function prototypes bool check_offer_throttle(const std::string& from_name, bool check_only); void callbackCacheEstateOwnerName(const LLUUID& id, const std::string& full_name, bool is_group); +static void process_money_balance_reply_extended(LLMessageSystem* msg); //inventory offer throttle globals LLFrameTimer gThrottleTimer; @@ -3633,29 +3634,11 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) } } - - // [Ansariel/Henri: Display name support] if (chatter && chatter->isAvatar()) { - if (LLAvatarNameCache::useDisplayNames()) - { - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(from_id, &avatar_name)) - { - static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - if (phoenix_name_system == 2 || (phoenix_name_system == 1 && avatar_name.mIsDisplayNameDefault)) - { - from_name = avatar_name.mDisplayName; - } - else - { - from_name = avatar_name.getCompleteName(); - } - } + if (LLAvatarNameCache::getPNSName(from_id, from_name)) chat.mFromName = from_name; - } } - // [/Ansariel/Henri: Display name support] BOOL visible_in_chat_bubble = FALSE; std::string verb; @@ -5706,20 +5689,20 @@ void process_money_balance_reply( LLMessageSystem* msg, void** ) gStatusBar->setLandCredit(credit); gStatusBar->setLandCommitted(committed); } - static std::deque recent; - if(!desc.empty() && gSavedSettings.getBOOL("NotifyMoneyChange") - && (std::find(recent.rbegin(), recent.rend(), tid) == recent.rend())) - { - // Make the user confirm the transaction, since they might - // have missed something during an event. - // *TODO:translate - LLSD args; - args["MESSAGE"] = desc; - LLNotificationsUtil::add("SystemMessage", args); - // Also send notification to chat -- MC - LLChat chat(desc); - LLFloaterChat::addChat(desc); + if (desc.empty() + || !gSavedSettings.getBOOL("NotifyMoneyChange")) + { + // ...nothing to display + return; + } + + // Suppress duplicate messages about the same transaction + static std::deque recent; + if (std::find(recent.rbegin(), recent.rend(), tid) != recent.rend()) + { + return; + } // Once the 'recent' container gets large enough, chop some // off the beginning. @@ -5732,6 +5715,215 @@ void process_money_balance_reply( LLMessageSystem* msg, void** ) } //LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL; recent.push_back(tid); + + if (msg->has("TransactionInfo")) + { + // ...message has extended info for localization + process_money_balance_reply_extended(msg); + } + else + { + // Only old dev grids will not supply the TransactionInfo block, + // so we can just use the hard-coded English string. + LLSD args; + args["MESSAGE"] = desc; + LLNotificationsUtil::add("SystemMessage", args); + + // Also send notification to chat -- MC + LLChat chat(desc); + LLFloaterChat::addChat(desc); + } +} + +static std::string reason_from_transaction_type(S32 transaction_type, + const std::string& item_desc) +{ + // *NOTE: The keys for the reason strings are unusual because + // an earlier version of the code used English language strings + // extracted from hard-coded server English descriptions. + // Keeping them so we don't have to re-localize them. + switch (transaction_type) + { + case TRANS_OBJECT_SALE: + { + LLStringUtil::format_map_t arg; + arg["ITEM"] = item_desc; + return LLTrans::getString("for item", arg); + } + case TRANS_LAND_SALE: + return LLTrans::getString("for a parcel of land"); + + case TRANS_LAND_PASS_SALE: + return LLTrans::getString("for a land access pass"); + + case TRANS_GROUP_LAND_DEED: + return LLTrans::getString("for deeding land"); + + case TRANS_GROUP_CREATE: + return LLTrans::getString("to create a group"); + + case TRANS_GROUP_JOIN: + return LLTrans::getString("to join a group"); + + case TRANS_UPLOAD_CHARGE: + return LLTrans::getString("to upload"); + + case TRANS_CLASSIFIED_CHARGE: + return LLTrans::getString("to publish a classified ad"); + + // These have no reason to display, but are expected and should not + // generate warnings + case TRANS_GIFT: + case TRANS_PAY_OBJECT: + case TRANS_OBJECT_PAYS: + return std::string(); + + default: + llwarns << "Unknown transaction type " + << transaction_type << llendl; + return std::string(); + } +} + +static void process_money_balance_reply_extended(LLMessageSystem* msg) +{ + // Added in server 1.40 and viewer 2.1, support for localization + // and agent ids for name lookup. + S32 transaction_type = 0; + LLUUID source_id; + BOOL is_source_group = false; + LLUUID dest_id; + BOOL is_dest_group = false; + S32 amount = 0; + std::string item_description; + BOOL success = false; + + msg->getS32("TransactionInfo", "TransactionType", transaction_type); + msg->getUUID("TransactionInfo", "SourceID", source_id); + msg->getBOOL("TransactionInfo", "IsSourceGroup", is_source_group); + msg->getUUID("TransactionInfo", "DestID", dest_id); + msg->getBOOL("TransactionInfo", "IsDestGroup", is_dest_group); + msg->getS32("TransactionInfo", "Amount", amount); + msg->getString("TransactionInfo", "ItemDescription", item_description); + msg->getBOOL("MoneyData", "TransactionSuccess", success); + LL_INFOS("Money") << "MoneyBalanceReply source " << source_id + << " dest " << dest_id + << " type " << transaction_type + << " item " << item_description << LL_ENDL; + + if (source_id.isNull() && dest_id.isNull()) + { + // this is a pure balance update, no notification required + return; + } + + std::string source_slurl; + if (is_source_group) + { + gCacheName->getGroupName(source_id, source_slurl); + } + else + { + LLAvatarNameCache::getPNSName(source_id, source_slurl); + } + + std::string dest_slurl; + if (is_dest_group) + { + gCacheName->getGroupName(dest_id, dest_slurl); + } + else + { + LLAvatarNameCache::getPNSName(dest_id, dest_slurl); + } + + std::string reason = + reason_from_transaction_type(transaction_type, item_description); + + LLStringUtil::format_map_t args; + args["REASON"] = reason; // could be empty + args["AMOUNT"] = llformat("%d", amount); + + // Need to delay until name looked up, so need to know whether or not + // is group + bool is_name_group = false; + LLUUID name_id; + std::string message; + static LLCachedControl no_transaction_clutter("LiruNoTransactionClutter", false); + std::string notification = no_transaction_clutter ? "Payment" : "SystemMessage"; + LLSD final_args; + LLSD payload; + + bool you_paid_someone = (source_id == gAgentID); + if (you_paid_someone) + { + args["NAME"] = dest_slurl; + is_name_group = is_dest_group; + name_id = dest_id; + if (!reason.empty()) + { + if (dest_id.notNull()) + { + message = success ? LLTrans::getString("you_paid_ldollars", args) : + LLTrans::getString("you_paid_failure_ldollars", args); + } + else + { + // transaction fee to the system, eg, to create a group + message = success ? LLTrans::getString("you_paid_ldollars_no_name", args) : + LLTrans::getString("you_paid_failure_ldollars_no_name", args); + } + } + else + { + if (dest_id.notNull()) + { + message = success ? LLTrans::getString("you_paid_ldollars_no_reason", args) : + LLTrans::getString("you_paid_failure_ldollars_no_reason", args); + } + else + { + // no target, no reason, you just paid money + message = success ? LLTrans::getString("you_paid_ldollars_no_info", args) : + LLTrans::getString("you_paid_failure_ldollars_no_info", args); + } + } + final_args["MESSAGE"] = message; + } + else + { + // ...someone paid you + args["NAME"] = source_slurl; + is_name_group = is_source_group; + name_id = source_id; + if (!reason.empty()) + { + message = LLTrans::getString("paid_you_ldollars", args); + } + else + { + message = LLTrans::getString("paid_you_ldollars_no_reason", args); + } + final_args["MESSAGE"] = message; + + // make notification loggable + payload["from_id"] = source_id; + } + + // Despite using SLURLs, wait until the name is available before + // showing the notification, otherwise the UI layout is strange and + // the user sees a "Loading..." message + if (is_name_group) + { + gCacheName->getGroup(name_id, + boost::bind(&LLNotificationsUtil::add, + notification, final_args, payload)); + } + else + { + LLAvatarNameCache::get(name_id, + boost::bind(&LLNotificationsUtil::add, + notification, final_args, payload)); } } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 01eb55b10..f075e7c15 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1565,7 +1565,6 @@ void LLViewerRegion::unpackRegionHandshake() msg->sendReliable(host); } - void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) { capabilityNames.append("AgentState"); @@ -1576,11 +1575,9 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("CopyInventoryFromNotecard"); capabilityNames.append("CreateInventoryCategory"); capabilityNames.append("DispatchRegionInfo"); + capabilityNames.append("EnvironmentSettings"); capabilityNames.append("EstateChangeInfo"); capabilityNames.append("EventQueueGet"); - capabilityNames.append("EnvironmentSettings"); - /*capabilityNames.append("ObjectMedia"); - capabilityNames.append("ObjectMediaNavigate");*/ if (gSavedSettings.getBOOL("UseHTTPInventory")) //Caps suffixed with 2 by LL. Don't update until rest of fetch system is updated first. { @@ -1591,12 +1588,12 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) } capabilityNames.append("GetDisplayNames"); - capabilityNames.append("GetTexture"); capabilityNames.append("GetMesh"); capabilityNames.append("GetObjectCost"); capabilityNames.append("GetObjectPhysicsData"); + capabilityNames.append("GetTexture"); + capabilityNames.append("GroupMemberData"); capabilityNames.append("GroupProposalBallot"); - capabilityNames.append("HomeLocation"); //capabilityNames.append("LandResources"); //Script limits (llfloaterscriptlimits.cpp) capabilityNames.append("MapLayer"); @@ -1606,9 +1603,11 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) #endif //MESH_IMPORT capabilityNames.append("NavMeshGenerationStatus"); capabilityNames.append("NewFileAgentInventory"); + /*capabilityNames.append("ObjectMedia"); + capabilityNames.append("ObjectMediaNavigate");*/ capabilityNames.append("ObjectNavMeshProperties"); + capabilityNames.append("ParcelNavigateMedia"); //Singu Note: Removed by Baker, do we need this? capabilityNames.append("ParcelPropertiesUpdate"); - capabilityNames.append("ParcelNavigateMedia"); capabilityNames.append("ParcelVoiceInfoRequest"); capabilityNames.append("ProductInfoRequest"); capabilityNames.append("ProvisionVoiceAccountRequest"); @@ -1622,10 +1621,10 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("SendUserReport"); capabilityNames.append("SendUserReportWithScreenshot"); capabilityNames.append("ServerReleaseNotes"); - capabilityNames.append("SimConsole"); - capabilityNames.append("SimulatorFeatures"); capabilityNames.append("SetDisplayName"); + capabilityNames.append("SimConsole"); //Singu Note: Removed by Baker, sim console won't work without this. capabilityNames.append("SimConsoleAsync"); + capabilityNames.append("SimulatorFeatures"); capabilityNames.append("StartGroupProposal"); capabilityNames.append("TerrainNavMeshProperties"); capabilityNames.append("TextureStats"); @@ -1633,10 +1632,10 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("UpdateAgentInformation"); capabilityNames.append("UpdateAgentLanguage"); capabilityNames.append("UpdateGestureAgentInventory"); - capabilityNames.append("UpdateNotecardAgentInventory"); - capabilityNames.append("UpdateScriptAgent"); capabilityNames.append("UpdateGestureTaskInventory"); + capabilityNames.append("UpdateNotecardAgentInventory"); capabilityNames.append("UpdateNotecardTaskInventory"); + capabilityNames.append("UpdateScriptAgent"); capabilityNames.append("UpdateScriptTask"); capabilityNames.append("UploadBakedTexture"); //capabilityNames.append("ViewerMetrics"); diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index 6013a47f2..8a2667555 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -873,7 +873,7 @@ void send_stats() llinfos << "Misc Stats: int_1: " << misc["int_1"] << " int_2: " << misc["int_2"] << llendl; llinfos << "Misc Stats: string_1: " << misc["string_1"] << " string_2: " << misc["string_2"] << llendl; - body["DisplayNamesEnabled"] = gSavedSettings.getS32("PhoenixNameSystem") > 0; + body["DisplayNamesEnabled"] = gSavedSettings.getS32("PhoenixNameSystem") == 1 || gSavedSettings.getS32("PhoenixNameSystem") == 2; body["DisplayNamesShowUsername"] = gSavedSettings.getS32("PhoenixNameSystem") == 1; body["MinimalSkin"] = false; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index d147f6c4b..3abfd49a7 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3751,8 +3751,8 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name) static const LLCachedControl phoenix_name_system("PhoenixNameSystem", 0); - bool show_display_names = phoenix_name_system > 0; - bool show_usernames = phoenix_name_system < 2; + bool show_display_names = phoenix_name_system == 1 || phoenix_name_system == 2; + bool show_usernames = phoenix_name_system != 2; if (show_display_names && LLAvatarNameCache::useDisplayNames()) { LLAvatarName av_name; diff --git a/indra/newview/rlvui.cpp b/indra/newview/rlvui.cpp index 2f1d59091..405dc7909 100644 --- a/indra/newview/rlvui.cpp +++ b/indra/newview/rlvui.cpp @@ -265,7 +265,7 @@ void RlvUIEnabler::onToggleShowNames(bool fQuitting) else { LLAvatarNameCache::setForceDisplayNames(false); - LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getS32("PhoenixNameSystem") != 0); + LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getS32("PhoenixNameSystem") == 1 || gSavedSettings.getS32("PhoenixNameSystem") == 2); } LLVOAvatar::invalidateNameTags(); // See handleDisplayNamesOptionChanged() } diff --git a/indra/newview/skins/default/xui/en-us/floater_tools.xml b/indra/newview/skins/default/xui/en-us/floater_tools.xml index 6fe97a3bc..b981ef791 100644 --- a/indra/newview/skins/default/xui/en-us/floater_tools.xml +++ b/indra/newview/skins/default/xui/en-us/floater_tools.xml @@ -99,9 +99,9 @@ Reference - + + -