summaryrefslogtreecommitdiff
path: root/indra/llui/lldockcontrol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/lldockcontrol.cpp')
-rw-r--r--indra/llui/lldockcontrol.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index bec7f04cc0..d666f2be56 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -48,12 +48,25 @@ LLDockControl::LLDockControl(LLView* dockWidget, LLFloater* dockableFloater,
{
off();
}
+
+ if (dockWidget != NULL) {
+ repositionDockable();
+ }
}
LLDockControl::~LLDockControl()
{
}
+void LLDockControl::setDock(LLView* dockWidget)
+{
+ mDockWidget = dockWidget;
+ if (mDockWidget != NULL)
+ {
+ repositionDockable();
+ }
+}
+
void LLDockControl::repositionDockable()
{
if (mEnabled)
@@ -65,11 +78,14 @@ void LLDockControl::repositionDockable()
void LLDockControl::calculateDockablePosition()
{
LLRect dockRect = mDockWidget->calcScreenRect();
- if (mPrevDockRect != dockRect || mRecalculateDocablePosition)
+ LLRect rootRect = mDockableFloater->getRootView()->getRect();
+
+ // recalculate dockable position if dock position changed
+ // or root view rect changed or recalculation is forced
+ if (mPrevDockRect != dockRect || mRootRect != rootRect
+ || mRecalculateDocablePosition)
{
LLRect dockableRect = mDockableFloater->calcScreenRect();
- LLRect rootRect = mDockableFloater->getRootView()->getRect();
-
S32 x = 0;
S32 y = 0;
switch (mDockAt)
@@ -100,6 +116,7 @@ void LLDockControl::calculateDockablePosition()
mDockableFloater->screenPointToLocal(mDockTongueX, mDockTongueY,
&mDockTongueX, &mDockTongueY);
mPrevDockRect = dockRect;
+ mRootRect = rootRect;
mRecalculateDocablePosition = false;
}
}