summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormaksymsproductengine <maksymsproductengine@lindenlab.com>2014-02-26 20:14:41 +0200
committermaksymsproductengine <maksymsproductengine@lindenlab.com>2014-02-26 20:14:41 +0200
commit483ad8dc558156b65bf1e0a301fc18040bb038c3 (patch)
tree0e7f7727be477649d1cb74d976db03544b9e0ea6
parent100b9154dd00187079529dab7b4076bdac92c027 (diff)
MAINT-3555 FIXED crash in LLPanel::~LLPanel() on shutdown:
- LLFloaterView::mToolbarRects[3] was transformed to LLRect mToolbarLeftRect, mToolbarBottomRect, mToolbarRightRect;
-rwxr-xr-xindra/llui/llfloater.cpp27
-rwxr-xr-xindra/llui/llfloater.h4
2 files changed, 19 insertions, 12 deletions
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index e6db65916e..8e7aa7b22b 100755
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2815,29 +2815,26 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
}
}
- const LLRect& left_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_LEFT];
- const LLRect& bottom_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_BOTTOM];
- const LLRect& right_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_RIGHT];
const LLRect& floater_rect = floater->getRect();
- S32 delta_left = left_toolbar_rect.notEmpty() ? left_toolbar_rect.mRight - floater_rect.mRight : 0;
- S32 delta_bottom = bottom_toolbar_rect.notEmpty() ? bottom_toolbar_rect.mTop - floater_rect.mTop : 0;
- S32 delta_right = right_toolbar_rect.notEmpty() ? right_toolbar_rect.mLeft - floater_rect.mLeft : 0;
+ S32 delta_left = mToolbarLeftRect.notEmpty() ? mToolbarLeftRect.mRight - floater_rect.mRight : 0;
+ S32 delta_bottom = mToolbarBottomRect.notEmpty() ? mToolbarBottomRect.mTop - floater_rect.mTop : 0;
+ S32 delta_right = mToolbarRightRect.notEmpty() ? mToolbarRightRect.mLeft - floater_rect.mLeft : 0;
// move window fully onscreen
if (floater->translateIntoRect( snap_in_toolbars ? getSnapRect() : gFloaterView->getRect(), allow_partial_outside ? FLOATER_MIN_VISIBLE_PIXELS : S32_MAX ))
{
floater->clearSnapTarget();
}
- else if (delta_left > 0 && floater_rect.mTop < left_toolbar_rect.mTop && floater_rect.mBottom > left_toolbar_rect.mBottom)
+ else if (delta_left > 0 && floater_rect.mTop < mToolbarLeftRect.mTop && floater_rect.mBottom > mToolbarLeftRect.mBottom)
{
floater->translate(delta_left, 0);
}
- else if (delta_bottom > 0 && floater_rect.mLeft > bottom_toolbar_rect.mLeft && floater_rect.mRight < bottom_toolbar_rect.mRight)
+ else if (delta_bottom > 0 && floater_rect.mLeft > mToolbarBottomRect.mLeft && floater_rect.mRight < mToolbarBottomRect.mRight)
{
floater->translate(0, delta_bottom);
}
- else if (delta_right < 0 && floater_rect.mTop < right_toolbar_rect.mTop && floater_rect.mBottom > right_toolbar_rect.mBottom)
+ else if (delta_right < 0 && floater_rect.mTop < mToolbarRightRect.mTop && floater_rect.mBottom > mToolbarRightRect.mBottom)
{
floater->translate(delta_right, 0);
}
@@ -3045,9 +3042,17 @@ void LLFloaterView::popVisibleAll(const skip_list_t& skip_list)
void LLFloaterView::setToolbarRect(LLToolBarEnums::EToolBarLocation tb, const LLRect& toolbar_rect)
{
- if (tb < LLToolBarEnums::TOOLBAR_COUNT)
+ switch (tb)
{
- mToolbarRects[tb] = toolbar_rect;
+ case LLToolBarEnums::TOOLBAR_LEFT:
+ mToolbarLeftRect = toolbar_rect;
+ break;
+ case LLToolBarEnums::TOOLBAR_BOTTOM:
+ mToolbarBottomRect = toolbar_rect;
+ break;
+ case LLToolBarEnums::TOOLBAR_RIGHT:
+ mToolbarRightRect = toolbar_rect;
+ break;
}
}
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index ccaae1d02b..12eb3cdbfa 100755
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -581,7 +581,9 @@ private:
void hiddenFloaterClosed(LLFloater* floater);
LLRect mLastSnapRect;
- LLRect mToolbarRects[LLToolBarEnums::TOOLBAR_COUNT];
+ LLRect mToolbarLeftRect;
+ LLRect mToolbarBottomRect;
+ LLRect mToolbarRightRect;
LLHandle<LLView> mSnapView;
BOOL mFocusCycleMode;
S32 mSnapOffsetBottom;