diff --git a/ShareX/Forms/ApplicationSettingsForm.cs b/ShareX/Forms/ApplicationSettingsForm.cs index 6ec5b839f..1e32366ff 100644 --- a/ShareX/Forms/ApplicationSettingsForm.cs +++ b/ShareX/Forms/ApplicationSettingsForm.cs @@ -460,6 +460,7 @@ private void btnExport_Click(object sender, EventArgs e) TaskEx.Run(() => { Program.SaveAllSettings(); + ExportImportManager.Export(sfd.FileName); }, () => @@ -490,6 +491,7 @@ private void btnImport_Click(object sender, EventArgs e) TaskEx.Run(() => { ExportImportManager.Import(ofd.FileName); + Program.LoadAllSettings(); }, () => @@ -503,7 +505,7 @@ private void btnImport_Click(object sender, EventArgs e) btnImport.Enabled = true; } - Program.MainForm.UpdateAll(); + Program.MainForm.UpdateControls(); }); } } diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index 1011ef1bc..c24e96e55 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -57,9 +57,6 @@ public MainForm() private void MainForm_HandleCreated(object sender, EventArgs e) { UpdateControls(); - InitHotkeys(); - - IsReady = true; DebugHelper.WriteLine("Startup time: {0} ms", Program.StartTimer.ElapsedMilliseconds); @@ -173,8 +170,10 @@ private void InitializeControls() HandleCreated += MainForm_HandleCreated; } - private void UpdateControls() + public void UpdateControls() { + IsReady = false; + niTray.Visible = Program.Settings.ShowTray; if (Program.Settings.RecentLinksRemember) @@ -192,13 +191,8 @@ private void UpdateControls() isPositionChanged = true; } - // Adjust the menu width to the items tsMain.Width = tsMain.PreferredSize.Width; - - // Calculate the required height to view the whole menu int height = Size.Height + tsMain.PreferredSize.Height - tsMain.Height; - - // Set the minimum size of the form to prevent menu items from hidding MinimumSize = new Size(MinimumSize.Width, height); if (Program.Settings.RememberMainFormSize && !Program.Settings.MainFormSize.IsEmpty) @@ -214,7 +208,6 @@ private void UpdateControls() } else { - // Adjust the size to the minimum if not loaded Size = new Size(Size.Width, height); } @@ -244,18 +237,10 @@ private void UpdateControls() UpdateContextMenu(); UpdateToggleHotkeyButton(); AfterSettingsJobs(); - } - public void UpdateAll() - { - UpdateControls(); + InitHotkeys(); - if (Program.HotkeyManager != null) - { - Program.HotkeyManager.UpdateHotkeys(Program.HotkeysConfig.Hotkeys, true); - } - - UpdateWorkflowsMenu(); + IsReady = true; } private void AfterShownJobs() @@ -1598,11 +1583,23 @@ private void InitHotkeys() }, () => { - Program.HotkeyManager = new HotkeyManager(this, Program.HotkeysConfig.Hotkeys, !Program.NoHotkeys); - Program.HotkeyManager.HotkeyTrigger += HandleHotkeys; + if (Program.HotkeyManager == null) + { + Program.HotkeyManager = new HotkeyManager(this); + Program.HotkeyManager.HotkeyTrigger += HandleHotkeys; + } + + Program.HotkeyManager.UpdateHotkeys(Program.HotkeysConfig.Hotkeys, !Program.NoHotkeys); + DebugHelper.WriteLine("HotkeyManager started"); - Program.WatchFolderManager = new WatchFolderManager(); + if (Program.WatchFolderManager == null) + { + Program.WatchFolderManager = new WatchFolderManager(); + } + + Program.WatchFolderManager.UpdateWatchFolders(); + DebugHelper.WriteLine("WatchFolderManager started"); UpdateWorkflowsMenu(); diff --git a/ShareX/HotkeyManager.cs b/ShareX/HotkeyManager.cs index 69dc81d7b..bcdd45fc8 100644 --- a/ShareX/HotkeyManager.cs +++ b/ShareX/HotkeyManager.cs @@ -46,13 +46,11 @@ public class HotkeyManager private HotkeyForm hotkeyForm; - public HotkeyManager(HotkeyForm form, List hotkeys, bool showFailedHotkeys) + public HotkeyManager(HotkeyForm form) { hotkeyForm = form; hotkeyForm.HotkeyPress += hotkeyForm_HotkeyPress; hotkeyForm.FormClosed += (sender, e) => hotkeyForm.InvokeSafe(() => UnregisterAllHotkeys(false)); - - UpdateHotkeys(hotkeys, showFailedHotkeys); } public void UpdateHotkeys(List hotkeys, bool showFailedHotkeys) @@ -152,11 +150,14 @@ public void UnregisterHotkey(HotkeySettings hotkeySetting, bool removeFromList = public void UnregisterAllHotkeys(bool removeFromList = true, bool temporary = false) { - foreach (HotkeySettings hotkeySetting in Hotkeys.ToArray()) + if (Hotkeys != null) { - if (!temporary || (temporary && hotkeySetting.TaskSettings.Job != HotkeyType.DisableHotkeys)) + foreach (HotkeySettings hotkeySetting in Hotkeys.ToArray()) { - UnregisterHotkey(hotkeySetting, removeFromList); + if (!temporary || (temporary && hotkeySetting.TaskSettings.Job != HotkeyType.DisableHotkeys)) + { + UnregisterHotkey(hotkeySetting, removeFromList); + } } } } diff --git a/ShareX/WatchFolderManager.cs b/ShareX/WatchFolderManager.cs index 10ea64491..cf1499c13 100644 --- a/ShareX/WatchFolderManager.cs +++ b/ShareX/WatchFolderManager.cs @@ -33,8 +33,13 @@ public class WatchFolderManager : IDisposable { public List WatchFolders { get; private set; } - public WatchFolderManager() + public void UpdateWatchFolders() { + if (WatchFolders != null) + { + UnregisterAllWatchFolders(); + } + WatchFolders = new List(); foreach (WatchFolderSettings defaultWatchFolderSetting in Program.DefaultTaskSettings.WatchFolderList) @@ -113,7 +118,7 @@ public void UpdateWatchFolderState(WatchFolderSettings watchFolderSetting) } } - public void Dispose() + public void UnregisterAllWatchFolders() { if (WatchFolders != null) { @@ -126,5 +131,10 @@ public void Dispose() } } } + + public void Dispose() + { + UnregisterAllWatchFolders(); + } } } \ No newline at end of file