From 4020b91ec6e8ab4994969ddda37f5ebbd9985367 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Wed, 1 Sep 2010 21:11:25 +0300
Subject: [PATCH] VWR-21127 WIP Implemented saving position and dimensions of
 detached sidebar tabs.

Reviewed by Sergey Litovchuk.
---
 indra/llui/llfloater.cpp                           | 14 +++++++++++---
 indra/newview/llsidetray.cpp                       |  8 ++++----
 .../skins/default/xui/en/floater_side_bar_tab.xml  |  4 +++-
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index e1203971ea..0c4c857022 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2664,18 +2664,26 @@ void LLFloater::setInstanceName(const std::string& name)
 	mInstanceName = name;
 	if (!mInstanceName.empty())
 	{
+		std::string ctrl_name = mInstanceName;
+
+		// Add the key to the control name if appropriate.
+		if (mKey.isString() && !mKey.asString().empty())
+		{
+			ctrl_name += "_" + mKey.asString();
+		}
+
 		// save_rect and save_visibility only apply to registered floaters
 		if (!mRectControl.empty())
 		{
-			mRectControl = LLFloaterReg::declareRectControl(mInstanceName);
+			mRectControl = LLFloaterReg::declareRectControl(ctrl_name);
 		}
 		if (!mVisibilityControl.empty())
 		{
-			mVisibilityControl = LLFloaterReg::declareVisibilityControl(mInstanceName);
+			mVisibilityControl = LLFloaterReg::declareVisibilityControl(ctrl_name);
 		}
 		if(!mDocStateControl.empty())
 		{
-			mDocStateControl = LLFloaterReg::declareDockStateControl(mInstanceName);
+			mDocStateControl = LLFloaterReg::declareDockStateControl(ctrl_name);
 		}
 
 	}
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 3d6fc0d8fd..3f0c1fa946 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -214,10 +214,10 @@ void LLSideTrayTab::toggleTabDocked()
 {
 	std::string tab_name = getName();
 
-	LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", tab_name));
+	LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name);
 	if (!floater_tab) return;
 
-	LLFloaterReg::toggleInstance("side_bar_tab", LLSD().with("name", tab_name));
+	LLFloaterReg::toggleInstance("side_bar_tab", tab_name);
 
 	LLSideTray* side_tray = LLSideTray::getInstance();
 
@@ -336,7 +336,7 @@ public:
 
 			tab->toggleTabDocked();
 
-			LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", tab->getName()));
+			LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName());
 			if (!floater_tab) return FALSE;
 
 			LLRect original_rect = floater_tab->getRect();
@@ -502,7 +502,7 @@ LLPanel* LLSideTray::openChildPanel(LLSideTrayTab* tab, const std::string& panel
 	}
 	else
 	{
-		LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", tab_name));
+		LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name);
 		if (!floater_tab) return NULL;
 
 		// Restore the floater if it was minimized.
diff --git a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml
index 1466c2d2a5..35df6a37f6 100644
--- a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml
+++ b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <floater
  can_close="false"
- can_resize="true">
+ can_resize="true"
+ save_rect="true"
+ >
 </floater>
-- 
GitLab