diff --git a/NAPS2.Lib.Mac/EtoForms/Mac/MacEtoPlatform.cs b/NAPS2.Lib.Mac/EtoForms/Mac/MacEtoPlatform.cs index c00432518..b4dc043cd 100644 --- a/NAPS2.Lib.Mac/EtoForms/Mac/MacEtoPlatform.cs +++ b/NAPS2.Lib.Mac/EtoForms/Mac/MacEtoPlatform.cs @@ -26,6 +26,18 @@ public class MacEtoPlatform : EtoPlatform return new Application(Platforms.macOS); } + public override void Invoke(Application application, Action action) + { + // TODO: Eto PR to always use InvokeOnMainThread, don't execute the action directly + // even if we're already on the main thread. + NSApplication.SharedApplication.InvokeOnMainThread(action); + } + + public override void AsyncInvoke(Application application, Action action) + { + NSApplication.SharedApplication.BeginInvokeOnMainThread(action); + } + public override IListView CreateListView(ListViewBehavior behavior) => new MacListView(behavior); diff --git a/NAPS2.Lib/EtoForms/EtoInvoker.cs b/NAPS2.Lib/EtoForms/EtoInvoker.cs index af21f7745..2d3fd9eaa 100644 --- a/NAPS2.Lib/EtoForms/EtoInvoker.cs +++ b/NAPS2.Lib/EtoForms/EtoInvoker.cs @@ -13,18 +13,18 @@ public class EtoInvoker : IInvoker public void Invoke(Action action) { - _application.Invoke(action); + EtoPlatform.Current.Invoke(_application, action); } public void InvokeDispatch(Action action) { - _application.AsyncInvoke(action); + EtoPlatform.Current.AsyncInvoke(_application, action); } public T InvokeGet(Func func) { T value = default!; - _application.Invoke(() => value = func()); + EtoPlatform.Current.Invoke(_application, () => value = func()); return value; } } \ No newline at end of file diff --git a/NAPS2.Lib/EtoForms/EtoPlatform.cs b/NAPS2.Lib/EtoForms/EtoPlatform.cs index 91b724feb..b232536a3 100644 --- a/NAPS2.Lib/EtoForms/EtoPlatform.cs +++ b/NAPS2.Lib/EtoForms/EtoPlatform.cs @@ -37,6 +37,16 @@ public abstract class EtoPlatform { } + public virtual void Invoke(Application application, Action action) + { + application.Invoke(action); + } + + public virtual void AsyncInvoke(Application application, Action action) + { + application.AsyncInvoke(action); + } + public virtual void SetContainerSize(Window window, Control container, Size size, int padding) { }