SL-17818 Crash at childrenHandleDragAndDrop
parent
3f89c98dac
commit
bb318110ef
|
|
@ -471,7 +471,25 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
|||
}
|
||||
|
||||
// check if we are dragging an existing item from the favorites bar
|
||||
if (item && mDragItemId == item->getUUID())
|
||||
bool existing_drop = false;
|
||||
if (item && mDragItemId == item->getUUID())
|
||||
{
|
||||
// There is a chance of mDragItemId being obsolete
|
||||
// ex: can happen if something interrupts viewer, which
|
||||
// results in viewer not geting a 'mouse up' signal
|
||||
for (LLInventoryModel::item_array_t::iterator i = mItems.begin(); i != mItems.end(); ++i)
|
||||
{
|
||||
LLViewerInventoryItem* currItem = *i;
|
||||
|
||||
if (currItem->getUUID() == mDragItemId)
|
||||
{
|
||||
existing_drop = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (existing_drop)
|
||||
{
|
||||
*accept = ACCEPT_YES_SINGLE;
|
||||
|
||||
|
|
@ -500,6 +518,7 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
|||
if (mItems.empty())
|
||||
{
|
||||
setLandingTab(NULL);
|
||||
mLastTab = NULL;
|
||||
}
|
||||
handleNewFavoriteDragAndDrop(item, favorites_id, x, y);
|
||||
}
|
||||
|
|
@ -515,6 +534,12 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
|||
|
||||
void LLFavoritesBarCtrl::handleExistingFavoriteDragAndDrop(S32 x, S32 y)
|
||||
{
|
||||
if (mItems.empty())
|
||||
{
|
||||
// Isn't supposed to be empty
|
||||
return;
|
||||
}
|
||||
|
||||
// Identify the button hovered and the side to drop
|
||||
LLFavoriteLandmarkButton* dest = dynamic_cast<LLFavoriteLandmarkButton*>(mLandingTab);
|
||||
bool insert_before = true;
|
||||
|
|
@ -787,6 +812,7 @@ void LLFavoritesBarCtrl::updateButtons(bool force_update)
|
|||
if(mItems.empty())
|
||||
{
|
||||
mBarLabel->setVisible(TRUE);
|
||||
mLastTab = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -833,6 +859,10 @@ void LLFavoritesBarCtrl::updateButtons(bool force_update)
|
|||
dynamic_cast<LLFavoriteLandmarkButton*> (*cur_it);
|
||||
if (button)
|
||||
{
|
||||
if (mLastTab == button)
|
||||
{
|
||||
mLastTab = NULL;
|
||||
}
|
||||
removeChild(button);
|
||||
delete button;
|
||||
}
|
||||
|
|
@ -870,6 +900,17 @@ void LLFavoritesBarCtrl::updateButtons(bool force_update)
|
|||
|
||||
mLastTab = last_new_button;
|
||||
}
|
||||
if (!mLastTab && mItems.size() > 0)
|
||||
{
|
||||
// mMoreTextBox was removed, so LLFavoriteLandmarkButtons
|
||||
// should be the only ones in the list
|
||||
LLFavoriteLandmarkButton* button = dynamic_cast<LLFavoriteLandmarkButton*> (childs->back());
|
||||
if (button)
|
||||
{
|
||||
mLastTab = button;
|
||||
}
|
||||
}
|
||||
|
||||
mFirstDropDownItem = j;
|
||||
// Chevron button
|
||||
if (mFirstDropDownItem < mItems.size())
|
||||
|
|
|
|||
Loading…
Reference in New Issue