diff --git a/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs b/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs index 5366461..ac2f6e3 100644 --- a/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs +++ b/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs @@ -42,7 +42,7 @@ public class ClipboardPlus : IAsyncPlugin, IAsyncReloadable, IContextMenu, IPlug // Clipboard monitor instance // Warning: Do not init the instance in InitAsync function! This will cause issues. - private IClipboardMonitor? ClipboardMonitor; + private IClipboardMonitor? ClipboardMonitor = null; // Observable data formats private readonly ObservableDataFormats ObservableDataFormats = new() @@ -54,7 +54,7 @@ public class ClipboardPlus : IAsyncPlugin, IAsyncReloadable, IContextMenu, IPlug }; // Windows clipboard helper - private WindowsClipboardHelper WindowsClipboardHelper = new(); + private WindowsClipboardHelper WindowsClipboardHelper = null!; // Records list & Score // Latest records are at the beginning of the list. @@ -103,30 +103,6 @@ public class ClipboardPlus : IAsyncPlugin, IAsyncReloadable, IContextMenu, IPlug #endregion - #region Constructor - - public ClipboardPlus() - { - if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 10240)) - { - ClipboardMonitor = new ClipboardMonitorWin() - { - ObserveLastEntry = false, - ObservableFormats = ObservableDataFormats - }; - } - else - { - ClipboardMonitor = new ClipboardMonitorW() - { - ObserveLastEntry = false, - ObservableFormats = ObservableDataFormats - }; - } - } - - #endregion - #region IAsyncPlugin Interface public Task> QueryAsync(Query query, CancellationToken token) @@ -425,8 +401,6 @@ public async Task> Query(Query query) public async Task InitAsync(PluginInitContext context) { Context = context; - ClipboardMonitor!.SetContext(context); - WindowsClipboardHelper.SetClipboardPlus(this); // init path helper PathHelper.Init(context, GetType().Assembly.GetName().Name ?? "Flow.Launcher.Plugin.ClipboardPlus"); @@ -441,6 +415,10 @@ public async Task InitAsync(PluginInitContext context) // init score helper ScoreHelper = new ScoreHelper(ScoreInterval); + // init windows clipboard helper + WindowsClipboardHelper = new(); + WindowsClipboardHelper.SetClipboardPlus(this); + // setup use Windows clipboard history only UseWindowsClipboardHistoryOnly = Settings.UseWindowsClipboardHistoryOnly && CheckUseWindowsClipboardHistoryOnly(); Context.LogInfo(ClassName, $"Use Windows clipboard history only: {UseWindowsClipboardHistoryOnly}"); @@ -453,9 +431,12 @@ public async Task InitAsync(PluginInitContext context) Context.LogDebug(ClassName, "Init database successfully"); // dispose clipboard monitor - ClipboardMonitor.ClipboardChanged -= ClipboardMonitor_OnClipboardChanged; - ClipboardMonitor.Dispose(); - ClipboardMonitor = null; + if (ClipboardMonitor != null) + { + ClipboardMonitor.ClipboardChanged -= ClipboardMonitor_OnClipboardChanged; + ClipboardMonitor.Dispose(); + ClipboardMonitor = null; + } // init Windows clipboard helper & records from Windows clipboard history EnableWindowsClipboardHelper(true); @@ -473,6 +454,23 @@ public async Task InitAsync(PluginInitContext context) Context.LogDebug(ClassName, $"Init {RecordsList.Count} records successfully"); // init & start clipboard monitor + if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 10240)) + { + ClipboardMonitor = new ClipboardMonitorWin() + { + ObserveLastEntry = false, + ObservableFormats = ObservableDataFormats + }; + } + else + { + ClipboardMonitor = new ClipboardMonitorW() + { + ObserveLastEntry = false, + ObservableFormats = ObservableDataFormats + }; + } + ClipboardMonitor.SetContext(context); ClipboardMonitor.ClipboardChanged += ClipboardMonitor_OnClipboardChanged; ClipboardMonitor.StartMonitoring(); if (ClipboardMonitor.GetType() == typeof(ClipboardMonitorWin))