diff --git a/modules/juce_gui_basics/widgets/juce_TreeView.cpp b/modules/juce_gui_basics/widgets/juce_TreeView.cpp index 097ea89615..b31bc49152 100644 --- a/modules/juce_gui_basics/widgets/juce_TreeView.cpp +++ b/modules/juce_gui_basics/widgets/juce_TreeView.cpp @@ -560,7 +560,7 @@ Viewport* TreeView::getViewport() const noexcept void TreeView::clearSelectedItems() { if (rootItem != nullptr) - rootItem->deselectAllRecursively(); + rootItem->deselectAllRecursively (nullptr); } int TreeView::getNumSelectedItems (int maximumDepthToSearchTo) const noexcept @@ -1299,12 +1299,13 @@ bool TreeViewItem::isSelected() const noexcept return selected; } -void TreeViewItem::deselectAllRecursively() +void TreeViewItem::deselectAllRecursively (TreeViewItem* itemToIgnore) { - setSelected (false, false); + if (this != itemToIgnore) + setSelected (false, false); for (int i = 0; i < subItems.size(); ++i) - subItems.getUnchecked(i)->deselectAllRecursively(); + subItems.getUnchecked(i)->deselectAllRecursively (itemToIgnore); } void TreeViewItem::setSelected (const bool shouldBeSelected, @@ -1315,7 +1316,7 @@ void TreeViewItem::setSelected (const bool shouldBeSelected, return; if (deselectOtherItemsFirst) - getTopLevelItem()->deselectAllRecursively(); + getTopLevelItem()->deselectAllRecursively (this); if (shouldBeSelected != selected) { diff --git a/modules/juce_gui_basics/widgets/juce_TreeView.h b/modules/juce_gui_basics/widgets/juce_TreeView.h index ad6fd51afb..dc46c0411e 100644 --- a/modules/juce_gui_basics/widgets/juce_TreeView.h +++ b/modules/juce_gui_basics/widgets/juce_TreeView.h @@ -557,7 +557,7 @@ private: TreeViewItem* getDeepestOpenParentItem() noexcept; int getNumRows() const noexcept; TreeViewItem* getItemOnRow (int index) noexcept; - void deselectAllRecursively(); + void deselectAllRecursively (TreeViewItem* itemToIgnore); int countSelectedItemsRecursively (int depth) const noexcept; TreeViewItem* getSelectedItemWithIndex (int index) noexcept; TreeViewItem* getNextVisibleItem (bool recurse) const noexcept;