diff --git a/native/Avalonia.Native/src/OSX/app.mm b/native/Avalonia.Native/src/OSX/app.mm index 7630de1d0b..d3d3d938e9 100644 --- a/native/Avalonia.Native/src/OSX/app.mm +++ b/native/Avalonia.Native/src/OSX/app.mm @@ -70,7 +70,7 @@ ComPtr _events; { auto array = CreateAvnStringArray(urls); - _events->FilesOpened(array); + _events->UrlsOpened(array); } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender diff --git a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs index 3365da7d36..212088d4cd 100644 --- a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs @@ -13,12 +13,21 @@ namespace Avalonia.Native void IAvnApplicationEvents.FilesOpened(IAvnStringArray urls) { ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(urls.ToStringArray()); + } + + void IAvnApplicationEvents.UrlsOpened(IAvnStringArray urls) + { + // Raise the urls opened event to be compatible with legacy behavior. + ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(urls.ToStringArray()); if (Application.Current?.ApplicationLifetime is MacOSClassicDesktopStyleApplicationLifetime lifetime) { foreach (var url in urls.ToStringArray()) { - lifetime.RaiseUrl(new Uri(url)); + if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out var uri)) + { + lifetime.RaiseUrl(uri); + } } } } diff --git a/src/Avalonia.Native/avn.idl b/src/Avalonia.Native/avn.idl index 7791426c0b..27da2fc894 100644 --- a/src/Avalonia.Native/avn.idl +++ b/src/Avalonia.Native/avn.idl @@ -1085,7 +1085,8 @@ interface IAvnNativeControlHostTopLevelAttachment : IUnknown [uuid(6575b5af-f27a-4609-866c-f1f014c20f79)] interface IAvnApplicationEvents : IUnknown { - void FilesOpened (IAvnStringArray* urls); + void FilesOpened (IAvnStringArray* args); + void UrlsOpened (IAvnStringArray* urls); bool TryShutdown(); void OnReopen (); void OnHide ();