From c63233106b4785de86a0cff3d108e36b7db2b127 Mon Sep 17 00:00:00 2001
From: Alexei Arabadji <aarabadji@productengine.com>
Date: Thu, 27 May 2010 14:47:27 +0300
Subject: [PATCH] EXT-7090 FIXED Made snapshot preview and minimap(like in
 1.23) floaters showable in mouselook mode. reviewed by Vadim Savchuk at
 https://codereview.productengine.com/secondlife/r/449/

--HG--
branch : product-engine
---
 indra/llui/llfloaterreg.cpp             | 13 ++++++++++++-
 indra/llui/llfloaterreg.h               |  4 ++++
 indra/newview/app_settings/settings.xml | 14 ++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 7588d8ab7a1..85f9af126c8 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -47,6 +47,7 @@ LLFloaterReg::instance_map_t LLFloaterReg::sInstanceMap;
 LLFloaterReg::build_map_t LLFloaterReg::sBuildMap;
 std::map<std::string,std::string> LLFloaterReg::sGroupMap;
 bool LLFloaterReg::sBlockShowFloaters = false;
+std::set<std::string> LLFloaterReg::sAlwaysShowableList;
 
 static LLFloaterRegListener sFloaterRegListener;
 
@@ -219,7 +220,9 @@ LLFloaterReg::const_instance_list_t& LLFloaterReg::getFloaterList(const std::str
 //static
 LLFloater* LLFloaterReg::showInstance(const std::string& name, const LLSD& key, BOOL focus) 
 {
-	if( sBlockShowFloaters )
+	if( sBlockShowFloaters
+			// see EXT-7090
+			&& sAlwaysShowableList.find(name) == sAlwaysShowableList.end())
 		return 0;//
 	LLFloater* instance = getInstance(name, key); 
 	if (instance) 
@@ -403,6 +406,14 @@ void LLFloaterReg::registerControlVariables()
 			declareVisibilityControl(name);
 		}
 	}
+
+	const LLSD& exclude_list = LLUI::sSettingGroups["config"]->getLLSD("always_showable_floaters");
+	for (LLSD::array_const_iterator iter = exclude_list.beginArray();
+		iter != exclude_list.endArray();
+		iter++)
+	{
+		sAlwaysShowableList.insert(iter->asString());
+	}
 }
 
 // Callbacks
diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h
index 5cacf767712..f1ba41f638e 100644
--- a/indra/llui/llfloaterreg.h
+++ b/indra/llui/llfloaterreg.h
@@ -76,6 +76,10 @@ class LLFloaterReg
 	static build_map_t sBuildMap;
 	static std::map<std::string,std::string> sGroupMap;
 	static bool sBlockShowFloaters;
+	/**
+	 * Defines list of floater names that can be shown despite state of sBlockShowFloaters.
+	 */
+	static std::set<std::string> sAlwaysShowableList;
 	
 public:
 	// Registration
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 59b6115fab7..693093c6ce5 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11217,5 +11217,19 @@
       <key>Value</key>
       <integer>178</integer>
     </map>
+    <key>always_showable_floaters</key>
+    <map>
+      <key>Comment</key>
+      <string>Floaters that can be shown despite mouselook mode</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>LLSD</string>
+      <key>Value</key>
+      <array>
+	      <string>snapshot</string>
+	      <string>mini_map</string>
+      </array>
+    </map>
 </map>
 </llsd>
-- 
GitLab