diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index fa92201096..607da82828 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -1349,6 +1349,26 @@ std::string LLUrlEntrySL::getLabel(const std::string &url, const LLUrlLabelCallb
return unescapeUrl(url);
}
+// FS Help SLUrl
+///
+/// FSHelpDebugUrlEntrySL Describes a Firestorm Help SLURL, e.g.
+/// secondlife://app/fshelp/showdebug/DisplayIM
+///
+FSHelpDebugUrlEntrySL::FSHelpDebugUrlEntrySL()
+{
+ mPattern = boost::regex("(hop|secondlife|inworldz|iw):///app/fshelp/showdebug/\\S+",
+ boost::regex::perl|boost::regex::icase);
+ mMenuName = "menu_url_slapp.xml";
+ mTooltip = LLTrans::getString("TooltipFSHelpDebugSLUrl");
+}
+
+std::string FSHelpDebugUrlEntrySL::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+ std::string::size_type pos = url.find("showdebug/") + 10;
+ return url.substr(pos);
+}
+//
+
//
// LLUrlEntrySLLabel Describes a generic SLURL, e.g., a Url that starts
/// with secondlife:// with the ability to specify a custom label.
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index 1d2506e005..7d0af09dbd 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -490,6 +490,19 @@ public:
/*virtual*/ std::string getLocation(const std::string &url) const;
};
+// FS Help SLUrl
+///
+/// FSHelpDebugUrlEntrySL Describes a Firestorm Help SLURL, e.g.
+/// secondlife://app/fshelp/showdebug/DisplayIM
+///
+class FSHelpDebugUrlEntrySL : public LLUrlEntryBase
+{
+public:
+ FSHelpDebugUrlEntrySL();
+ /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+};
+//
+
///
/// LLUrlEntrySL Describes a generic SLURL, e.g., a Url that starts
/// with secondlife:// (used as a catch-all for cases not matched above)
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index 595f5b5b9d..5b77384509 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -82,6 +82,7 @@ LLUrlRegistry::LLUrlRegistry()
registerUrl(new LLUrlEntryPlace());
registerUrl(new LLUrlEntryInventory());
registerUrl(new LLUrlEntryExperienceProfile());
+ registerUrl(new FSHelpDebugUrlEntrySL()); // FS Help SLUrl
//LLUrlEntrySL and LLUrlEntrySLLabel have more common pattern,
//so it should be registered in the end of list
registerUrl(new LLUrlEntrySL());
diff --git a/indra/newview/fsslurlcommand.cpp b/indra/newview/fsslurlcommand.cpp
index b9ebd68d19..d0307b98d8 100644
--- a/indra/newview/fsslurlcommand.cpp
+++ b/indra/newview/fsslurlcommand.cpp
@@ -30,6 +30,7 @@
#include "llagent.h"
#include "llavataractions.h"
#include "llcommandhandler.h"
+#include "llfloatersettingsdebug.h"
#include "lllogchat.h"
#include "llnotificationsutil.h"
@@ -140,3 +141,30 @@ public:
// Creating the object registers with the dispatcher.
FSSlurlCommandHandler gFSSlurlHandler;
+
+class FSHelpSlurlCommandHandler : public LLCommandHandler
+{
+public:
+ // not allowed from outside the app
+ FSHelpSlurlCommandHandler() : LLCommandHandler("fshelp", UNTRUSTED_THROTTLE) { }
+
+ bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ {
+ if (params.size() < 2)
+ {
+ return false;
+ }
+
+ if (params[0].asString() == "showdebug")
+ {
+ std::string setting_name = params[1].asString();
+ LLFloaterSettingsDebug::showControl(setting_name);
+ return true;
+ }
+
+ return false;
+ }
+};
+
+// Creating the object registers with the dispatcher.
+FSHelpSlurlCommandHandler gFSHelpSlurlCommandHandler;
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
index 86352ebc73..88f47371f4 100644
--- a/indra/newview/llfloatersettingsdebug.cpp
+++ b/indra/newview/llfloatersettingsdebug.cpp
@@ -49,6 +49,7 @@
// [/RLVa:KB]
#include "llnotificationsutil.h"
#include "llwindow.h"
+#include "llfloaterreg.h"
LLFloaterSettingsDebug::LLFloaterSettingsDebug(const LLSD& key)
: LLFloater(key)
@@ -598,3 +599,10 @@ void LLFloaterSettingsDebug::updateControl()
}
}
}
+
+void LLFloaterSettingsDebug::showControl(const std::string& control)
+{
+ LLFloaterSettingsDebug* instance = LLFloaterReg::showTypedInstance("settings_debug", "all", TRUE);
+ instance->mSearchSettingsInput->setText(control);
+ instance->onUpdateFilter();
+}
diff --git a/indra/newview/llfloatersettingsdebug.h b/indra/newview/llfloatersettingsdebug.h
index 03b168e1f7..1c0c3ed3bf 100644
--- a/indra/newview/llfloatersettingsdebug.h
+++ b/indra/newview/llfloatersettingsdebug.h
@@ -60,6 +60,7 @@ public:
void onClickDefault();
void onCopyToClipboard();
void onSanityCheck();
+ static void showControl(const std::string& control);
private:
// key - selects which settings to show, one of:
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 33b9967ea9..22924b631b 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -697,6 +697,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Anklicken, um Befehl secondlife:// auszuführen
+
+ Anklicken, um das Fenster mit Debug-Einstellungen für diese Einstellung zu öffnen
+
Klicken, um eine E-Mail zu verfassen
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 6818fb56cc..7327a0abc1 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -339,6 +339,7 @@ Please try logging in again in a minute.
Click to view this object's description
Click to view this location on a map
Click to run the secondlife:// command
+ Click to open the debug settings window for this setting
Click to compose an email