CHUI-703 FIX Notification buttons: "Join","Decline","Info" are duplicated after relogin while group invitation
Changed LLPersistentNotificationStorage::saveNotification() to use notification->asLLSD(true) to skip duplicates Changed LLDockControl::mDockWidget to be a LLHandle<LLView> instead of a LLView* to fix crash (from accessing deleted LLView)master
parent
3016afcd06
commit
c55e4a6124
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
LLDockControl::LLDockControl(LLView* dockWidget, LLFloater* dockableFloater,
|
||||
const LLUIImagePtr& dockTongue, DocAt dockAt, get_allowed_rect_callback_t get_allowed_rect_callback) :
|
||||
mDockWidget(dockWidget),
|
||||
mDockableFloater(dockableFloater),
|
||||
mDockTongue(dockTongue),
|
||||
mDockTongueX(0),
|
||||
|
|
@ -39,6 +38,11 @@ LLDockControl::LLDockControl(LLView* dockWidget, LLFloater* dockableFloater,
|
|||
{
|
||||
mDockAt = dockAt;
|
||||
|
||||
if (dockWidget != NULL)
|
||||
{
|
||||
mDockWidget = dockWidget->getHandle();
|
||||
}
|
||||
|
||||
if (dockableFloater->isDocked())
|
||||
{
|
||||
on();
|
||||
|
|
@ -62,7 +66,7 @@ LLDockControl::LLDockControl(LLView* dockWidget, LLFloater* dockableFloater,
|
|||
repositionDockable();
|
||||
}
|
||||
|
||||
if (mDockWidget != NULL)
|
||||
if (getDock() != NULL)
|
||||
{
|
||||
mDockWidgetVisible = isDockVisible();
|
||||
}
|
||||
|
|
@ -78,14 +82,15 @@ LLDockControl::~LLDockControl()
|
|||
|
||||
void LLDockControl::setDock(LLView* dockWidget)
|
||||
{
|
||||
mDockWidget = dockWidget;
|
||||
if (mDockWidget != NULL)
|
||||
if (dockWidget != NULL)
|
||||
{
|
||||
mDockWidget = dockWidget->getHandle();
|
||||
repositionDockable();
|
||||
mDockWidgetVisible = isDockVisible();
|
||||
}
|
||||
else
|
||||
{
|
||||
mDockWidget = LLHandle<LLView>();
|
||||
mDockWidgetVisible = false;
|
||||
}
|
||||
}
|
||||
|
|
@ -97,8 +102,8 @@ void LLDockControl::getAllowedRect(LLRect& rect)
|
|||
|
||||
void LLDockControl::repositionDockable()
|
||||
{
|
||||
if (!mDockWidget) return;
|
||||
LLRect dockRect = mDockWidget->calcScreenRect();
|
||||
if (!getDock()) return;
|
||||
LLRect dockRect = getDock()->calcScreenRect();
|
||||
LLRect rootRect;
|
||||
LLRect floater_rect = mDockableFloater->calcScreenRect();
|
||||
mGetAllowedRectCallback(rootRect);
|
||||
|
|
@ -150,13 +155,13 @@ bool LLDockControl::isDockVisible()
|
|||
{
|
||||
bool res = true;
|
||||
|
||||
if (mDockWidget != NULL)
|
||||
if (getDock() != NULL)
|
||||
{
|
||||
//we should check all hierarchy
|
||||
res = mDockWidget->isInVisibleChain();
|
||||
res = getDock()->isInVisibleChain();
|
||||
if (res)
|
||||
{
|
||||
LLRect dockRect = mDockWidget->calcScreenRect();
|
||||
LLRect dockRect = getDock()->calcScreenRect();
|
||||
|
||||
switch (mDockAt)
|
||||
{
|
||||
|
|
@ -169,7 +174,7 @@ bool LLDockControl::isDockVisible()
|
|||
// assume that parent for all dockable floaters
|
||||
// is the root view
|
||||
LLRect dockParentRect =
|
||||
mDockWidget->getRootView()->calcScreenRect();
|
||||
getDock()->getRootView()->calcScreenRect();
|
||||
if (dockRect.mRight <= dockParentRect.mLeft
|
||||
|| dockRect.mLeft >= dockParentRect.mRight)
|
||||
{
|
||||
|
|
@ -189,7 +194,7 @@ bool LLDockControl::isDockVisible()
|
|||
void LLDockControl::moveDockable()
|
||||
{
|
||||
// calculate new dockable position
|
||||
LLRect dockRect = mDockWidget->calcScreenRect();
|
||||
LLRect dockRect = getDock()->calcScreenRect();
|
||||
LLRect rootRect;
|
||||
mGetAllowedRectCallback(rootRect);
|
||||
|
||||
|
|
@ -263,7 +268,7 @@ void LLDockControl::moveDockable()
|
|||
|
||||
|
||||
// calculate dock tongue position
|
||||
dockParentRect = mDockWidget->getParent()->calcScreenRect();
|
||||
dockParentRect = getDock()->getParent()->calcScreenRect();
|
||||
if (dockRect.getCenterX() < dockParentRect.mLeft)
|
||||
{
|
||||
mDockTongueX = dockParentRect.mLeft - mDockTongue->getWidth() / 2;
|
||||
|
|
@ -299,7 +304,7 @@ void LLDockControl::moveDockable()
|
|||
}
|
||||
|
||||
// calculate dock tongue position
|
||||
dockParentRect = mDockWidget->getParent()->calcScreenRect();
|
||||
dockParentRect = getDock()->getParent()->calcScreenRect();
|
||||
if (dockRect.getCenterX() < dockParentRect.mLeft)
|
||||
{
|
||||
mDockTongueX = dockParentRect.mLeft - mDockTongue->getWidth() / 2;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public:
|
|||
void setDock(LLView* dockWidget);
|
||||
LLView* getDock()
|
||||
{
|
||||
return mDockWidget;
|
||||
return mDockWidget.get();
|
||||
}
|
||||
void repositionDockable();
|
||||
void drawToungue();
|
||||
|
|
@ -83,7 +83,7 @@ private:
|
|||
bool mRecalculateDockablePosition;
|
||||
bool mDockWidgetVisible;
|
||||
DocAt mDockAt;
|
||||
LLView* mDockWidget;
|
||||
LLHandle<LLView> mDockWidget;
|
||||
LLRect mPrevDockRect;
|
||||
LLRect mRootRect;
|
||||
LLRect mFloaterRect;
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ void LLPersistentNotificationStorage::saveNotifications()
|
|||
continue;
|
||||
}
|
||||
|
||||
data.append(notification->asLLSD());
|
||||
data.append(notification->asLLSD(true));
|
||||
}
|
||||
|
||||
writeNotifications(output);
|
||||
|
|
|
|||
Loading…
Reference in New Issue