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 System.Linq;
using Avalonia.Rendering; using Avalonia.Controls.Templates;
using Avalonia.Styling;
using Avalonia.VisualTree; using Avalonia.VisualTree;
#nullable enable
namespace Avalonia.Controls.Primitives 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 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) if (!StaysOpen)
{ {
var layerManager = placementTarget.FindAncestorOfType<VisualLayerManager>(); var dismissLayer = LightDismissOverlayLayer.GetLightDismissOverlayLayer(placementTarget);
var dismissLayer = layerManager?.LightDismissOverlayLayer;
if (dismissLayer != null) if (dismissLayer != null)
{ {

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

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

Loading…
Cancel
Save