diff options
| -rwxr-xr-x | indra/newview/llfloaterimcontainer.cpp | 28 | ||||
| -rwxr-xr-x | indra/newview/llfloaterimcontainer.h | 2 | ||||
| -rwxr-xr-x | indra/newview/llfloaterimnearbychat.cpp | 28 | 
3 files changed, 31 insertions, 27 deletions
| diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 396e31dd27..4591b80ac4 100755 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -267,7 +267,6 @@ BOOL LLFloaterIMContainer::postBuild()  void LLFloaterIMContainer::onOpen(const LLSD& key)  {  	LLMultiFloater::onOpen(key); -	openNearbyChat();  	reSelectConversation();  	assignResizeLimits();  } @@ -631,7 +630,6 @@ void LLFloaterIMContainer::setVisible(BOOL visible)  			LLFloaterReg::toggleInstanceOrBringToFront(name);              selectConversationPair(LLUUID(NULL), false, false);  		} -		openNearbyChat();  		flashConversationItemWidget(mSelectedSession,false);  		LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::findConversation(mSelectedSession); @@ -661,7 +659,11 @@ void LLFloaterIMContainer::setVisible(BOOL visible)  		LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(widget_it->second);  		if (widget)  		{ -		    widget->setVisibleIfDetached(visible); +			LLFloater* session_floater = widget->getSessionFloater(); +			if (session_floater != nearby_chat) +			{ +				widget->setVisibleIfDetached(visible); +			}  		}  	} @@ -689,7 +691,12 @@ void LLFloaterIMContainer::getDetachedConversationFloaters(floater_list_t& float  void LLFloaterIMContainer::setVisibleAndFrontmost(BOOL take_focus, const LLSD& key)  {  	LLMultiFloater::setVisibleAndFrontmost(take_focus, key); -    selectConversationPair(getSelectedSession(), false, take_focus); +	// Do not select "Nearby Chat" conversation, since it will bring its window to front +	// Only select other sessions +	if (!getSelectedSession().isNull()) +	{ +		selectConversationPair(getSelectedSession(), false, take_focus); +	}  	if (mInitialized && mIsFirstLaunch)  	{  		collapseMessagesPane(gSavedPerAccountSettings.getBOOL("ConversationsMessagePaneCollapsed")); @@ -1936,13 +1943,6 @@ void LLFloaterIMContainer::openNearbyChat()  	}  } -void LLFloaterIMContainer::onNearbyChatClosed() -{ -	// If nearby chat is the only remaining conversation and it is closed, close whole conversation floater as well -	if (mConversationsItems.size() == 1) -		closeFloater(); -} -  void LLFloaterIMContainer::reSelectConversation()  {  	LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(mSelectedSession); @@ -2080,11 +2080,15 @@ void LLFloaterIMContainer::expandConversation()  // By default, if torn off session is currently frontmost, LLFloater::isFrontmost() will return FALSE, which can lead to some bugs  // So LLFloater::isFrontmost() is overriden here to check both selected session and the IM floater itself +// Exclude "Nearby Chat" session from the check, as "Nearby Chat" window and "Conversations" floater can be brought +// to front independently  /*virtual*/  BOOL LLFloaterIMContainer::isFrontmost()  {  	LLFloaterIMSessionTab* selected_session = LLFloaterIMSessionTab::getConversation(mSelectedSession); -	return (selected_session && selected_session->isFrontmost()) || LLFloater::isFrontmost(); +	LLFloaterIMNearbyChat* nearby_chat = LLFloaterReg::findTypedInstance<LLFloaterIMNearbyChat>("nearby_chat"); +	return (selected_session && selected_session->isFrontmost() && (selected_session != nearby_chat)) +		|| LLFloater::isFrontmost();  }  // For conversations, closeFloater() (linked to Ctrl-W) does not actually close the floater but the active conversation. diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h index 5cd92beed1..36da457cac 100755 --- a/indra/newview/llfloaterimcontainer.h +++ b/indra/newview/llfloaterimcontainer.h @@ -107,8 +107,6 @@ public:  	LLConversationItem* getSessionModel(const LLUUID& session_id) { return get_ptr_in_map(mConversationsItems,session_id); }  	LLConversationSort& getSortOrder() { return mConversationViewModel.getSorter(); } -	void onNearbyChatClosed(); -  	// Handling of lists of participants is public so to be common with llfloatersessiontab  	// *TODO : Find a better place for this.      bool checkContextMenuItem(const std::string& item, uuid_vec_t& selectedIDS); diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index 59593d776b..5999c74d51 100755 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -138,19 +138,28 @@ BOOL LLFloaterIMNearbyChat::postBuild()  // virtual  void LLFloaterIMNearbyChat::closeHostedFloater()  { -	// Should check how many conversations are ongoing. Close all if 1 only (the Nearby Chat), select next one otherwise +	// If detached from conversations window close anyway +	if (!getHost()) +	{ +		setVisible(FALSE); +	} + +	// Should check how many conversations are ongoing. Select next to "Nearby Chat" in case there are some other besides. +	// Close conversations window in case "Nearby Chat" is attached and the only conversation  	LLFloaterIMContainer* floater_container = LLFloaterIMContainer::getInstance();  	if (floater_container->getConversationListItemSize() == 1)  	{ -		floater_container->closeFloater(); +		if (getHost()) +		{ +			floater_container->closeFloater(); +		}  	}  	else  	{  		if (!getHost())  		{ -			setVisible(FALSE); +			floater_container->selectNextConversationByID(LLUUID());  		} -		floater_container->selectNextConversationByID(LLUUID());  	}  } @@ -262,7 +271,7 @@ void LLFloaterIMNearbyChat::setVisibleAndFrontmost(BOOL take_focus, const LLSD&  {  	LLFloaterIMSessionTab::setVisibleAndFrontmost(take_focus, key); -	if(!isTornOff() && matchesKey(key)) +	if(matchesKey(key))  	{  		LLFloaterIMContainer::getInstance()->selectConversationPair(mSessionID, true, take_focus);  	} @@ -296,7 +305,6 @@ void LLFloaterIMNearbyChat::onClose(bool app_quitting)  {  	// Override LLFloaterIMSessionTab::onClose() so that Nearby Chat is not removed from the conversation floater  	LLFloaterIMSessionTab::restoreFloater(); -	onClickCloseBtn();  }  // virtual @@ -306,13 +314,7 @@ void LLFloaterIMNearbyChat::onClickCloseBtn()  	{  		return;  	} -	LLFloaterIMSessionTab::onTearOffClicked(); -	 -	LLFloaterIMContainer *im_box = LLFloaterIMContainer::findInstance(); -	if (im_box) -	{ -		im_box->onNearbyChatClosed(); -	} +	closeHostedFloater();  }  void LLFloaterIMNearbyChat::onChatFontChange(LLFontGL* fontp) | 
