mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
TreeView: Fix restoring scroll position in restoreOpennessState
This commit fixes a regression introduced in 70968d46.
This commit is contained in:
parent
f370edcb5d
commit
2e0646abba
2 changed files with 16 additions and 15 deletions
|
|
@ -747,9 +747,10 @@ public:
|
|||
|
||||
enum class Async { yes, no };
|
||||
|
||||
void recalculatePositions (Async useAsyncUpdate)
|
||||
void recalculatePositions (Async useAsyncUpdate, std::optional<Point<int>> viewportPosition)
|
||||
{
|
||||
needsRecalculating = true;
|
||||
viewportAfterRecalculation = std::move (viewportPosition);
|
||||
|
||||
if (useAsyncUpdate == Async::yes)
|
||||
triggerAsyncUpdate();
|
||||
|
|
@ -765,15 +766,13 @@ private:
|
|||
|
||||
void handleAsyncUpdate() override
|
||||
{
|
||||
if (structureChanged)
|
||||
if (std::exchange (structureChanged, false))
|
||||
{
|
||||
if (auto* handler = owner.getAccessibilityHandler())
|
||||
handler->notifyAccessibilityEvent (AccessibilityEvent::structureChanged);
|
||||
|
||||
structureChanged = false;
|
||||
}
|
||||
|
||||
if (needsRecalculating)
|
||||
if (std::exchange (needsRecalculating, false))
|
||||
{
|
||||
if (auto* root = owner.rootItem)
|
||||
{
|
||||
|
|
@ -790,7 +789,8 @@ private:
|
|||
|
||||
updateComponents (false);
|
||||
|
||||
needsRecalculating = false;
|
||||
if (const auto viewportPosition = std::exchange (viewportAfterRecalculation, {}))
|
||||
setViewPosition (viewportPosition->getX(), viewportPosition->getY());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -810,6 +810,7 @@ private:
|
|||
TreeView& owner;
|
||||
int lastX = -1;
|
||||
bool structureChanged = false, needsRecalculating = false;
|
||||
std::optional<Point<int>> viewportAfterRecalculation;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TreeViewport)
|
||||
};
|
||||
|
|
@ -858,7 +859,7 @@ void TreeView::setRootItem (TreeViewItem* const newRootItem)
|
|||
rootItem->setOpen (true);
|
||||
}
|
||||
|
||||
viewport->recalculatePositions (TreeViewport::Async::no);
|
||||
viewport->recalculatePositions (TreeViewport::Async::no, {});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1020,10 +1021,6 @@ void TreeView::restoreOpennessState (const XmlElement& newState, bool restoreSto
|
|||
{
|
||||
rootItem->restoreOpennessState (newState);
|
||||
|
||||
if (newState.hasAttribute ("scrollPos"))
|
||||
viewport->setViewPosition (viewport->getViewPositionX(),
|
||||
newState.getIntAttribute ("scrollPos"));
|
||||
|
||||
if (restoreStoredSelection)
|
||||
{
|
||||
clearSelectedItems();
|
||||
|
|
@ -1033,7 +1030,11 @@ void TreeView::restoreOpennessState (const XmlElement& newState, bool restoreSto
|
|||
item->setSelected (true, false);
|
||||
}
|
||||
|
||||
updateVisibleItems();
|
||||
const auto scrollPos = newState.hasAttribute ("scrollPos")
|
||||
? std::make_optional<Point<int>> (viewport->getViewPositionX(), newState.getIntAttribute ("scrollPos"))
|
||||
: std::nullopt;
|
||||
|
||||
updateVisibleItems (std::move (scrollPos));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1216,9 +1217,9 @@ bool TreeView::keyPressed (const KeyPress& key)
|
|||
return false;
|
||||
}
|
||||
|
||||
void TreeView::updateVisibleItems()
|
||||
void TreeView::updateVisibleItems (std::optional<Point<int>> viewportPosition)
|
||||
{
|
||||
viewport->recalculatePositions (TreeViewport::Async::yes);
|
||||
viewport->recalculatePositions (TreeViewport::Async::yes, std::move (viewportPosition));
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -935,7 +935,7 @@ private:
|
|||
|
||||
std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override;
|
||||
void itemsChanged() noexcept;
|
||||
void updateVisibleItems();
|
||||
void updateVisibleItems (std::optional<Point<int>> viewportPosition = {});
|
||||
void updateButtonUnderMouse (const MouseEvent&);
|
||||
void showDragHighlight (const InsertPoint&) noexcept;
|
||||
void hideDragHighlight() noexcept;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue