diff options
author | Merov Linden <merov@lindenlab.com> | 2013-02-04 19:29:05 -0800 |
---|---|---|
committer | Merov Linden <merov@lindenlab.com> | 2013-02-04 19:29:05 -0800 |
commit | 6a68f16f2e908838b89216543b36f07e2a71c360 (patch) | |
tree | 978a271c4df54ec9d7b78cc9473450fccc5d1b33 | |
parent | e5c593682af3a4958316d7747d39f41e2a65e88c (diff) |
CHUI-732 : Fixed! Do not iterate through selection while modufying it at the same time, use a temp set.
-rw-r--r-- | indra/llui/llfolderview.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 7c1ca017d7..c756ff84e1 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -924,23 +924,27 @@ void LLFolderView::cut() { // clear the inventory clipboard LLClipboard::instance().reset(); - S32 count = mSelectedItems.size(); - if(getVisible() && getEnabled() && (count > 0)) + if(getVisible() && getEnabled() && (mSelectedItems.size() > 0)) { + // Find out which item will be selected once the selection will be cut LLFolderViewItem* item_to_select = getNextUnselectedItem(); + + // Get the selection: removeItem() modified mSelectedItems and makes iterating on it unwise + std::set<LLFolderViewItem*> inventory_selected = getSelectionList(); - selected_items_t::iterator item_it; - for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it) + // Move each item to the clipboard and out of their folder + for (std::set<LLFolderViewItem*>::iterator item_it = inventory_selected.begin(); item_it != inventory_selected.end(); ++item_it) { LLFolderViewItem* item_to_cut = *item_it; LLFolderViewModelItem* listener = item_to_cut->getViewModelItem(); - if(listener) + if (listener) { listener->cutToClipboard(); listener->removeItem(); } } - + + // Update the selection setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, mParentPanel->hasFocus()); } mSearchString.clear(); |