|
|
@@ -3,6 +3,7 @@
|
|
|
|
|
|
using System;
|
|
|
using System.Reactive.Linq;
|
|
|
+using Avalonia.Controls.Notifications;
|
|
|
using Avalonia.Controls.Primitives;
|
|
|
using Avalonia.Input;
|
|
|
using Avalonia.Input.Raw;
|
|
|
@@ -46,12 +47,26 @@ namespace Avalonia.Controls
|
|
|
public static readonly StyledProperty<IInputElement> PointerOverElementProperty =
|
|
|
AvaloniaProperty.Register<TopLevel, IInputElement>(nameof(IInputRoot.PointerOverElement));
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Defines the <see cref="LocalNotificationManager"/> property.
|
|
|
+ /// </summary>
|
|
|
+ public static readonly DirectProperty<TopLevel, INotificationManager> LocalNotificationManagerProperty =
|
|
|
+ AvaloniaProperty.RegisterDirect<TopLevel, INotificationManager>(nameof(LocalNotificationManager), o => o.LocalNotificationManager);
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Defines the <see cref="SystemNotificationManager"/> property.
|
|
|
+ /// </summary>
|
|
|
+ public static readonly DirectProperty<TopLevel, INotificationManager> SystemNotificationManagerProperty =
|
|
|
+ AvaloniaProperty.RegisterDirect<TopLevel, INotificationManager>(nameof(SystemNotificationManager), o => o.SystemNotificationManager);
|
|
|
+
|
|
|
private readonly IInputManager _inputManager;
|
|
|
private readonly IAccessKeyHandler _accessKeyHandler;
|
|
|
private readonly IKeyboardNavigationHandler _keyboardNavigationHandler;
|
|
|
private readonly IApplicationLifecycle _applicationLifecycle;
|
|
|
private readonly IPlatformRenderInterface _renderInterface;
|
|
|
private Size _clientSize;
|
|
|
+ private INotificationManager _localNotificationManager;
|
|
|
+ private INotificationManager _systemNotificationManager;
|
|
|
private ILayoutManager _layoutManager;
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -87,6 +102,9 @@ namespace Avalonia.Controls
|
|
|
}
|
|
|
|
|
|
PlatformImpl = impl;
|
|
|
+
|
|
|
+ _localNotificationManager = new NotificationManager();
|
|
|
+
|
|
|
dependencyResolver = dependencyResolver ?? AvaloniaLocator.Current;
|
|
|
var styler = TryGetService<IStyler>(dependencyResolver);
|
|
|
|
|
|
@@ -96,6 +114,13 @@ namespace Avalonia.Controls
|
|
|
_applicationLifecycle = TryGetService<IApplicationLifecycle>(dependencyResolver);
|
|
|
_renderInterface = TryGetService<IPlatformRenderInterface>(dependencyResolver);
|
|
|
|
|
|
+ _systemNotificationManager = TryGetService<INotificationManager>(dependencyResolver);
|
|
|
+
|
|
|
+ if(_systemNotificationManager == null)
|
|
|
+ {
|
|
|
+ _systemNotificationManager = _localNotificationManager;
|
|
|
+ }
|
|
|
+
|
|
|
Renderer = impl.CreateRenderer(this);
|
|
|
|
|
|
if (Renderer != null)
|
|
|
@@ -155,6 +180,25 @@ namespace Avalonia.Controls
|
|
|
protected set { SetAndRaise(ClientSizeProperty, ref _clientSize, value); }
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Gets or sets the Local (in window managed) notification manager.
|
|
|
+ /// </summary>
|
|
|
+ public INotificationManager LocalNotificationManager
|
|
|
+ {
|
|
|
+ get => _localNotificationManager;
|
|
|
+ protected set => SetAndRaise(LocalNotificationManagerProperty, ref _localNotificationManager, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Gets or sets the System (native os) notification manager. If the system doesnt natively support notifications then this property
|
|
|
+ /// will match the <see cref="LocalNotificationManager"/>.
|
|
|
+ /// </summary>
|
|
|
+ public INotificationManager SystemNotificationManager
|
|
|
+ {
|
|
|
+ get => _systemNotificationManager;
|
|
|
+ protected set => SetAndRaise(SystemNotificationManagerProperty, ref _systemNotificationManager, value);
|
|
|
+ }
|
|
|
+
|
|
|
public ILayoutManager LayoutManager
|
|
|
{
|
|
|
get
|