From d670efd162f2c978d1a88b0fee33308a6586a582 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Wed, 4 Feb 2026 03:07:23 +0000 Subject: [PATCH] Make IPopupHost a private API (#20597) * Make IPopupHost a private API * Update API suppressions --- api/Avalonia.nupkg.xml | 36 +++++++++++++++++++ .../Diagnostics/ObsoletionMessages.cs | 12 ------- .../Primitives/IPopupHost.cs | 5 +-- .../Primitives/OverlayPopupHost.cs | 18 ++-------- .../PopupPositioning/IPopupPositioner.cs | 1 - .../PopupPositioning/PopupPositionRequest.cs | 1 - src/Avalonia.Controls/Primitives/PopupRoot.cs | 11 ------ 7 files changed, 39 insertions(+), 45 deletions(-) delete mode 100644 src/Avalonia.Base/Diagnostics/ObsoletionMessages.cs diff --git a/api/Avalonia.nupkg.xml b/api/Avalonia.nupkg.xml index 15e956bdc6..272f5d71c7 100644 --- a/api/Avalonia.nupkg.xml +++ b/api/Avalonia.nupkg.xml @@ -415,6 +415,24 @@ baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll current/Avalonia/lib/net10.0/Avalonia.Controls.dll + + CP0002 + M:Avalonia.Controls.Primitives.OverlayPopupHost.ConfigurePosition(Avalonia.Visual,Avalonia.Controls.PlacementMode,Avalonia.Point,Avalonia.Controls.Primitives.PopupPositioning.PopupAnchor,Avalonia.Controls.Primitives.PopupPositioning.PopupGravity,Avalonia.Controls.Primitives.PopupPositioning.PopupPositionerConstraintAdjustment,System.Nullable{Avalonia.Rect}) + baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll + current/Avalonia/lib/net10.0/Avalonia.Controls.dll + + + CP0002 + M:Avalonia.Controls.Primitives.OverlayPopupHost.CreatePopupHost(Avalonia.Visual,Avalonia.IAvaloniaDependencyResolver) + baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll + current/Avalonia/lib/net10.0/Avalonia.Controls.dll + + + CP0002 + M:Avalonia.Controls.Primitives.PopupRoot.ConfigurePosition(Avalonia.Visual,Avalonia.Controls.PlacementMode,Avalonia.Point,Avalonia.Controls.Primitives.PopupPositioning.PopupAnchor,Avalonia.Controls.Primitives.PopupPositioning.PopupGravity,Avalonia.Controls.Primitives.PopupPositioning.PopupPositionerConstraintAdjustment,System.Nullable{Avalonia.Rect}) + baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll + current/Avalonia/lib/net10.0/Avalonia.Controls.dll + CP0002 M:Avalonia.Controls.Primitives.TextSearch.GetText(Avalonia.Controls.Control) @@ -817,6 +835,24 @@ baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll current/Avalonia/lib/net8.0/Avalonia.Controls.dll + + CP0002 + M:Avalonia.Controls.Primitives.OverlayPopupHost.ConfigurePosition(Avalonia.Visual,Avalonia.Controls.PlacementMode,Avalonia.Point,Avalonia.Controls.Primitives.PopupPositioning.PopupAnchor,Avalonia.Controls.Primitives.PopupPositioning.PopupGravity,Avalonia.Controls.Primitives.PopupPositioning.PopupPositionerConstraintAdjustment,System.Nullable{Avalonia.Rect}) + baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll + current/Avalonia/lib/net8.0/Avalonia.Controls.dll + + + CP0002 + M:Avalonia.Controls.Primitives.OverlayPopupHost.CreatePopupHost(Avalonia.Visual,Avalonia.IAvaloniaDependencyResolver) + baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll + current/Avalonia/lib/net8.0/Avalonia.Controls.dll + + + CP0002 + M:Avalonia.Controls.Primitives.PopupRoot.ConfigurePosition(Avalonia.Visual,Avalonia.Controls.PlacementMode,Avalonia.Point,Avalonia.Controls.Primitives.PopupPositioning.PopupAnchor,Avalonia.Controls.Primitives.PopupPositioning.PopupGravity,Avalonia.Controls.Primitives.PopupPositioning.PopupPositionerConstraintAdjustment,System.Nullable{Avalonia.Rect}) + baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll + current/Avalonia/lib/net8.0/Avalonia.Controls.dll + CP0002 M:Avalonia.Controls.Primitives.TextSearch.GetText(Avalonia.Controls.Control) diff --git a/src/Avalonia.Base/Diagnostics/ObsoletionMessages.cs b/src/Avalonia.Base/Diagnostics/ObsoletionMessages.cs deleted file mode 100644 index bfada91abe..0000000000 --- a/src/Avalonia.Base/Diagnostics/ObsoletionMessages.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Avalonia.Diagnostics; - -internal static class ObsoletionMessages -{ - public const string MayBeRemovedInAvalonia12 = "This API may be removed in Avalonia 12. If you depend on this API, please open an issue with details of your use-case."; -} diff --git a/src/Avalonia.Controls/Primitives/IPopupHost.cs b/src/Avalonia.Controls/Primitives/IPopupHost.cs index c4f992363e..7ed87682a6 100644 --- a/src/Avalonia.Controls/Primitives/IPopupHost.cs +++ b/src/Avalonia.Controls/Primitives/IPopupHost.cs @@ -1,11 +1,9 @@ using System; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives.PopupPositioning; -using Avalonia.Diagnostics; using Avalonia.Input; using Avalonia.Media; using Avalonia.Metadata; -using Avalonia.VisualTree; namespace Avalonia.Controls.Primitives { @@ -17,8 +15,7 @@ namespace Avalonia.Controls.Primitives /// () or an which is created /// on an . /// - [NotClientImplementable] - [Unstable(ObsoletionMessages.MayBeRemovedInAvalonia12)] + [PrivateApi] public interface IPopupHost : IDisposable, IFocusScope { /// diff --git a/src/Avalonia.Controls/Primitives/OverlayPopupHost.cs b/src/Avalonia.Controls/Primitives/OverlayPopupHost.cs index 3e4fee20b7..d52e0e4d98 100644 --- a/src/Avalonia.Controls/Primitives/OverlayPopupHost.cs +++ b/src/Avalonia.Controls/Primitives/OverlayPopupHost.cs @@ -121,16 +121,6 @@ namespace Avalonia.Controls.Primitives // Nothing to do here: overlay popups are implemented inside the window. } - [Unstable(ObsoletionMessages.MayBeRemovedInAvalonia12)] - public void ConfigurePosition(Visual target, PlacementMode placement, Point offset, - PopupAnchor anchor = PopupAnchor.None, PopupGravity gravity = PopupGravity.None, - PopupPositionerConstraintAdjustment constraintAdjustment = PopupPositionerConstraintAdjustment.All, - Rect? rect = null) - { - ((IPopupHost)this).ConfigurePosition(new PopupPositionRequest(target, placement, offset, anchor, gravity, - constraintAdjustment, rect, null)); - } - /// void IPopupHost.ConfigurePosition(PopupPositionRequest positionRequest) { @@ -191,12 +181,8 @@ namespace Avalonia.Controls.Primitives double IManagedPopupPositionerPopup.Scaling => 1; - // TODO12: mark PrivateAPI or internal. - [Unstable("PopupHost is considered an internal API. Use Popup or any Popup-based controls (Flyout, Tooltip) instead.")] - public static IPopupHost CreatePopupHost(Visual target, IAvaloniaDependencyResolver? dependencyResolver) - => CreatePopupHost(target, dependencyResolver, false); - - internal static IPopupHost CreatePopupHost(Visual target, IAvaloniaDependencyResolver? dependencyResolver, bool shouldUseOverlayLayer) + [PrivateApi] + public static IPopupHost CreatePopupHost(Visual target, IAvaloniaDependencyResolver? dependencyResolver, bool shouldUseOverlayLayer) { if (!shouldUseOverlayLayer) { diff --git a/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs b/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs index a0b853f2dc..82dead1ed5 100644 --- a/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs +++ b/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs @@ -66,7 +66,6 @@ namespace Avalonia.Controls.Primitives.PopupPositioning /// requirement that a popup must intersect with or be at least partially adjacent to its parent /// surface. /// - [Unstable(ObsoletionMessages.MayBeRemovedInAvalonia12)] public record struct PopupPositionerParameters { private PopupGravity _gravity; diff --git a/src/Avalonia.Controls/Primitives/PopupPositioning/PopupPositionRequest.cs b/src/Avalonia.Controls/Primitives/PopupPositioning/PopupPositionRequest.cs index 35e15e3057..ab1002cb9b 100644 --- a/src/Avalonia.Controls/Primitives/PopupPositioning/PopupPositionRequest.cs +++ b/src/Avalonia.Controls/Primitives/PopupPositioning/PopupPositionRequest.cs @@ -4,7 +4,6 @@ using Avalonia.Metadata; namespace Avalonia.Controls.Primitives.PopupPositioning; [PrivateApi] -[Unstable(ObsoletionMessages.MayBeRemovedInAvalonia12)] public class PopupPositionRequest { internal PopupPositionRequest(Visual target, PlacementMode placement) diff --git a/src/Avalonia.Controls/Primitives/PopupRoot.cs b/src/Avalonia.Controls/Primitives/PopupRoot.cs index f88ed0b93b..6dc4627f0c 100644 --- a/src/Avalonia.Controls/Primitives/PopupRoot.cs +++ b/src/Avalonia.Controls/Primitives/PopupRoot.cs @@ -136,17 +136,6 @@ namespace Avalonia.Controls.Primitives } } - [Unstable(ObsoletionMessages.MayBeRemovedInAvalonia12)] - public void ConfigurePosition(Visual target, PlacementMode placement, Point offset, - PopupAnchor anchor = PopupAnchor.None, - PopupGravity gravity = PopupGravity.None, - PopupPositionerConstraintAdjustment constraintAdjustment = PopupPositionerConstraintAdjustment.All, - Rect? rect = null) - { - ((IPopupHost)this).ConfigurePosition(new PopupPositionRequest(target, placement, offset, anchor, gravity, - constraintAdjustment, rect, null)); - } - void IPopupHost.ConfigurePosition(PopupPositionRequest request) { _popupPositionRequest = request;