diff options
| -rw-r--r-- | indra/newview/llimfloater.cpp | 28 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llnearbychat.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llnearbychat.h | 5 | ||||
| -rw-r--r-- | indra/newview/llnearbychathandler.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llviewerfloaterreg.cpp | 2 | 
6 files changed, 45 insertions, 18 deletions
| diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index d11504d312..99337bd5f3 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -111,23 +111,25 @@ void LLIMFloater::onClickCloseBtn()  {  	LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(mSessionID); -	if (session == NULL) +	if (session != NULL)  	{ -		llwarns << "Empty session with id: " << (mSessionID.asString()) << llendl; -		return; -	} +		bool is_call_with_chat = session->isGroupSessionType() +				|| session->isAdHocSessionType() || session->isP2PSessionType(); -	bool is_call_with_chat = session->isGroupSessionType() -			|| session->isAdHocSessionType() || session->isP2PSessionType(); +		LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionID); -	LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionID); - -	if (is_call_with_chat && voice_channel != NULL -			&& voice_channel->isActive()) +		if (is_call_with_chat && voice_channel != NULL +				&& voice_channel->isActive()) +		{ +			LLSD payload; +			payload["session_id"] = mSessionID; +			LLNotificationsUtil::add("ConfirmLeaveCall", LLSD(), payload, confirmLeaveCallCallback); +			return; +		} +	} +	else  	{ -		LLSD payload; -		payload["session_id"] = mSessionID; -		LLNotificationsUtil::add("ConfirmLeaveCall", LLSD(), payload, confirmLeaveCallCallback); +		llwarns << "Empty session with id: " << (mSessionID.asString()) << llendl;  		return;  	} diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index a33fc2c57e..237748179c 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -463,21 +463,26 @@ void LLIMFloaterContainer::tabClose()  }  void LLIMFloaterContainer::setVisible(BOOL visible) -{ +{	LLNearbyChat* nearby_chat;  	if (visible)  	{  		// Make sure we have the Nearby Chat present when showing the conversation container -		LLIMConversation* nearby_chat = LLFloaterReg::findTypedInstance<LLIMConversation>("nearby_chat"); +		nearby_chat = LLFloaterReg::findTypedInstance<LLNearbyChat>("nearby_chat");  		if (nearby_chat == NULL)  		{  			// If not found, force the creation of the nearby chat conversation panel  			// *TODO: find a way to move this to XML as a default panel or something like that  			LLSD name("nearby_chat");  			LLFloaterReg::toggleInstanceOrBringToFront(name); -			LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat")->addToHost();  		}  	} +	nearby_chat = LLFloaterReg::findTypedInstance<LLNearbyChat>("nearby_chat"); +	if (nearby_chat && !nearby_chat->isHostSet()) +	{ +		nearby_chat->addToHost(); +	} +  	// We need to show/hide all the associated conversations that have been torn off  	// (and therefore, are not longer managed by the multifloater),  	// so that they show/hide with the conversations manager. diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 4b35092f2d..b96b486868 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -91,7 +91,8 @@ LLNearbyChat::LLNearbyChat(const LLSD& llsd)  :	LLIMConversation(llsd),  	//mOutputMonitor(NULL),  	mSpeakerMgr(NULL), -	mExpandedHeight(COLLAPSED_HEIGHT + EXPANDED_HEIGHT) +	mExpandedHeight(COLLAPSED_HEIGHT + EXPANDED_HEIGHT), +	mIsHostSet(false)  {      mIsP2PChat = false;  	mIsNearbyChat = true; @@ -100,6 +101,12 @@ LLNearbyChat::LLNearbyChat(const LLSD& llsd)  	mSessionID = LLUUID();  } +//static +LLNearbyChat* LLNearbyChat::buildFloater(const LLSD& key) +{ +    LLFloaterReg::getInstance("im_container"); +    return new LLNearbyChat(key); +}  //virtual  BOOL LLNearbyChat::postBuild() @@ -304,9 +311,16 @@ void LLNearbyChat::addToHost()  				setHost(NULL);  			}  		} + +		mIsHostSet = true;  	}  } +bool LLNearbyChat::isHostSet() +{ +    return mIsHostSet; +} +  // virtual  void LLNearbyChat::onOpen(const LLSD& key)  { diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h index 3987212e4c..93168ba96a 100644 --- a/indra/newview/llnearbychat.h +++ b/indra/newview/llnearbychat.h @@ -48,6 +48,8 @@ public:  	LLNearbyChat(const LLSD& key = LLSD(LLUUID()));  	~LLNearbyChat() {} +	static LLNearbyChat* buildFloater(const LLSD& key); +  	/*virtual*/ BOOL postBuild();  	/*virtual*/ void onOpen(const LLSD& key); @@ -76,6 +78,8 @@ public:  	static void startChat(const char* line);  	static void stopChat(); +	bool isHostSet(); +  	static void sendChatFromViewer(const std::string &utf8text, EChatType type, BOOL animate);  	static void sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate); @@ -117,6 +121,7 @@ private:  	LLHandle<LLView>	mPopupMenuHandle;  	std::vector<LLChat> mMessageArchive; +    bool mIsHostSet;  };  #endif diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index f3e17ea61b..7834f6d320 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -487,6 +487,7 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg,  	if(chat_msg.mText.empty())  		return;//don't process empty messages +    LLFloaterReg::getInstance("im_container");  	LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat");  	// Build notification data  diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 4cd5ecc754..c751550523 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -194,7 +194,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("camera", "floater_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCamera>);  	LLFloaterReg::add("chat_voice", "floater_voice_chat_volume.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChatVoiceVolume>); -	LLFloaterReg::add("nearby_chat", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNearbyChat>); +	LLFloaterReg::add("nearby_chat", "floater_im_session.xml", (LLFloaterBuildFunc)&LLNearbyChat::buildFloater);  	LLFloaterReg::add("compile_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCompileQueue>);  	LLFloaterReg::add("conversation", "floater_conversation_log.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterConversationLog>); | 
