From 20ddbf8dd8a87cb5eb055556e6265890c8f09014 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 16:23:59 +0000 Subject: [PATCH 01/14] OSX - add interface for file/url opened api. --- src/Avalonia.Native/avn.idl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Native/avn.idl b/src/Avalonia.Native/avn.idl index 57a0c32067..2693f5f139 100644 --- a/src/Avalonia.Native/avn.idl +++ b/src/Avalonia.Native/avn.idl @@ -403,7 +403,7 @@ enum AvnExtendClientAreaChromeHints [uuid(809c652e-7396-11d2-9771-00a0c9b4d50c)] interface IAvaloniaNativeFactory : IUnknown { - HRESULT Initialize(IAvnGCHandleDeallocatorCallback* deallocator); + HRESULT Initialize(IAvnGCHandleDeallocatorCallback* deallocator, IAvnApplicationEvents* appCb); IAvnMacOptions* GetMacOptions(); HRESULT CreateWindow(IAvnWindowEvents* cb, IAvnGlContext* gl, IAvnWindow** ppv); HRESULT CreatePopup(IAvnWindowEvents* cb, IAvnGlContext* gl, IAvnPopup** ppv); @@ -728,3 +728,9 @@ interface IAvnNativeControlHostTopLevelAttachment : IUnknown void HideWithSize(float width, float height); void ReleaseChild(); } + +[uuid(6575b5af-f27a-4609-866c-f1f014c20f79)] +interface IAvnApplicationEvents : IUnknown +{ + void FilesOpened (IAvnStringArray* urls); +} From 4191e276efa42aea921a41140c7f19a32261ad32 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 16:24:17 +0000 Subject: [PATCH 02/14] osx - native side implementation of apis. --- native/Avalonia.Native/src/OSX/app.mm | 21 ++++++++++++++++++--- native/Avalonia.Native/src/OSX/common.h | 2 +- native/Avalonia.Native/src/OSX/main.mm | 4 ++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/app.mm b/native/Avalonia.Native/src/OSX/app.mm index 814b91cb62..b87810dde1 100644 --- a/native/Avalonia.Native/src/OSX/app.mm +++ b/native/Avalonia.Native/src/OSX/app.mm @@ -1,10 +1,20 @@ #include "common.h" +#include "AvnString.h" @interface AvnAppDelegate : NSObject +-(AvnAppDelegate* _Nonnull) initWithEvents: (IAvnApplicationEvents* _Nonnull) events; @end NSApplicationActivationPolicy AvnDesiredActivationPolicy = NSApplicationActivationPolicyRegular; @implementation AvnAppDelegate +ComPtr _events; + +- (AvnAppDelegate *)initWithEvents:(IAvnApplicationEvents *)events +{ + _events = events; + return self; +} + - (void)applicationWillFinishLaunching:(NSNotification *)notification { if([[NSApplication sharedApplication] activationPolicy] != AvnDesiredActivationPolicy) @@ -27,11 +37,16 @@ NSApplicationActivationPolicy AvnDesiredActivationPolicy = NSApplicationActivati [[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateIgnoringOtherApps]; } +- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames +{ + auto array = CreateAvnStringArray(filenames); + + _events->FilesOpened(array); +} @end @interface AvnApplication : NSApplication - @end @implementation AvnApplication @@ -63,9 +78,9 @@ NSApplicationActivationPolicy AvnDesiredActivationPolicy = NSApplicationActivati @end -extern void InitializeAvnApp() +extern void InitializeAvnApp(IAvnApplicationEvents* events) { NSApplication* app = [AvnApplication sharedApplication]; - id delegate = [AvnAppDelegate new]; + id delegate = [[AvnAppDelegate alloc] initWithEvents:events]; [app setDelegate:delegate]; } diff --git a/native/Avalonia.Native/src/OSX/common.h b/native/Avalonia.Native/src/OSX/common.h index 05b2d762ae..0f7215f37c 100644 --- a/native/Avalonia.Native/src/OSX/common.h +++ b/native/Avalonia.Native/src/OSX/common.h @@ -31,7 +31,7 @@ extern NSMenuItem* GetAppMenuItem (); extern void SetAutoGenerateDefaultAppMenuItems (bool enabled); extern bool GetAutoGenerateDefaultAppMenuItems (); -extern void InitializeAvnApp(); +extern void InitializeAvnApp(IAvnApplicationEvents* events); extern NSApplicationActivationPolicy AvnDesiredActivationPolicy; extern NSPoint ToNSPoint (AvnPoint p); extern AvnPoint ToAvnPoint (NSPoint p); diff --git a/native/Avalonia.Native/src/OSX/main.mm b/native/Avalonia.Native/src/OSX/main.mm index 17746e1d1d..11742e3b5c 100644 --- a/native/Avalonia.Native/src/OSX/main.mm +++ b/native/Avalonia.Native/src/OSX/main.mm @@ -163,13 +163,13 @@ class AvaloniaNative : public ComSingleObject Date: Mon, 8 Mar 2021 21:37:05 +0000 Subject: [PATCH 03/14] add implementation of url event for application class. --- src/Avalonia.Controls/Application.cs | 14 +++++++++++++- .../Platform/IApplicationPlatform.cs | 9 +++++++++ src/Avalonia.Controls/UrlOpenedEventArgs.cs | 14 ++++++++++++++ .../AvaloniaNativeApplicationPlatform.cs | 16 ++++++++++++++++ src/Avalonia.Native/AvaloniaNativePlatform.cs | 8 +++++--- 5 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/Avalonia.Controls/Platform/IApplicationPlatform.cs create mode 100644 src/Avalonia.Controls/UrlOpenedEventArgs.cs create mode 100644 src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs 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())) From 9ded3bc2d32a5bac0b5435ec4643c876d8753eca Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 21:47:31 +0000 Subject: [PATCH 04/14] make event name plural --- src/Avalonia.Controls/Application.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Application.cs b/src/Avalonia.Controls/Application.cs index 4b3fb70d72..6c35c2749e 100644 --- a/src/Avalonia.Controls/Application.cs +++ b/src/Avalonia.Controls/Application.cs @@ -55,7 +55,7 @@ namespace Avalonia /// public event EventHandler ResourcesChanged; - public event EventHandler UrlOpened; + public event EventHandler UrlsOpened; /// /// Creates an instance of the class. @@ -259,7 +259,7 @@ namespace Avalonia private void OnFilesOpened(string[] urls) { - UrlOpened?.Invoke(this, new UrlOpenedEventArgs (urls)); + UrlsOpened?.Invoke(this, new UrlOpenedEventArgs (urls)); } private void NotifyResourcesChanged(ResourcesChangedEventArgs e) From df8f30793c6f7f490462a12fe478bf58436a6cf3 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 21:47:45 +0000 Subject: [PATCH 05/14] implement both files and uris opened on osx. --- native/Avalonia.Native/src/OSX/app.mm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/native/Avalonia.Native/src/OSX/app.mm b/native/Avalonia.Native/src/OSX/app.mm index b87810dde1..460c24ea3a 100644 --- a/native/Avalonia.Native/src/OSX/app.mm +++ b/native/Avalonia.Native/src/OSX/app.mm @@ -43,6 +43,13 @@ ComPtr _events; _events->FilesOpened(array); } + +- (void)application:(NSApplication *)application openURLs:(NSArray *)urls +{ + auto array = CreateAvnStringArray(urls); + + _events->FilesOpened(array); +} @end @interface AvnApplication : NSApplication From 8e6502f222c3eb8305a28277c8d635fe6fcdfc34 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 21:56:02 +0000 Subject: [PATCH 06/14] much simpler interface with application class and platform events. --- src/Avalonia.Controls/Application.cs | 13 ++++--------- .../Platform/IApplicationPlatform.cs | 9 --------- .../Platform/IApplicationPlatformEvents.cs | 7 +++++++ .../AvaloniaNativeApplicationPlatform.cs | 6 ++---- src/Avalonia.Native/AvaloniaNativePlatform.cs | 1 - 5 files changed, 13 insertions(+), 23 deletions(-) delete mode 100644 src/Avalonia.Controls/Platform/IApplicationPlatform.cs create mode 100644 src/Avalonia.Controls/Platform/IApplicationPlatformEvents.cs diff --git a/src/Avalonia.Controls/Application.cs b/src/Avalonia.Controls/Application.cs index 6c35c2749e..54c576bb76 100644 --- a/src/Avalonia.Controls/Application.cs +++ b/src/Avalonia.Controls/Application.cs @@ -30,7 +30,7 @@ namespace Avalonia /// method. /// - Tracks the lifetime of the application. /// - public class Application : AvaloniaObject, IDataContextProvider, IGlobalDataTemplates, IGlobalStyles, IResourceHost + public class Application : AvaloniaObject, IDataContextProvider, IGlobalDataTemplates, IGlobalStyles, IResourceHost, IApplicationPlatformEvents { /// /// The application-global data templates. @@ -249,15 +249,9 @@ namespace Avalonia public virtual void OnFrameworkInitializationCompleted() { - var applicationPlatform = AvaloniaLocator.Current.GetService(); - - if (applicationPlatform != null) - { - applicationPlatform.FilesOpened = OnFilesOpened; - } } - - private void OnFilesOpened(string[] urls) + + void IApplicationPlatformEvents.RaiseUrlsOpened(string[] urls) { UrlsOpened?.Invoke(this, new UrlOpenedEventArgs (urls)); } @@ -300,5 +294,6 @@ namespace Avalonia get => _name; set => SetAndRaise(NameProperty, ref _name, value); } + } } diff --git a/src/Avalonia.Controls/Platform/IApplicationPlatform.cs b/src/Avalonia.Controls/Platform/IApplicationPlatform.cs deleted file mode 100644 index ec193ce0d6..0000000000 --- a/src/Avalonia.Controls/Platform/IApplicationPlatform.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Avalonia.Platform -{ - public interface IApplicationPlatform - { - Action FilesOpened { get; set; } - } -} diff --git a/src/Avalonia.Controls/Platform/IApplicationPlatformEvents.cs b/src/Avalonia.Controls/Platform/IApplicationPlatformEvents.cs new file mode 100644 index 0000000000..a8d3a3b3ac --- /dev/null +++ b/src/Avalonia.Controls/Platform/IApplicationPlatformEvents.cs @@ -0,0 +1,7 @@ +namespace Avalonia.Platform +{ + public interface IApplicationPlatformEvents + { + void RaiseUrlsOpened(string[] urls); + } +} diff --git a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs index ff7c4fdd6e..9579aa93b1 100644 --- a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs @@ -4,13 +4,11 @@ using Avalonia.Platform; namespace Avalonia.Native { - internal class AvaloniaNativeApplicationPlatform : CallbackBase, IApplicationPlatform, IAvnApplicationEvents + internal class AvaloniaNativeApplicationPlatform : CallbackBase, IAvnApplicationEvents { - public Action FilesOpened { get; set; } - void IAvnApplicationEvents.FilesOpened(IAvnStringArray urls) { - FilesOpened?.Invoke(urls.ToStringArray()); + ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(urls.ToStringArray()); } } } diff --git a/src/Avalonia.Native/AvaloniaNativePlatform.cs b/src/Avalonia.Native/AvaloniaNativePlatform.cs index f9806f02a4..82a845ffc1 100644 --- a/src/Avalonia.Native/AvaloniaNativePlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativePlatform.cs @@ -98,7 +98,6 @@ namespace Avalonia.Native } AvaloniaLocator.CurrentMutable - .Bind().ToConstant(applicationPlatform) .Bind() .ToConstant(new PlatformThreadingInterface(_factory.CreatePlatformThreadingInterface())) .Bind().ToConstant(new CursorFactory(_factory.CreateCursorFactory())) From 890185ea02032478b8663843971645633b47f2eb Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 21:58:19 +0000 Subject: [PATCH 07/14] ClassicDesktopApplicationLifetime raises urlsopened api. --- .../ClassicDesktopStyleApplicationLifetime.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs index e2c8e7e8e2..a9cfbb2a6b 100644 --- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs +++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs @@ -5,6 +5,7 @@ using System.Threading; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Interactivity; +using Avalonia.Platform; using Avalonia.Threading; namespace Avalonia.Controls.ApplicationLifetimes @@ -102,6 +103,7 @@ namespace Avalonia.Controls.ApplicationLifetimes public int Start(string[] args) { Startup?.Invoke(this, new ControlledApplicationLifetimeStartupEventArgs(args)); + ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(args); _cts = new CancellationTokenSource(); MainWindow?.Show(); Dispatcher.UIThread.MainLoop(_cts.Token); From e2da5b190cc4239512a851621fea9d85ff87a193 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 22:03:12 +0000 Subject: [PATCH 08/14] fix nsurl conversion to string[] --- native/Avalonia.Native/src/OSX/AvnString.h | 1 + native/Avalonia.Native/src/OSX/AvnString.mm | 15 +++++++++++++++ native/Avalonia.Native/src/OSX/clipboard.mm | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/native/Avalonia.Native/src/OSX/AvnString.h b/native/Avalonia.Native/src/OSX/AvnString.h index 5d299374e5..3ce83d370a 100644 --- a/native/Avalonia.Native/src/OSX/AvnString.h +++ b/native/Avalonia.Native/src/OSX/AvnString.h @@ -11,6 +11,7 @@ extern IAvnString* CreateAvnString(NSString* string); extern IAvnStringArray* CreateAvnStringArray(NSArray* array); +extern IAvnStringArray* CreateAvnStringArray(NSArray* array); extern IAvnStringArray* CreateAvnStringArray(NSString* string); extern IAvnString* CreateByteArray(void* data, int len); #endif /* AvnString_h */ diff --git a/native/Avalonia.Native/src/OSX/AvnString.mm b/native/Avalonia.Native/src/OSX/AvnString.mm index 00b748ef63..001cf151d8 100644 --- a/native/Avalonia.Native/src/OSX/AvnString.mm +++ b/native/Avalonia.Native/src/OSX/AvnString.mm @@ -85,6 +85,16 @@ public: } } + AvnStringArrayImpl(NSArray* array) + { + for(int c = 0; c < [array count]; c++) + { + ComPtr s; + *s.getPPV() = new AvnStringImpl([array objectAtIndex:c].absoluteString); + _list.push_back(s); + } + } + AvnStringArrayImpl(NSString* string) { ComPtr s; @@ -117,6 +127,11 @@ IAvnStringArray* CreateAvnStringArray(NSArray * array) return new AvnStringArrayImpl(array); } +IAvnStringArray* CreateAvnStringArray(NSArray * array) +{ + return new AvnStringArrayImpl(array); +} + IAvnStringArray* CreateAvnStringArray(NSString* string) { return new AvnStringArrayImpl(string); diff --git a/native/Avalonia.Native/src/OSX/clipboard.mm b/native/Avalonia.Native/src/OSX/clipboard.mm index 303f727317..f148374759 100644 --- a/native/Avalonia.Native/src/OSX/clipboard.mm +++ b/native/Avalonia.Native/src/OSX/clipboard.mm @@ -56,7 +56,7 @@ public: return S_OK; } - NSArray* arr = (NSArray*)data; + NSArray* arr = (NSArray*)data; for(int c = 0; c < [arr count]; c++) if(![[arr objectAtIndex:c] isKindOfClass:[NSString class]]) From 60f9408b4590332a3fc76a5fbd6074591b429680 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 22:05:07 +0000 Subject: [PATCH 09/14] only raise urls opened event from classic lifetime if there are arguments. --- .../ClassicDesktopStyleApplicationLifetime.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs index a9cfbb2a6b..f8606fcd6f 100644 --- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs +++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs @@ -103,7 +103,12 @@ namespace Avalonia.Controls.ApplicationLifetimes public int Start(string[] args) { Startup?.Invoke(this, new ControlledApplicationLifetimeStartupEventArgs(args)); - ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(args); + + if (args.Length > 0) + { + ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(args); + } + _cts = new CancellationTokenSource(); MainWindow?.Show(); Dispatcher.UIThread.MainLoop(_cts.Token); From c204f4f22315558578829b6e8f5ef46fa3b30404 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 8 Mar 2021 22:50:40 +0000 Subject: [PATCH 10/14] try and parse as a uri before raising event. --- .../ClassicDesktopStyleApplicationLifetime.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs index f8606fcd6f..38220c250a 100644 --- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs +++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs @@ -104,7 +104,7 @@ namespace Avalonia.Controls.ApplicationLifetimes { Startup?.Invoke(this, new ControlledApplicationLifetimeStartupEventArgs(args)); - if (args.Length > 0) + if (args.Length > 0 && Uri.TryCreate(args[0], UriKind.Absolute, out _)) { ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(args); } From 6ee69afd0db8ff867a32390cbc20485dc0e249fd Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 9 Mar 2021 09:51:43 +0000 Subject: [PATCH 11/14] remove uri check. --- .../ClassicDesktopStyleApplicationLifetime.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs index 38220c250a..86f0491dc5 100644 --- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs +++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs @@ -104,7 +104,7 @@ namespace Avalonia.Controls.ApplicationLifetimes { Startup?.Invoke(this, new ControlledApplicationLifetimeStartupEventArgs(args)); - if (args.Length > 0 && Uri.TryCreate(args[0], UriKind.Absolute, out _)) + if (args.Length > 0)) { ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(args); } From 9d4ab09dd7ae2f0eedf4df9fd82242948f55e395 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 9 Mar 2021 10:08:35 +0000 Subject: [PATCH 12/14] fix typo --- .../ClassicDesktopStyleApplicationLifetime.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs index 86f0491dc5..f8606fcd6f 100644 --- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs +++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs @@ -104,7 +104,7 @@ namespace Avalonia.Controls.ApplicationLifetimes { Startup?.Invoke(this, new ControlledApplicationLifetimeStartupEventArgs(args)); - if (args.Length > 0)) + if (args.Length > 0) { ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(args); } From 344c876c44ae23cc97217284ead37a198dc27486 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 9 Mar 2021 13:12:29 +0000 Subject: [PATCH 13/14] add an options class for ClassicDesktopStyleApplicationLifeCycle. --- .../ClassicDesktopStyleApplicationLifetime.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs index f8606fcd6f..07a0510f13 100644 --- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs +++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs @@ -104,7 +104,9 @@ namespace Avalonia.Controls.ApplicationLifetimes { Startup?.Invoke(this, new ControlledApplicationLifetimeStartupEventArgs(args)); - if (args.Length > 0) + var options = AvaloniaLocator.Current.GetService(); + + if(options != null && options.ProcessUrlActivationCommandLine && args.Length > 0) { ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(args); } @@ -122,6 +124,13 @@ namespace Avalonia.Controls.ApplicationLifetimes _activeLifetime = null; } } + + public class ClassicDesktopStyleApplicationLifetimeOptions + { + public bool ProcessUrlActivationCommandLine { get; set; } + + public bool IsSingleInstance { get; set; } + } } namespace Avalonia From c321127a563140c1114cefc9a518034f909eb5ce Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 10 Mar 2021 11:56:45 +0000 Subject: [PATCH 14/14] remove IsSingleInstance --- .../ClassicDesktopStyleApplicationLifetime.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs index 07a0510f13..aa4342f075 100644 --- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs +++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs @@ -128,8 +128,6 @@ namespace Avalonia.Controls.ApplicationLifetimes public class ClassicDesktopStyleApplicationLifetimeOptions { public bool ProcessUrlActivationCommandLine { get; set; } - - public bool IsSingleInstance { get; set; } } }