From 647327d0eca0c089d94ce964a8cc837cc2888e93 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Wed, 21 Apr 2010 20:23:55 +0300
Subject: [PATCH] Fixed normal bug EXT-6907 ('Show residents profile' menu
 opens inspector instead of profile) - added 'Url.ShowProfile' action.
 Reviewed by Vadim Savchuk at
 https://codereview.productengine.com/secondlife/r/282/

--HG--
branch : product-engine
---
 indra/llui/lltextbase.cpp                       |  1 +
 indra/llui/llurlaction.cpp                      | 17 +++++++++++++++++
 indra/llui/llurlaction.h                        |  3 +++
 .../skins/default/xui/en/menu_url_agent.xml     |  2 +-
 .../skins/default/xui/en/menu_url_group.xml     |  2 +-
 5 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index e08026eaf40..390ec234d3f 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1507,6 +1507,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)
 	registrar.add("Url.OpenExternal", boost::bind(&LLUrlAction::openURLExternal, url));
 	registrar.add("Url.Execute", boost::bind(&LLUrlAction::executeSLURL, url));
 	registrar.add("Url.Teleport", boost::bind(&LLUrlAction::teleportToLocation, url));
+	registrar.add("Url.ShowProfile", boost::bind(&LLUrlAction::showProfile, url));
 	registrar.add("Url.ShowOnMap", boost::bind(&LLUrlAction::showLocationOnMap, url));
 	registrar.add("Url.CopyLabel", boost::bind(&LLUrlAction::copyLabelToClipboard, url));
 	registrar.add("Url.CopyUrl", boost::bind(&LLUrlAction::copyURLToClipboard, url));
diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp
index 679db5e39ba..2f13a56b42f 100644
--- a/indra/llui/llurlaction.cpp
+++ b/indra/llui/llurlaction.cpp
@@ -146,3 +146,20 @@ void LLUrlAction::copyLabelToClipboard(std::string url)
 		LLView::getWindow()->copyTextToClipboard(utf8str_to_wstring(match.getLabel()));
 	}	
 }
+
+void LLUrlAction::showProfile(std::string url)
+{
+	// Get id from 'secondlife:///app/{cmd}/{id}/{action}'
+	// and show its profile
+	LLURI uri(url);
+	LLSD path_array = uri.pathArray();
+	if (path_array.size() == 4)
+	{
+		std::string id_str = path_array.get(2).asString();
+		if (LLUUID::validate(id_str))
+		{
+			std::string cmd_str = path_array.get(1).asString();
+			executeSLURL("secondlife:///app/" + cmd_str + "/" + id_str + "/about");
+		}
+	}
+}
diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h
index 4830cf27ef9..b96faf1b3ff 100644
--- a/indra/llui/llurlaction.h
+++ b/indra/llui/llurlaction.h
@@ -79,6 +79,9 @@ class LLUrlAction
 	/// copy a Url to the clipboard
 	static void copyURLToClipboard(std::string url);
 
+	/// if the Url specifies an SL command in the form like 'app/{cmd}/{id}/*', show its profile
+	static void showProfile(std::string url);
+
 	/// specify the callbacks to enable this class's functionality
 	static void	setOpenURLCallback(void (*cb) (const std::string& url));
 	static void	setOpenURLInternalCallback(void (*cb) (const std::string& url));
diff --git a/indra/newview/skins/default/xui/en/menu_url_agent.xml b/indra/newview/skins/default/xui/en/menu_url_agent.xml
index fa05dac1483..73f0fa79797 100644
--- a/indra/newview/skins/default/xui/en/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_agent.xml
@@ -7,7 +7,7 @@
      layout="topleft"
      name="show_agent">
         <menu_item_call.on_click
-         function="Url.Execute" />
+         function="Url.ShowProfile" />
     </menu_item_call>
     <menu_item_separator
      layout="topleft" />
diff --git a/indra/newview/skins/default/xui/en/menu_url_group.xml b/indra/newview/skins/default/xui/en/menu_url_group.xml
index c5eaf94d228..2cb125ce094 100644
--- a/indra/newview/skins/default/xui/en/menu_url_group.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_group.xml
@@ -7,7 +7,7 @@
      layout="topleft"
      name="show_group">
         <menu_item_call.on_click
-         function="Url.Execute" />
+         function="Url.ShowProfile" />
     </menu_item_call>
     <menu_item_separator
      layout="topleft" />
-- 
GitLab