Browse Source

Fix failing popup tests.

pull/4099/head
Steven Kirk 6 years ago
parent
commit
529b279549
  1. 33
      src/Avalonia.Controls/Primitives/LightDismissOverlayLayer.cs
  2. 3
      src/Avalonia.Controls/Primitives/Popup.cs
  3. 3
      tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs

33
src/Avalonia.Controls/Primitives/LightDismissOverlayLayer.cs

@ -1,10 +1,41 @@
using System;
using System.Linq;
using Avalonia.Rendering;
using Avalonia.Controls.Templates;
using Avalonia.Styling;
using Avalonia.VisualTree;
#nullable enable
namespace Avalonia.Controls.Primitives
{
/// <summary>
/// A layer that is used to dismiss a <see cref="Popup"/> when the user clicks outside.
/// </summary>
public class LightDismissOverlayLayer : Border
{
/// <summary>
/// Returns the light dismiss overlay for a specified visual.
/// </summary>
/// <param name="visual">The visual.</param>
/// <returns>The light dismiss overlay, or null if none found.</returns>
public static LightDismissOverlayLayer? GetLightDismissOverlayLayer(IVisual visual)
{
visual = visual ?? throw new ArgumentNullException(nameof(visual));
VisualLayerManager? manager;
if (visual is TopLevel topLevel)
{
manager = topLevel.GetTemplateChildren()
.OfType<VisualLayerManager>()
.FirstOrDefault();
}
else
{
manager = visual.FindAncestorOfType<VisualLayerManager>();
}
return manager?.LightDismissOverlayLayer;
}
}
}

3
src/Avalonia.Controls/Primitives/Popup.cs

@ -384,8 +384,7 @@ namespace Avalonia.Controls.Primitives
if (!StaysOpen)
{
var layerManager = placementTarget.FindAncestorOfType<VisualLayerManager>();
var dismissLayer = layerManager?.LightDismissOverlayLayer;
var dismissLayer = LightDismissOverlayLayer.GetLightDismissOverlayLayer(placementTarget);
if (dismissLayer != null)
{

3
tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs

@ -392,7 +392,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
++raised;
};
window.RaiseEvent(press);
var lightDismissLayer = window.FindDescendantOfType<VisualLayerManager>().LightDismissOverlayLayer;
lightDismissLayer.RaiseEvent(press);
Assert.Equal(1, raised);
}

Loading…
Cancel
Save