diff options
-rw-r--r-- | indra/llui/lltoolbar.cpp | 5 | ||||
-rw-r--r-- | indra/newview/lltoolbarview.cpp | 27 |
2 files changed, 24 insertions, 8 deletions
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index d4633d7c3b..a1ea4ba18b 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -425,12 +425,12 @@ int LLToolBar::getRankFromPosition(S32& x, S32& y) } if (it_button != end_button) { - x = button_rect.mRight + dx; + x = button_rect.mLeft + dx; y = button_rect.mTop + dy; } else { - x = button_rect.mLeft + dx; + x = button_rect.mRight + dx; y = button_rect.mBottom + dy; } @@ -655,6 +655,7 @@ void LLToolBar::draw() LLUICtrl::draw(); caret->setVisible(FALSE); + mDragAndDropTarget = false; } void LLToolBar::reshape(S32 width, S32 height, BOOL called_from_parent) diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 8ae9328f6d..86f6477710 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -406,20 +406,35 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t if (command) { // Convert the (x,y) position in rank in toolbar - int rank = 0; + int new_rank = LLToolBar::RANK_NONE; if (!toolbar->isReadOnly()) { - rank = toolbar->getRankFromPosition(x,y); + new_rank = toolbar->getRankFromPosition(x,y); } // Suppress the command from the toolbars (including the one it's dropped in, // this will handle move position). - gToolBarView->mToolbarLeft->removeCommand(command_id); - gToolBarView->mToolbarRight->removeCommand(command_id); - gToolBarView->mToolbarBottom->removeCommand(command_id); + int old_rank = LLToolBar::RANK_NONE; + int rank; + if ((rank = gToolBarView->mToolbarLeft->removeCommand(command_id)) != LLToolBar::RANK_NONE) + { + old_rank = rank; + } + if ((rank = gToolBarView->mToolbarRight->removeCommand(command_id)) != LLToolBar::RANK_NONE) + { + old_rank = rank; + } + if ((rank = gToolBarView->mToolbarBottom->removeCommand(command_id)) != LLToolBar::RANK_NONE) + { + old_rank = rank; + } // Now insert it in the toolbar at the detected rank if (!toolbar->isReadOnly()) { - toolbar->addCommand(command->id(),rank); + if ((old_rank != LLToolBar::RANK_NONE) && (old_rank < new_rank)) + { + new_rank -= 1; + } + toolbar->addCommand(command->id(),new_rank); } } else |