From d66b22334191de1eb5a7a3ecdebce60b0e49cb33 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Mon, 1 Feb 2010 12:58:43 +0000 Subject: [PATCH] Move the parent along with child items in the language selection list. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35378 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/preferences/locale/LocaleWindow.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/preferences/locale/LocaleWindow.cpp b/src/preferences/locale/LocaleWindow.cpp index 26bbc24216..49071d0c76 100644 --- a/src/preferences/locale/LocaleWindow.cpp +++ b/src/preferences/locale/LocaleWindow.cpp @@ -176,17 +176,28 @@ LanguageListView::MoveItems(BList& items, int32 index) void -LanguageListView::MoveItemFrom(BOutlineListView* origin, int32 index, int32 dropSpot) +LanguageListView::MoveItemFrom(BOutlineListView* origin, int32 index, + int32 dropSpot) { - int itemCount = origin->CountItemsUnder(origin->FullListItemAt(index), true); - LanguageListItem* newItem = new LanguageListItem(*static_cast - (origin->FullListItemAt(index))); + // Check that the node we are going to move is a top-level one. + // If not, we want his parent instead + + LanguageListItem* itemToMove = static_cast(origin->Superitem( + origin->FullListItemAt(index))); + if (itemToMove == NULL) { + itemToMove = static_cast( + origin->FullListItemAt(index)); + } else + index = origin->FullListIndexOf(itemToMove); + + int itemCount = origin->CountItemsUnder(itemToMove, true); + LanguageListItem* newItem = new LanguageListItem(*itemToMove); this->AddItem(newItem, dropSpot); - newItem->SetExpanded(origin->FullListItemAt(index)->IsExpanded()); + newItem->SetExpanded(itemToMove->IsExpanded()); for (int i = 0; i < itemCount ; i++) { LanguageListItem* subItem = static_cast( - origin->ItemUnderAt(origin->FullListItemAt(index), true, i)); + origin->ItemUnderAt(itemToMove, true, i)); this->AddUnder(new LanguageListItem(*subItem),newItem); } origin->RemoveItem(index);