diff options
| -rw-r--r-- | indra/newview/llavataractions.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llbottomtray.cpp | 58 | ||||
| -rw-r--r-- | indra/newview/llbottomtray.h | 2 | ||||
| -rw-r--r-- | indra/newview/llimview.cpp | 115 | ||||
| -rw-r--r-- | indra/newview/llimview.h | 22 | ||||
| -rw-r--r-- | indra/newview/llnavigationbar.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llpanelpicks.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llpanelpicks.h | 5 | ||||
| -rw-r--r-- | indra/newview/llsyswellwindow.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_im_session.xml | 12 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_picks.xml | 7 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 8 | 
12 files changed, 177 insertions, 109 deletions
| diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 33dc7ee2c8..636b1de4d4 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -211,11 +211,9 @@ void LLAvatarActions::startCall(const LLUUID& id)  	std::string name;  	gCacheName->getFullName(id, name); -	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); +	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id, true);  	if (session_id != LLUUID::null)  	{ -		// always open IM window when connecting to voice -		LLIMFloater::show(session_id);  		gIMMgr->startCall(session_id);  	}  	make_ui_sound("UISndStartIM"); @@ -239,15 +237,12 @@ void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids)  	// create the new ad hoc voice session  	const std::string title = LLTrans::getString("conference-title");  	LLUUID session_id = gIMMgr->addSession(title, IM_SESSION_CONFERENCE_START, -										   ids[0], id_array); +										   ids[0], id_array, true);  	if (session_id == LLUUID::null)  	{  		return;  	} -	// always open IM window when connecting to voice -	LLIMFloater::show(session_id); -  	// start the call once the session has fully initialized  	gIMMgr->autoStartCallOnStartup(session_id); diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 8c793873f4..8389895479 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -78,6 +78,9 @@ LLBottomTray::LLBottomTray(const LLSD&)  	LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraPresets, _2));  	LLIMMgr::getInstance()->addSessionObserver(this); +	//managing chiclets for voice calls +	LLIMModel::getInstance()->addNewMsgCallback(boost::bind(&LLBottomTray::onNewIM, this, _1)); +  	//this is to fix a crash that occurs because LLBottomTray is a singleton  	//and thus is deleted at the end of the viewers lifetime, but to be cleanly  	//destroyed LLBottomTray requires some subsystems that are long gone @@ -143,25 +146,22 @@ LLIMChiclet* LLBottomTray::createIMChiclet(const LLUUID& session_id)  //virtual  void LLBottomTray::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id)  { -	if(getChicletPanel()) -	{ -		if(getChicletPanel()->findChiclet<LLChiclet>(session_id)) -		{ +	if (!getChicletPanel()) return; -		} -		else -		{ -			LLIMChiclet* chiclet = createIMChiclet(session_id); -			if(chiclet) -			{ -				chiclet->setIMSessionName(name); -				chiclet->setOtherParticipantId(other_participant_id); -			} -			else -			{ -				llerrs << "Could not create chiclet" << llendl; -			} -		} +	if (getChicletPanel()->findChiclet<LLChiclet>(session_id)) return; + +	// For im sessions started as voice call chiclet gets created on the first incoming message +	if (gIMMgr->isVoiceCall(session_id)) return; + +	LLIMChiclet* chiclet = createIMChiclet(session_id); +	if(chiclet) +	{ +		chiclet->setIMSessionName(name); +		chiclet->setOtherParticipantId(other_participant_id); +	} +	else +	{ +		llerrs << "Could not create chiclet" << llendl;  	}  } @@ -194,6 +194,28 @@ void LLBottomTray::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID&  	}  } +void LLBottomTray::onNewIM(const LLSD& data) +{ +	LLUUID from_id = data["from_id"]; +	if (from_id.isNull() || gAgentID == from_id) return; + +	LLUUID session_id = data["session_id"]; +	if (session_id.isNull()) return; + +	if (!gIMMgr->isVoiceCall(session_id)) return; + +	if (getChicletPanel()->findChiclet<LLChiclet>(session_id)) return; + +	//first real message, time to create chiclet +	LLIMChiclet* chiclet = createIMChiclet(session_id); +	if(chiclet) +	{ +		chiclet->setIMSessionName(LLIMModel::getInstance()->getName(session_id)); +		chiclet->setOtherParticipantId(LLIMModel::getInstance()->getOtherParticipantID(session_id)); +	} +} + +  // virtual  void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, bool proximal)  { diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index fa204ee9ea..1adea24ee4 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -75,6 +75,8 @@ public:  	virtual void sessionRemoved(const LLUUID& session_id);  	void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id); +	void onNewIM(const LLSD& data); +  	virtual void reshape(S32 width, S32 height, BOOL called_from_parent);  	virtual void onFocusLost(); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index b50d4674f7..1d56fc0cab 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -153,7 +153,7 @@ LLIMModel::LLIMModel()  	addNewMsgCallback(toast_callback);  } -LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids) +LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice)  :	mSessionID(session_id),  	mName(name),  	mType(type), @@ -167,7 +167,8 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	mCallBackEnabled(true),  	mTextIMPossible(true),  	mOtherParticipantIsAvatar(true), -	mStartCallOnInitialize(false) +	mStartCallOnInitialize(false), +	mStartedAsIMCall(voice)  {  	// set P2P type by default  	mSessionType = P2P_SESSION; @@ -236,24 +237,25 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction)  { -	// *TODO: remove hardcoded string!!!!!!!!!!! -  	bool is_p2p_session = dynamic_cast<LLVoiceChannelP2P*>(mVoiceChannel);  	std::string other_avatar_name;  	if(is_p2p_session)  	{  		gCacheName->getFullName(mOtherParticipantID, other_avatar_name); +		std::string you = LLTrans::getString("You"); +		std::string started_call = LLTrans::getString("started_call"); +		std::string joined_call = LLTrans::getString("joined_call");  		if(direction == LLVoiceChannel::INCOMING_CALL)  		{  			switch(new_state)  			{  			case LLVoiceChannel::STATE_CALL_STARTED : -				LLIMModel::getInstance()->addMessage(mSessionID, other_avatar_name, mOtherParticipantID, "Started a voice call"); +				LLIMModel::getInstance()->addMessageSilently(mSessionID, other_avatar_name, mOtherParticipantID, started_call);  				break;  			case LLVoiceChannel::STATE_CONNECTED : -				LLIMModel::getInstance()->addMessage(mSessionID, "You", gAgent.getID(), "Joined the voice call"); +				LLIMModel::getInstance()->addMessageSilently(mSessionID, you, gAgent.getID(), joined_call);  			default:  				break;  			} @@ -263,10 +265,10 @@ void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::ES  			switch(new_state)  			{  			case LLVoiceChannel::STATE_CALL_STARTED : -				LLIMModel::getInstance()->addMessage(mSessionID, "You", gAgent.getID(), "Started a voice call"); +				LLIMModel::getInstance()->addMessageSilently(mSessionID, you, gAgent.getID(), started_call);  				break;  			case LLVoiceChannel::STATE_CONNECTED : -				LLIMModel::getInstance()->addMessage(mSessionID, other_avatar_name, mOtherParticipantID, "Joined the voice call"); +				LLIMModel::getInstance()->addMessageSilently(mSessionID, other_avatar_name, mOtherParticipantID, joined_call);  			default:  				break;  			} @@ -452,7 +454,7 @@ void LLIMModel::testMessages()  //session name should not be empty  bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type,  -						   const LLUUID& other_participant_id, const std::vector<LLUUID>& ids) +						   const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice)  {  	if (name.empty())  	{ @@ -466,7 +468,7 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co  		return false;  	} -	LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids); +	LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids, voice);  	mId2SessionMap[session_id] = session;  	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id); @@ -475,6 +477,12 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co  } +bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, bool voice) +{ +	std::vector<LLUUID> no_ids; +	return newSession(session_id, name, type, other_participant_id, no_ids, voice); +} +  bool LLIMModel::clearSession(const LLUUID& session_id)  {  	if (mId2SessionMap.find(session_id) == mId2SessionMap.end()) return false; @@ -574,12 +582,33 @@ bool LLIMModel::proccessOnlineOfflineNotification(  bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& from_id,   						   const std::string& utf8_text, bool log2file /* = true */) {  + +	LLIMSession* session = addMessageSilently(session_id, from, from_id, utf8_text, log2file); +	if (!session) return false; + +	// notify listeners +	LLSD arg; +	arg["session_id"] = session_id; +	arg["num_unread"] = session->mNumUnread; +	arg["participant_unread"] = session->mParticipantUnreadMessageCount; +	arg["message"] = utf8_text; +	arg["from"] = from; +	arg["from_id"] = from_id; +	arg["time"] = LLLogChat::timestamp(false); +	mNewMsgSignal(arg); + +	return true; +} + +LLIMModel::LLIMSession* LLIMModel::addMessageSilently(const LLUUID& session_id, const std::string& from, const LLUUID& from_id,  +													 const std::string& utf8_text, bool log2file /* = true */) +{  	LLIMSession* session = findIMSession(session_id);  	if (!session)  	{  		llwarns << "session " << session_id << "does not exist " << llendl; -		return false; +		return NULL;  	}  	addToHistory(session_id, from, from_id, utf8_text); @@ -593,19 +622,7 @@ bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, co  		++(session->mParticipantUnreadMessageCount);  	} - -	// notify listeners -	LLSD arg; -	arg["session_id"] = session_id; -	arg["num_unread"] = session->mNumUnread; -	arg["participant_unread"] = session->mParticipantUnreadMessageCount; -	arg["message"] = utf8_text; -	arg["from"] = from; -	arg["from_id"] = from_id; -	arg["time"] = LLLogChat::timestamp(false); -	mNewMsgSignal(arg); - -	return true; +	return session;  } @@ -1056,8 +1073,8 @@ public:  				|| mInvitiationType == LLIMMgr::INVITATION_TYPE_IMMEDIATE)  				&& LLIMModel::getInstance()->findIMSession(mSessionID))  			{ -				// always open IM window when connecting to voice -				LLIMFloater::show(mSessionID); +				// TODO remove in 2010, for voice calls we do not open an IM window +				//LLIMFloater::show(mSessionID);  			}  			gIMMgr->clearPendingAgentListUpdates(mSessionID); @@ -1582,11 +1599,7 @@ void LLIncomingCallDialog::processCallResponse(S32 response)  			if (voice)  			{ -				if (gIMMgr->startCall(session_id, LLVoiceChannel::INCOMING_CALL)) -				{ -					// always open IM window when connecting to voice -					LLIMFloater::show(session_id); -				} +				gIMMgr->startCall(session_id, LLVoiceChannel::INCOMING_CALL);  			}  			gIMMgr->clearPendingAgentListUpdates(session_id); @@ -1625,11 +1638,7 @@ void LLIncomingCallDialog::processCallResponse(S32 response)  				}  			} -			LLUUID new_session_id = gIMMgr->addSession(correct_session_name, type, session_id); -			if (new_session_id != LLUUID::null) -			{ -				LLIMFloater::show(new_session_id); -			} +			LLUUID new_session_id = gIMMgr->addSession(correct_session_name, type, session_id, true);  			std::string url = gAgent.getRegion()->getCapability(  				"ChatSessionRequest"); @@ -1705,11 +1714,7 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)  					payload["session_handle"].asString(),  					payload["session_uri"].asString()); -				if (gIMMgr->startCall(session_id)) -				{ -					// always open IM window when connecting to voice -					LLIMFloater::show(session_id); -				} +				gIMMgr->startCall(session_id);  				gIMMgr->clearPendingAgentListUpdates(session_id);  				gIMMgr->clearPendingInvitation(session_id); @@ -1719,11 +1724,7 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)  				LLUUID new_session_id = gIMMgr->addSession(  					payload["session_name"].asString(),  					type, -					session_id); -				if (new_session_id != LLUUID::null) -				{ -					LLIMFloater::show(new_session_id); -				} +					session_id, true);  				std::string url = gAgent.getRegion()->getCapability(  					"ChatSessionRequest"); @@ -2018,11 +2019,7 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name,  							const std::string& voice_session_handle,  							const std::string& caller_uri)  { -	LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id); -	if (session_id != LLUUID::null) -	{ -		LLIMFloater::show(session_id); -	} +	LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id, true);  	LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);  	if (speaker_mgr) @@ -2043,11 +2040,11 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name,  LLUUID LLIMMgr::addSession(  	const std::string& name,  	EInstantMessage dialog, -	const LLUUID& other_participant_id) +	const LLUUID& other_participant_id, bool voice)  {  	LLDynamicArray<LLUUID> ids;  	ids.put(other_participant_id); -	return addSession(name, dialog, other_participant_id, ids); +	return addSession(name, dialog, other_participant_id, ids, voice);  }  // Adds a session using the given session_id.  If the session already exists  @@ -2056,7 +2053,7 @@ LLUUID LLIMMgr::addSession(  	const std::string& name,  	EInstantMessage dialog,  	const LLUUID& other_participant_id, -	const LLDynamicArray<LLUUID>& ids) +	const LLDynamicArray<LLUUID>& ids, bool voice)  {  	if (0 == ids.getLength())  	{ @@ -2075,7 +2072,7 @@ LLUUID LLIMMgr::addSession(  	if (new_session)  	{ -		LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids); +		LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids, voice);  	} @@ -2454,6 +2451,14 @@ bool LLIMMgr::endCall(const LLUUID& session_id)  	return true;  } +bool LLIMMgr::isVoiceCall(const LLUUID& session_id) +{ +	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id); +	if (!im_session) return false; + +	return im_session->mStartedAsIMCall; +} +  // create a floater and update internal representation for  // consistency. Returns the pointer, caller (the class instance since  // it is a private method) is not responsible for deleting the diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index e2fcd63e28..6eb3f3d07f 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -65,7 +65,7 @@ public:  		} SType;  		LLIMSession(const LLUUID& session_id, const std::string& name,  -			const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids); +			const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice);  		virtual ~LLIMSession();  		void sessionInitReplyReceived(const LLUUID& new_session_id); @@ -104,6 +104,9 @@ public:  		bool mTextIMPossible;  		bool mOtherParticipantIsAvatar;  		bool mStartCallOnInitialize; + +		//if IM session is created for a voice call +		bool mStartedAsIMCall;  	}; @@ -143,7 +146,10 @@ public:  	 * @param name session name should not be empty, will return false if empty  	 */  	bool newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id,  -		const std::vector<LLUUID>& ids = std::vector<LLUUID>()); +		const std::vector<LLUUID>& ids, bool voice = false); + +	bool newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, +		const LLUUID& other_participant_id, bool voice = false);  	/**  	 * Remove all session data associated with a session specified by session_id @@ -163,6 +169,12 @@ public:  	bool addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& other_participant_id, const std::string& utf8_text, bool log2file = true);  	/** +	 * Similar to addMessage(...) above but won't send a signal about a new message added +	 */ +	LLIMModel::LLIMSession* addMessageSilently(const LLUUID& session_id, const std::string& from, const LLUUID& from_id,  +		const std::string& utf8_text, bool log2file = true); + +	/**  	 * Add a system message to an IM Model  	 */  	bool proccessOnlineOfflineNotification(const LLUUID& session_id, const std::string& utf8_text); @@ -284,14 +296,14 @@ public:  	// session.  	LLUUID addSession(const std::string& name,  					  EInstantMessage dialog, -					  const LLUUID& other_participant_id); +					  const LLUUID& other_participant_id, bool voice = false);  	// Adds a session using a specific group of starting agents  	// the dialog type is assumed correct. Returns the uuid of the session.  	LLUUID addSession(const std::string& name,  					  EInstantMessage dialog,  					  const LLUUID& other_participant_id, -					  const LLDynamicArray<LLUUID>& ids); +					  const LLDynamicArray<LLUUID>& ids, bool voice = false);  	/**  	 * Creates a P2P session with the requisite handle for responding to voice calls. @@ -391,6 +403,8 @@ public:  	 **/  	bool endCall(const LLUUID& session_id); +	bool isVoiceCall(const LLUUID& session_id); +  private:  	/** diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index cdab3b2310..6210151d1b 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -261,9 +261,14 @@ BOOL LLNavigationBar::postBuild()  void LLNavigationBar::setVisible(BOOL visible)  {  	// change visibility of grandparent layout_panel to animate in and out -	if (getParent() && getParent()->getParent())  +	if (getParent())   	{ -		getParent()->getParent()->setVisible(visible);	 +		//to avoid some mysterious bugs like EXT-3352, at least try to log an incorrect parent to ping  about a problem.  +		if(getParent()->getName() != "nav_bar_container") +		{ +			LL_WARNS("LLNavigationBar")<<"NavigationBar has an unknown name of the parent: "<<getParent()->getName()<< LL_ENDL; +		} +		getParent()->setVisible(visible);	  	}  } diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 0a13180c73..4d22d96072 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -45,6 +45,7 @@  #include "llnotificationsutil.h"  #include "lltexturectrl.h"  #include "lltoggleablemenu.h" +#include "lltrans.h"  #include "llviewergenericmessage.h"	// send_generic_message  #include "llmenugl.h"  #include "llviewermenu.h" @@ -216,7 +217,9 @@ LLPanelPicks::LLPanelPicks()  	mClassifiedsAccTab(NULL),  	mPanelClassifiedInfo(NULL),  	mPanelClassifiedEdit(NULL), -	mClickThroughDisp(NULL) +	mClickThroughDisp(NULL), +	mNoClassifieds(false), +	mNoPicks(false)  {  	mClickThroughDisp = new LLClassifiedClickThrough();  	gGenericDispatcher.addHandler("classifiedclickthrough", mClickThroughDisp); @@ -242,6 +245,11 @@ void LLPanelPicks::updateData()  	// Send Picks request only when we need to, not on every onOpen(during tab switch).  	if(isDirty())  	{ +		mNoPicks = false; +		mNoClassifieds = false; + +		childSetValue("picks_panel_text", LLTrans::getString("PicksClassifiedsLoadingText")); +  		mPicksList->clear();  		LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId()); @@ -302,6 +310,8 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)  			resetDirty();  			updateButtons();  		} +		 +		mNoPicks = !mPicksList->size();  	}  	else if(APT_CLASSIFIEDS == type)  	{ @@ -335,9 +345,14 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)  			resetDirty();  			updateButtons();  		} +		 +		mNoClassifieds = !mClassifiedsList->size(); +	} + +	if (mNoPicks && mNoClassifieds) +	{ +		childSetValue("picks_panel_text", LLTrans::getString("NoPicksClassifiedsText"));  	} -	if(!mPicksList->size() && !mClassifiedsList->size()) -		childSetVisible("empty_picks_panel_text", true);  }  LLPickItem* LLPanelPicks::getSelectedPickItem() diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 0ebf9e26dd..fd8a9e6938 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -157,6 +157,11 @@ private:  	LLAccordionCtrlTab* mClassifiedsAccTab;  	LLClassifiedClickThrough* mClickThroughDisp; +	 +	//true if picks list is empty after processing picks +	bool mNoPicks; +	//true if classifieds list is empty after processing classifieds +	bool mNoClassifieds;  };  class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index ea49f9c32e..f49e7ef0da 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -709,15 +709,15 @@ BOOL LLIMWellWindow::postBuild()  void LLIMWellWindow::sessionAdded(const LLUUID& session_id,  								   const std::string& name, const LLUUID& other_participant_id)  { -	if (mMessageList->getItemByValue(session_id) == NULL) -	{ -		S32 chicletCounter = LLIMModel::getInstance()->getNumUnread(session_id); -		if (chicletCounter > -1) -		{ -			addIMRow(session_id, chicletCounter, name, other_participant_id);	 -			reshapeWindow(); -		} -	} +	if (!mMessageList->getItemByValue(session_id)) return; +	 +	// For im sessions started as voice call chiclet gets created on the first incoming message +	if (gIMMgr->isVoiceCall(session_id)) return; + +	if (!gIMMgr->hasSession(session_id)) return; + +	addIMRow(session_id, 0, name, other_participant_id);	 +	reshapeWindow();  }  //virtual diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 645c2973d8..a4ade9d0df 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -12,14 +12,14 @@   can_dock="false"   can_minimize="false"   visible="true" - width="300" + width="360"   can_resize="true" - min_width="300" + min_width="360"   min_height="350">    <layout_stack    follows="all"    height="320" -  width="300" +  width="360"    layout="topleft"    orientation="horizontal"    name="im_panels" @@ -36,7 +36,7 @@         left="0"         top="0"         height="200" -	     width="185" +	     width="245"         user_resize="false">          <button            height="20" @@ -63,7 +63,7 @@           parse_highlights="true"           allow_html="true"          left="1" -         width="180"> +         width="240">          </chat_history>          <line_editor           bottom="0"  @@ -73,7 +73,7 @@           label="To"           layout="bottomleft"           name="chat_editor" -         width="180"> +         width="240">          </line_editor>      </layout_panel>    </layout_stack> diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index 4facedc7ea..2230229b14 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -20,12 +20,9 @@    height="535"    layout="topleft"    left="6" -  name="empty_picks_panel_text" +  name="picks_panel_text"    top="10" -  visible="false"  -  width="313"> -   There are no picks/classifieds here - </text> +  width="313"/>   <accordion    fit_parent="true"     follows="all" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 2f50c5ee6c..ec4723bd55 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2074,6 +2074,10 @@ this texture in your inventory  	<!-- panel classified -->  	<string name="ClassifiedClicksTxt">Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile</string>  	<string name="ClassifiedUpdateAfterPublish">(will update after publish)</string> +   +  <!-- panel picks --> +  <string name="NoPicksClassifiedsText">There are no picks/classifieds here</string> +  <string name="PicksClassifiedsLoadingText">Loading...</string>  	<!-- Multi Preview Floater -->  	<string name="MultiPreviewTitle">Preview</string> @@ -2842,6 +2846,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].  	<string name="IM_to_label">To</string>  	<string name="IM_moderator_label">(Moderator)</string> +	<!-- voice calls --> +	<string name="started_call">Started a voice call</string> +	<string name="joined_call">Joined the voice call</string> +    <string name="ringing-im">      Joining Voice Chat...    </string> | 
