From b93474301489d2192cc9b7c8a675b55f49c9577b Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Mon, 9 Aug 2010 15:14:45 +0300
Subject: [PATCH] EXT-8010 ADDITIONAL FIX Fixed problems with avatar links
 underlining.

There were two problems:

1. Underlining broke when avatar's first and second name were on different lines.
2. There was no underline on hover for avatar miniinspector links in plaintext IM.

- First problem was caused by calling LLOnHoverChangeableTextSegment::draw() for the same segment twice- for first and second name that were
on different lines, while handleHover() was called only once. So handleHover() was called -> text was underlined -> first part of segment was
drawn underlined -> its draw set style back to normal -> second part of segment was drawn without underlining.

Fixed this by setting style back to normal only when drawing the last part of the segment.

- Second problem was caused by unusual way of appending link to text in chat history.

Changed it so that LLTextBase::appendText() now receives link not inside style params, but directly.
Also added "/inspect" ending to check in LLUrlEntryAgent::underlineOnHoverOnly().

Reviewed by Richard Nelson at https://codereview.productengine.com/secondlife/r/833/

--HG--
branch : product-engine
---
 indra/llui/lltextbase.cpp       |  5 ++++-
 indra/llui/llurlentry.cpp       |  2 +-
 indra/newview/llchathistory.cpp |  5 +++--
 indra/newview/llstylemap.cpp    | 12 ++----------
 4 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index cde08c7b193..3792f18c975 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -2723,7 +2723,10 @@ LLOnHoverChangeableTextSegment::LLOnHoverChangeableTextSegment( LLStyleConstSP s
 F32 LLOnHoverChangeableTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect)
 {
 	F32 result = LLNormalTextSegment::draw(start, end, selection_start, selection_end, draw_rect);
-	mStyle = mNormalStyle;
+	if (end == mEnd - mStart)
+	{
+		mStyle = mNormalStyle;
+	}
 	return result;
 }
 
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 17d211fb36e..bf7b25910fe 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -366,7 +366,7 @@ std::string LLUrlEntryAgent::getTooltip(const std::string &string) const
 bool LLUrlEntryAgent::underlineOnHoverOnly(const std::string &string) const
 {
 	std::string url = getUrl(string);
-	return LLStringUtil::endsWith(url, "/about");
+	return LLStringUtil::endsWith(url, "/about") || LLStringUtil::endsWith(url, "/inspect");
 }
 
 std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 7c33923f044..7204e6c39cc 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -699,8 +699,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 			{
 				LLStyle::Params link_params(style_params);
 				link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
-				// Convert the name to a hotlink and add to message.
-				mEditor->appendText(chat.mFromName + delimiter, false, link_params);
+				// Add link to avatar's inspector and delimiter to message.
+				mEditor->appendText(link_params.link_href, false, style_params);
+				mEditor->appendText(delimiter, false, style_params);
 			}
 			else
 			{
diff --git a/indra/newview/llstylemap.cpp b/indra/newview/llstylemap.cpp
index 8fab3bb361f..b3d7dddde88 100644
--- a/indra/newview/llstylemap.cpp
+++ b/indra/newview/llstylemap.cpp
@@ -46,20 +46,12 @@ const LLStyle::Params &LLStyleMap::lookupAgent(const LLUUID &source)
 	if (mMap.find(source) == mMap.end())
 	{
 		LLStyle::Params style_params;
-		if (source != LLUUID::null && source != gAgent.getID() )
+		if (source != LLUUID::null)
 		{
 			style_params.color.control = "HTMLLinkColor";
 			style_params.readonly_color.control = "HTMLLinkColor";
-			style_params.link_href = 
-					LLSLURL("agent", source, "inspect").getSLURLString();
+			style_params.link_href = LLSLURL("agent", source, "inspect").getSLURLString();
 		}
-		else
-		{
-			// Make the resident's own name white and don't make the name clickable.
-			style_params.color = LLColor4::white;
-			style_params.readonly_color = LLColor4::white;
-		}
-
 		mMap[source] = style_params;
 	}
 	return mMap[source];
-- 
GitLab