diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/cmake/Copy3rdPartyLibs.cmake | 1 | ||||
| -rw-r--r-- | indra/cmake/run_build_test.py | 18 | ||||
| -rw-r--r-- | indra/newview/llimview.cpp | 45 | ||||
| -rw-r--r-- | indra/newview/llimview.h | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llnearbychathandler.cpp | 75 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 5 | 
7 files changed, 116 insertions, 34 deletions
| diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 2dd296bf12..95ed5d6bc8 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -221,6 +221,7 @@ elseif(LINUX)          libcrypto.so.0.9.7          libdb-4.2.so          libexpat.so +        libexpat.so.1          libgmock_main.so          libgmock.so.0          libgmodule-2.0.so diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py index 104585c195..e377aeef48 100644 --- a/indra/cmake/run_build_test.py +++ b/indra/cmake/run_build_test.py @@ -82,10 +82,24 @@ def main(command, libpath=[], vars={}):          dirs = os.environ.get(var, "").split(os.pathsep)          # Append the sequence in libpath          print "%s += %r" % (var, libpath) -        dirs.extend(libpath) +        for dir in libpath: +            # append system paths at the end +            if dir in ('/lib', '/usr/lib'): +                dirs.append(dir) +            # prepend non-system paths +            else: +                dirs.insert(0, dir) + +        # Filter out some useless pieces +        clean_dirs = [] +        for dir in dirs: +            if dir and dir not in ('', '.'): +                clean_dirs.append(dir) +          # Now rebuild the path string. This way we use a minimum of separators          # -- and we avoid adding a pointless separator when libpath is empty. -        os.environ[var] = os.pathsep.join(dirs) +        os.environ[var] = os.pathsep.join(clean_dirs) +        print "%s = %r" % (var, os.environ[var])      # Now handle arbitrary environment variables. The tricky part is ensuring      # that all the keys and values we try to pass are actually strings.      if vars: diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 129c9aec14..493398c68a 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -69,7 +69,6 @@ const static std::string IM_TEXT("message");  const static std::string IM_FROM("from");  const static std::string IM_FROM_ID("from_id"); -const static std::string NO_SESSION("(IM Session Doesn't Exist)");  const static std::string ADHOC_NAME_SUFFIX(" Conference");  const static std::string NEARBY_P2P_BY_OTHER("nearby_P2P_by_other"); @@ -231,25 +230,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  		new LLSessionTimeoutTimer(mSessionID, SESSION_INITIALIZATION_TIMEOUT);  	} -	// *WORKAROUND: for server hard-coded string in indra\newsim\llsimchatterbox.cpp -	if (isAdHocSessionType() && IM_SESSION_INVITE == type) -	{ -		// For an ad-hoc incoming chat name is received from the server and is in 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()); - -		// additional check that session name is what we expected -		if ("Conference" == conference_word) -		{ -			LLStringUtil::format_map_t args; -			args["[AGENT_NAME]"] = name; -			LLTrans::findString(mName, "conference-title-incoming", args); -		} -	} -  	if (IM_NOTHING_SPECIAL == type)  	{  		mCallBackEnabled = LLVoiceClient::getInstance()->isSessionCallBackPossible(mSessionID); @@ -266,6 +246,27 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  		LLLogChat::loadAllHistory(mHistoryFileName, chat_history);  		addMessagesFromHistory(chat_history);  	} + +	// Localizing name of ad-hoc session. STORM-153 +	// Changing name should happen here- after the history file was created, so that +	// 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()); + +		// additional check that session name is what we expected +		if ("Conference" == conference_word) +		{ +			LLStringUtil::format_map_t args; +			args["[AGENT_NAME]"] = name; +			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) @@ -791,14 +792,14 @@ LLIMModel::LLIMSession* LLIMModel::addMessageSilently(const LLUUID& session_id,  } -const std::string& LLIMModel::getName(const LLUUID& session_id) const +const std::string LLIMModel::getName(const LLUUID& session_id) const  {  	LLIMSession* session = findIMSession(session_id);  	if (!session)   	{  		llwarns << "session " << session_id << "does not exist " << llendl; -		return NO_SESSION; +		return LLTrans::getString("no_session_message");  	}  	return session->mName; diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 4ce94773bf..ba8c7ae489 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -230,7 +230,7 @@ public:  	 * For an incoming ad-hoc chat - is received from the server and is in a from of "<Avatar's name> Conference"  	 *	It is updated in LLIMModel::LLIMSession's constructor to localize the "Conference".  	 */ -	const std::string& getName(const LLUUID& session_id) const; +	const std::string getName(const LLUUID& session_id) const;  	/**   	 * Get number of unread messages in a session with session_id diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 02e7f0b9e2..311d791319 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2471,6 +2471,10 @@ void LLFolderBridge::folderOptionsMenu()  		{  			disabled_items.push_back(std::string("Remove From Outfit"));  		} +		if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID)) +		{ +			disabled_items.push_back(std::string("Replace Outfit")); +		}  		mItems.push_back(std::string("Outfit Separator"));  	}  	LLMenuGL* menup = dynamic_cast<LLMenuGL*>(mMenu.get()); diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index a747c228a6..b6d2e02eef 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -64,7 +64,7 @@ public:  	typedef boost::function<LLToastPanelBase* (void )> create_toast_panel_callback_t;  	void setCreatePanelCallback(create_toast_panel_callback_t value) { m_create_toast_panel_callback_t = value;} -	void onToastDestroyed	(LLToast* toast); +	void onToastDestroyed	(LLToast* toast, bool app_quitting);  	void onToastFade		(LLToast* toast);  	void reshape			(S32 width, S32 height, BOOL called_from_parent); @@ -96,6 +96,7 @@ public:  	}  protected: +	void	deactivateToast(LLToast* toast);  	void	addToToastPool(LLToast* toast)  	{  		toast->setVisible(FALSE); @@ -116,14 +117,65 @@ protected:  	bool	mStopProcessing;  }; +//----------------------------------------------------------------------------------------------- +// LLNearbyChatToast +//----------------------------------------------------------------------------------------------- + +// We're deriving from LLToast to be able to override onClose() +// in order to handle closing nearby chat toasts properly. +class LLNearbyChatToast : public LLToast +{ +	LOG_CLASS(LLNearbyChatToast); +public: +	LLNearbyChatToast(const LLToast::Params& p, LLNearbyChatScreenChannel* nc_channelp) +	:	LLToast(p), +	 	mNearbyChatScreenChannelp(nc_channelp) +	{ +	} + +	/*virtual*/ void onClose(bool app_quitting); + +private: +	LLNearbyChatScreenChannel*	mNearbyChatScreenChannelp; +}; + +//----------------------------------------------------------------------------------------------- +// LLNearbyChatScreenChannel +//----------------------------------------------------------------------------------------------- + +void LLNearbyChatScreenChannel::deactivateToast(LLToast* toast) +{ +	std::vector<LLToast*>::iterator pos = std::find(m_active_toasts.begin(), m_active_toasts.end(), toast); + +	if (pos == m_active_toasts.end()) +	{ +		llassert(pos == m_active_toasts.end()); +		return; +	} + +	m_active_toasts.erase(pos); +} +  void	LLNearbyChatScreenChannel::createOverflowToast(S32 bottom, F32 timer)  {  	//we don't need overflow toast in nearby chat  } -void LLNearbyChatScreenChannel::onToastDestroyed(LLToast* toast) +void LLNearbyChatScreenChannel::onToastDestroyed(LLToast* toast, bool app_quitting)  {	 -	mStopProcessing = true; +	if (app_quitting) +	{ +		// Viewer is quitting. +		// Immediately stop processing chat messages (EXT-1419). +		mStopProcessing = true; +	} +	else +	{ +		// The toast is being closed by user (STORM-192). +		// Remove it from the list of active toasts to prevent +		// further references to the invalid pointer. +		deactivateToast(toast); +	}  }  void LLNearbyChatScreenChannel::onToastFade(LLToast* toast) @@ -132,9 +184,7 @@ void LLNearbyChatScreenChannel::onToastFade(LLToast* toast)  	if(!toast)  		return; -	std::vector<LLToast*>::iterator pos = std::find(m_active_toasts.begin(),m_active_toasts.end(),toast); -	if(pos!=m_active_toasts.end()) -		m_active_toasts.erase(pos); +	deactivateToast(toast);  	addToToastPool(toast); @@ -153,11 +203,10 @@ bool	LLNearbyChatScreenChannel::createPoolToast()  	p.lifetime_secs = gSavedSettings.getS32("NearbyToastLifeTime");  	p.fading_time_secs = gSavedSettings.getS32("NearbyToastFadingTime"); -	LLToast* toast = new LLToast(p);  +	LLToast* toast = new LLNearbyChatToast(p, this);  	toast->setOnFadeCallback(boost::bind(&LLNearbyChatScreenChannel::onToastFade, this, _1)); -	toast->setOnToastDestroyedCallback(boost::bind(&LLNearbyChatScreenChannel::onToastDestroyed, this, _1));  	m_toast_pool.push_back(toast);  	return true; @@ -452,4 +501,14 @@ void LLNearbyChatHandler::onDeleteToast(LLToast* toast)  } +//----------------------------------------------------------------------------------------------- +// LLNearbyChatToast +//----------------------------------------------------------------------------------------------- + +// virtual +void LLNearbyChatToast::onClose(bool app_quitting) +{ +	mNearbyChatScreenChannelp->onToastDestroyed(this, app_quitting); +} +// EOF diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 3fa5c7afec..6b3fd9ff9e 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3029,7 +3029,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].      Ad-hoc Conference    </string>    <string name="conference-title-incoming"> -    [AGENT_NAME] Conference +    Conference with [AGENT_NAME]    </string>    <string name="inventory_item_offered-im">      Inventory item offered @@ -3039,6 +3039,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].    </string> +  <string name="no_session_message"> +    (IM Session Doesn't Exist) +  </string>    <string name="only_user_message">      You are the only user in this session.    </string> | 
