diff --git a/.hgtags b/.hgtags index af1d6bea4a905c025f40023e704a7ad7aade8a49..584e5a1e17fd6a55af806bd1af16ce05082fb14d 100644 --- a/.hgtags +++ b/.hgtags @@ -32,3 +32,4 @@ b0cd7e150009809a0b5b0a9d5785cd4bb230413a 2.2.0-beta3 98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-beta1 1415e6538d54fd5d568ee88343424d57c6803c2c 2.2.0-release 98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-start +a3c12342b1af0951b8aa3b828aacef17fcea8178 2.3.0-beta1 diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp index 522b99bc02db21fac0cd2e3d53cb99282e6c357b..a8f53a38c39c74138818f8056377cbccaaef5afe 100644 --- a/indra/llmessage/llcachename.cpp +++ b/indra/llmessage/llcachename.cpp @@ -556,25 +556,38 @@ std::string LLCacheName::buildUsername(const std::string& full_name) //static std::string LLCacheName::buildLegacyName(const std::string& complete_name) { - boost::regex complete_name_regex("(.+)( \\()([A-Za-z]+)(.[A-Za-z]+)*(\\))"); - boost::match_results<std::string::const_iterator> name_results; - if (!boost::regex_match(complete_name, name_results, complete_name_regex)) return complete_name; + // regexp doesn't play nice with unicode, chop off the display name + S32 open_paren = complete_name.rfind(" ("); - std::string legacy_name = name_results[3]; + if (open_paren == std::string::npos) + { + return complete_name; + } + + std::string username = complete_name.substr(open_paren); + boost::regex complete_name_regex("( \\()([a-z0-9]+)(.[a-z]+)*(\\))"); + boost::match_results<std::string::const_iterator> name_results; + if (!boost::regex_match(username, name_results, complete_name_regex)) return complete_name; + + std::string legacy_name = name_results[2]; // capitalize the first letter std::string cap_letter = legacy_name.substr(0, 1); LLStringUtil::toUpper(cap_letter); - legacy_name = cap_letter + legacy_name.substr(1); - - if (name_results[4].matched) - { - std::string last_name = name_results[4]; + legacy_name = cap_letter + legacy_name.substr(1); + + if (name_results[3].matched) + { + std::string last_name = name_results[3]; std::string cap_letter = last_name.substr(1, 1); LLStringUtil::toUpper(cap_letter); - last_name = cap_letter + last_name.substr(2); - legacy_name = legacy_name + " " + last_name; - } - + last_name = cap_letter + last_name.substr(2); + legacy_name = legacy_name + " " + last_name; + } + else + { + legacy_name = legacy_name + " Resident"; + } + return legacy_name; } diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp index 7f6df627e016ff37b7950dc03b4a400321259754..3f0deb98cdbe7ecc3a2e8796ee40bc44c957bfc6 100644 --- a/indra/newview/llhints.cpp +++ b/indra/newview/llhints.cpp @@ -109,7 +109,14 @@ class LLHintPopup : public LLPanel /*virtual*/ BOOL postBuild(); - void onClickClose() { hide(); LLNotifications::instance().cancel(mNotification); } + void onClickClose() + { + if (!mHidden) + { + hide(); + LLNotifications::instance().cancel(mNotification); + } + } void draw(); void hide() { if(!mHidden) {mHidden = true; mFadeTimer.reset();} } diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 914e7a3df09eed78dc904522b1b388070007f9de..164c51a9e05f85219ea0a18b315cc8c644a0757a 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -257,21 +257,17 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& // history files have consistent (English) names in different locales. if (isAdHocSessionType() && IM_SESSION_INVITE == type) { - // Name here has a form of "<Avatar's name> Conference" - // Lets update it to localize the "Conference" word. See EXT-8429. - S32 separator_index = mName.rfind(" "); - std::string name = mName.substr(0, separator_index); - ++separator_index; - std::string conference_word = mName.substr(separator_index, mName.length()); + LLAvatarNameCache::get(mOtherParticipantID, + boost::bind(&LLIMModel::LLIMSession::onAdHocNameCache, + this, _2)); + } +} - // additional check that session name is what we expected - if ("Conference" == conference_word) - { +void LLIMModel::LLIMSession::onAdHocNameCache(const LLAvatarName& av_name) +{ LLStringUtil::format_map_t args; - args["[AGENT_NAME]"] = name; + args["[AGENT_NAME]"] = av_name.getCompleteName(); LLTrans::findString(mName, "conference-title-incoming", args); - } - } } void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction) diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 3da44658621675cc5d1bd9f3fbcd358cb9d0d5da..650d329e18548d3ec0ae44de109b92e663de86ea 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -100,6 +100,8 @@ class LLIMModel : public LLSingleton<LLIMModel> void onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name); + void onAdHocNameCache(const LLAvatarName& av_name); + //*TODO make private static std::string generateHash(const std::set<LLUUID>& sorted_uuids); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index f4f1235d55ea74d494c5fc80061b701a972029e5..a779a1735c6f6fb952de98b69a238debbef64224 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -33,6 +33,8 @@ #include <string> #include <vector> +#include <boost/signals2.hpp> + #include "imageids.h" // IMG_INVISIBLE #include "llchat.h" #include "lldrawpoolalpha.h" @@ -71,7 +73,8 @@ class LLVOAvatarSkeletonInfo; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLVOAvatar : public LLViewerObject, - public LLCharacter + public LLCharacter, + public boost::signals2::trackable { public: friend class LLVOAvatarSelf; diff --git a/indra/newview/skins/default/xui/en/floater_display_name.xml b/indra/newview/skins/default/xui/en/floater_display_name.xml index 7a3fb9334aa38156a75b0b60dc482f8a8079ecba..9a9fd32a773b3a07584c45368ce4f062d17bc6de 100644 --- a/indra/newview/skins/default/xui/en/floater_display_name.xml +++ b/indra/newview/skins/default/xui/en/floater_display_name.xml @@ -63,7 +63,7 @@ width="300" height="20" font="SansSerif" - name="set_name_label"> + name="name_confirm_label"> Type your new name again to confirm: </text> <line_editor