Browse Source

add implementation of url event for application class.

pull/5639/head
Dan Walmsley 5 years ago
parent
commit
cf88222031
  1. 14
      src/Avalonia.Controls/Application.cs
  2. 9
      src/Avalonia.Controls/Platform/IApplicationPlatform.cs
  3. 14
      src/Avalonia.Controls/UrlOpenedEventArgs.cs
  4. 16
      src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs
  5. 8
      src/Avalonia.Native/AvaloniaNativePlatform.cs

14
src/Avalonia.Controls/Application.cs

@ -55,6 +55,8 @@ namespace Avalonia
/// <inheritdoc/>
public event EventHandler<ResourcesChangedEventArgs> ResourcesChanged;
public event EventHandler<UrlOpenedEventArgs> UrlOpened;
/// <summary>
/// Creates an instance of the <see cref="Application"/> class.
/// </summary>
@ -247,7 +249,17 @@ namespace Avalonia
public virtual void OnFrameworkInitializationCompleted()
{
var applicationPlatform = AvaloniaLocator.Current.GetService<IApplicationPlatform>();
if (applicationPlatform != null)
{
applicationPlatform.FilesOpened = OnFilesOpened;
}
}
private void OnFilesOpened(string[] urls)
{
UrlOpened?.Invoke(this, new UrlOpenedEventArgs (urls));
}
private void NotifyResourcesChanged(ResourcesChangedEventArgs e)

9
src/Avalonia.Controls/Platform/IApplicationPlatform.cs

@ -0,0 +1,9 @@
using System;
namespace Avalonia.Platform
{
public interface IApplicationPlatform
{
Action<string[]> FilesOpened { get; set; }
}
}

14
src/Avalonia.Controls/UrlOpenedEventArgs.cs

@ -0,0 +1,14 @@
using System;
namespace Avalonia
{
public class UrlOpenedEventArgs : EventArgs
{
public UrlOpenedEventArgs(string[] urls)
{
Urls = urls;
}
public string[] Urls { get; }
}
}

16
src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs

@ -0,0 +1,16 @@
using System;
using Avalonia.Native.Interop;
using Avalonia.Platform;
namespace Avalonia.Native
{
internal class AvaloniaNativeApplicationPlatform : CallbackBase, IApplicationPlatform, IAvnApplicationEvents
{
public Action<string[]> FilesOpened { get; set; }
void IAvnApplicationEvents.FilesOpened(IAvnStringArray urls)
{
FilesOpened?.Invoke(urls.ToStringArray());
}
}
}

8
src/Avalonia.Native/AvaloniaNativePlatform.cs

@ -1,6 +1,5 @@
using System;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using Avalonia.Controls.Platform;
using Avalonia.Input;
using Avalonia.Input.Platform;
@ -9,7 +8,6 @@ using Avalonia.Native.Interop;
using Avalonia.OpenGL;
using Avalonia.Platform;
using Avalonia.Rendering;
using Avalonia.Platform.Interop;
namespace Avalonia.Native
{
@ -86,7 +84,10 @@ namespace Avalonia.Native
void DoInitialize(AvaloniaNativePlatformOptions options)
{
_options = options;
_factory.Initialize(new GCHandleDeallocator());
var applicationPlatform = new AvaloniaNativeApplicationPlatform();
_factory.Initialize(new GCHandleDeallocator(), applicationPlatform);
if (_factory.MacOptions != null)
{
var macOpts = AvaloniaLocator.Current.GetService<MacOSPlatformOptions>();
@ -97,6 +98,7 @@ namespace Avalonia.Native
}
AvaloniaLocator.CurrentMutable
.Bind<IApplicationPlatform>().ToConstant(applicationPlatform)
.Bind<IPlatformThreadingInterface>()
.ToConstant(new PlatformThreadingInterface(_factory.CreatePlatformThreadingInterface()))
.Bind<ICursorFactory>().ToConstant(new CursorFactory(_factory.CreateCursorFactory()))

Loading…
Cancel
Save