From 24d8bf26fc489c7cb35cd4d8bfba2ca8c1e46442 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Thu, 14 Jan 2010 18:15:01 +0200
Subject: [PATCH] Fixed normal bug EXT-4072([BSI] Emotes appear as (italic)
 text chat in plain text mode)

--HG--
branch : product-engine
---
 indra/newview/llchathistory.cpp       | 50 +++++++++++----------------
 indra/newview/llnearbychat.cpp        | 22 +-----------
 indra/newview/llnearbychathandler.cpp | 24 +++++++------
 3 files changed, 35 insertions(+), 61 deletions(-)

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 9a1572364fa..2fc83c7e54f 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -499,24 +499,29 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
 	style_params.font.name(font_name);
 	style_params.font.size(font_size);	
 	style_params.font.style(input_append_params.font.style);
-	
-	//whether to show colon after a name in header copy/past and in plain text mode
-	bool show_colon = chat.mChatType != CHAT_TYPE_SHOUT && chat.mChatType != CHAT_TYPE_WHISPER; 
+
+	std::string prefix = chat.mText.substr(0, 4);
 
 	//IRC styled /me messages.
-	bool irc_me = false;
+	bool irc_me = prefix == "/me " || prefix == "/me'";
 
-	std::string prefix = chat.mText.substr(0, 4);
-	if (prefix == "/me " || prefix == "/me'")
+	// Delimiter after a name in header copy/past and in plain text mode
+	std::string delimiter = (chat.mChatType != CHAT_TYPE_SHOUT && chat.mChatType != CHAT_TYPE_WHISPER)
+		? ": "
+		: " ";
+
+	// Don't add any delimiter after name in irc styled messages
+	if (irc_me || chat.mChatStyle == CHAT_STYLE_IRC)
 	{
-		irc_me = true;
+		delimiter = LLStringUtil::null;
+		style_params.font.style = "ITALIC";
 	}
 
 	if (use_plain_text_chat_history)
 	{
 		mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, style_params);
 
-		if (utf8str_trim(chat.mFromName).size() != 0 && !irc_me)
+		if (utf8str_trim(chat.mFromName).size() != 0)
 		{
 			// Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text.
 			if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() )
@@ -524,11 +529,11 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
 				LLStyle::Params link_params(style_params);
 				link_params.fillFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
 				// Convert the name to a hotlink and add to message.
-				mEditor->appendText(chat.mFromName + (show_colon ? ": " : " "), false, link_params);
+				mEditor->appendText(chat.mFromName + delimiter, false, link_params);
 			}
 			else
 			{
-				mEditor->appendText(chat.mFromName + (show_colon ? ": " : " "), false, style_params);
+				mEditor->appendText(chat.mFromName + delimiter, false, style_params);
 			}
 		}
 	}
@@ -574,35 +579,22 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
 
 		std::string header_text = "[" + chat.mTimeStr + "] ";
 		if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
-			header_text += chat.mFromName + (show_colon ? ": " : " ");
+			header_text += chat.mFromName + delimiter;
 
 		mEditor->appendWidget(p, header_text, false);
 		mLastFromName = chat.mFromName;
 		mLastFromID = chat.mFromID;
 		mLastMessageTime = new_message_time;
 	}
-	
-	if (irc_me)
-	{
-		style_params.font.style = "ITALIC";
 
-		if (chat.mFromName.size() > 0)
-			mEditor->appendText(chat.mFromName, FALSE, style_params);
+	std::string message = irc_me ? chat.mText.substr(3) : chat.mText;
+	if ( message.size() > 0 && !LLStringOps::isSpace(message[message.size() - 1]) )
+	{
 		// Ensure that message ends with NewLine, to avoid losing of new lines
 		// while copy/paste from text chat. See EXT-3263.
-		mEditor->appendText(chat.mText.substr(3) + NEW_LINE, FALSE, style_params);
-	}
-	else
-	{
-		std::string message(chat.mText);
-		if ( message.size() > 0 && !LLStringOps::isSpace(message[message.size() - 1]) )
-		{
-			// Ensure that message ends with NewLine, to avoid losing of new lines
-			// while copy/paste from text chat. See EXT-3263.
-			message += NEW_LINE;
-		}
-		mEditor->appendText(message, FALSE, style_params);
+		message += NEW_LINE;
 	}
+	mEditor->appendText(message, FALSE, style_params);
 	mEditor->blockUndo();
 
 	// automatically scroll to end when receiving chat from myself
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index fc0e51b76d1..a7c1e73328e 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -179,27 +179,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat,bool archive)
 	if (!chat.mMuted)
 	{
 		tmp_chat.mFromName = chat.mFromName;
-
-		if (chat.mChatStyle == CHAT_STYLE_IRC)
-		{
-			LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
-			LLViewerChat::getChatColor(chat,txt_color);
-			LLFontGL* fontp = LLViewerChat::getChatFont();
-			std::string font_name = LLFontGL::nameFromFont(fontp);
-			std::string font_size = LLFontGL::sizeFromFont(fontp);
-			LLStyle::Params append_style_params;
-			append_style_params.color(txt_color);
-			append_style_params.readonly_color(txt_color);
-			append_style_params.font.name(font_name);
-			append_style_params.font.size(font_size);
-			append_style_params.font.style = "ITALIC";
-
-			mChatHistory->appendMessage(chat, use_plain_text_chat_history, append_style_params);
-		}
-		else
-		{
-			mChatHistory->appendMessage(chat, use_plain_text_chat_history);
-		}
+		mChatHistory->appendMessage(chat, use_plain_text_chat_history);
 	}
 
 	if(archive)
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index de4249a1dcf..96442fafcc6 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -180,6 +180,11 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 
 		if(panel && panel->messageID() == fromID && panel->canAddText())
 		{
+			if (CHAT_STYLE_IRC == notification["chat_style"].asInteger())
+			{
+				notification["message"] = notification["from"].asString() + notification["message"].asString();
+			}
+
 			panel->addMessage(notification);
 			toast->reshapeToPanel();
 			toast->resetTimer();
@@ -331,25 +336,22 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
 
 	LLChat& tmp_chat = const_cast<LLChat&>(chat_msg);
 
-	if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
-	{
-		if(!tmp_chat.mFromName.empty())
-			tmp_chat.mText = tmp_chat.mFromName + tmp_chat.mText.substr(3);
-		else
-			tmp_chat.mText = tmp_chat.mText.substr(3);
-	}
-	
+	LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
 	{
 		//sometimes its usefull to have no name at all...
 		//if(tmp_chat.mFromName.empty() && tmp_chat.mFromID!= LLUUID::null)
 		//	tmp_chat.mFromName = tmp_chat.mFromID.asString();
 	}
-	
-	LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
 	nearby_chat->addMessage(chat_msg);
 	if(nearby_chat->getVisible())
 		return;//no need in toast if chat is visible
-	
+
+	// Handle irc styled messages for toast panel
+	if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
+	{
+		tmp_chat.mText = tmp_chat.mText.substr(3);
+	}
+
 	// arrange a channel on a screen
 	if(!mChannel->getVisible())
 	{
-- 
GitLab