summaryrefslogtreecommitdiff
path: root/indra/llui/lldockablefloater.cpp
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2009-09-09 04:27:06 +0000
committerSteven Bennetts <steve@lindenlab.com>2009-09-09 04:27:06 +0000
commit4601aef70abe611a2a25b3e236cc089ff2bcb6af (patch)
treead639e7d5c1724c64cc0d894ebceb017f57dd92b /indra/llui/lldockablefloater.cpp
parent579d8447d3269fc6ed747774f1b612a88d850781 (diff)
merge -r 1586-1593 https://svn.aws.productengine.com/secondlife/pe/stable-2 -> viewer-2.0.0-3
Fixes: EXT-839 EXT-859 EXT-868 EXT-795 EXT-861 EXT-678 EXT-848 EXT-873
Diffstat (limited to 'indra/llui/lldockablefloater.cpp')
-rw-r--r--indra/llui/lldockablefloater.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp
index 5243f67a76..29f78f6290 100644
--- a/indra/llui/lldockablefloater.cpp
+++ b/indra/llui/lldockablefloater.cpp
@@ -34,10 +34,14 @@
#include "lldockablefloater.h"
+//static
+LLDockableFloater* LLDockableFloater::instance = NULL;
+
LLDockableFloater::LLDockableFloater(LLDockControl* dockControl,
const LLSD& key, const Params& params) :
LLFloater(key, params), mDockControl(dockControl)
{
+ resetInstance();
}
LLDockableFloater::~LLDockableFloater()
@@ -51,12 +55,42 @@ BOOL LLDockableFloater::postBuild()
return LLView::postBuild();
}
+void LLDockableFloater::resetInstance()
+{
+ if (instance != this)
+ {
+ if (instance != NULL && instance->isDocked())
+ {
+ //closeFloater() is not virtual
+ if (instance->canClose())
+ {
+ instance->closeFloater();
+ }
+ else
+ {
+ instance->setVisible(FALSE);
+ }
+ }
+ instance = this;
+ }
+}
+
+void LLDockableFloater::setVisible(BOOL visible)
+{
+ if(visible && isDocked())
+ {
+ resetInstance();
+ }
+ LLFloater::setVisible(visible);
+}
+
void LLDockableFloater::setDocked(bool docked, bool pop_on_undock)
{
if (mDockControl.get() != NULL)
{
if (docked)
{
+ resetInstance();
mDockControl.get()->on();
}
else