Skip to content

Commit

Permalink
prevent multiple enumerations
Browse files Browse the repository at this point in the history
  • Loading branch information
Edward Miller committed Jan 19, 2024
1 parent 5d2ac90 commit 9979459
Showing 1 changed file with 20 additions and 7 deletions.
27 changes: 20 additions & 7 deletions src/Core/src/Core/Extensions/VisualTreeElementExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Maui.Graphics;
Expand Down Expand Up @@ -145,14 +145,27 @@ static List<IVisualTreeElement> GetVisualTreeElementsWindowsInternal(IVisualTree

if (uiElement != null)
{
var uniqueElements = findChildren(uiElement).Distinct();
var viewTree = visualElement.GetVisualTreeDescendants().Where(n => n is IView view && view.Handler is not null).Select(n => new Tuple<IView, object?>((IView)n, ((IView)n).ToPlatform()));
var testList = viewTree.Where(n => uniqueElements.Contains(n.Item2)).Select(n => n.Item1);
if (testList != null && testList.Any())
visualElements.AddRange(testList.Select(n => (IVisualTreeElement)n));
var uniqueElements = findChildren(uiElement).ToHashSet();

var descendants = visualElement.GetVisualTreeDescendants();

// Add in reverse order
for (int i = descendants.Count - 1; i >= 0; i--)
{
var descendant = descendants[i];

if (descendant is not IView view || view.Handler is null)
{
continue;
}

if (uniqueElements.Contains(view.ToPlatform()))
{
visualElements.Add(descendant);
}
}
}

visualElements.Reverse();
return visualElements;
}
#endif
Expand Down

0 comments on commit 9979459

Please sign in to comment.