diff --git a/src/Avalonia.Controls/Application.cs b/src/Avalonia.Controls/Application.cs
index 3bf72460df..4b3fb70d72 100644
--- a/src/Avalonia.Controls/Application.cs
+++ b/src/Avalonia.Controls/Application.cs
@@ -55,6 +55,8 @@ namespace Avalonia
///
public event EventHandler ResourcesChanged;
+ public event EventHandler UrlOpened;
+
///
/// Creates an instance of the class.
///
@@ -247,7 +249,17 @@ namespace Avalonia
public virtual void OnFrameworkInitializationCompleted()
{
-
+ var applicationPlatform = AvaloniaLocator.Current.GetService();
+
+ if (applicationPlatform != null)
+ {
+ applicationPlatform.FilesOpened = OnFilesOpened;
+ }
+ }
+
+ private void OnFilesOpened(string[] urls)
+ {
+ UrlOpened?.Invoke(this, new UrlOpenedEventArgs (urls));
}
private void NotifyResourcesChanged(ResourcesChangedEventArgs e)
diff --git a/src/Avalonia.Controls/Platform/IApplicationPlatform.cs b/src/Avalonia.Controls/Platform/IApplicationPlatform.cs
new file mode 100644
index 0000000000..ec193ce0d6
--- /dev/null
+++ b/src/Avalonia.Controls/Platform/IApplicationPlatform.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace Avalonia.Platform
+{
+ public interface IApplicationPlatform
+ {
+ Action FilesOpened { get; set; }
+ }
+}
diff --git a/src/Avalonia.Controls/UrlOpenedEventArgs.cs b/src/Avalonia.Controls/UrlOpenedEventArgs.cs
new file mode 100644
index 0000000000..bc29d7ffa2
--- /dev/null
+++ b/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; }
+ }
+}
diff --git a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs
new file mode 100644
index 0000000000..ff7c4fdd6e
--- /dev/null
+++ b/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 FilesOpened { get; set; }
+
+ void IAvnApplicationEvents.FilesOpened(IAvnStringArray urls)
+ {
+ FilesOpened?.Invoke(urls.ToStringArray());
+ }
+ }
+}
diff --git a/src/Avalonia.Native/AvaloniaNativePlatform.cs b/src/Avalonia.Native/AvaloniaNativePlatform.cs
index 35d21a75d3..f9806f02a4 100644
--- a/src/Avalonia.Native/AvaloniaNativePlatform.cs
+++ b/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();
@@ -97,6 +98,7 @@ namespace Avalonia.Native
}
AvaloniaLocator.CurrentMutable
+ .Bind().ToConstant(applicationPlatform)
.Bind()
.ToConstant(new PlatformThreadingInterface(_factory.CreatePlatformThreadingInterface()))
.Bind().ToConstant(new CursorFactory(_factory.CreateCursorFactory()))