diff --git a/ShareX/Controls/HotkeySelectionControl.cs b/ShareX/Controls/HotkeySelectionControl.cs index 928c3d06c..57112763e 100644 --- a/ShareX/Controls/HotkeySelectionControl.cs +++ b/ShareX/Controls/HotkeySelectionControl.cs @@ -91,7 +91,7 @@ private void UpdateHotkeyText() btnHotkey.Text = Setting.HotkeyInfo.ToString(); } - private void UpdateHotkeyStatus() + public void UpdateHotkeyStatus() { switch (Setting.HotkeyInfo.Status) { diff --git a/ShareX/Forms/HotkeySettingsForm.cs b/ShareX/Forms/HotkeySettingsForm.cs index 0ff14cf0d..00a69a16c 100644 --- a/ShareX/Forms/HotkeySettingsForm.cs +++ b/ShareX/Forms/HotkeySettingsForm.cs @@ -51,6 +51,11 @@ public HotkeySettingsForm() private void HotkeySettingsForm_FormClosed(object sender, FormClosedEventArgs e) { Program.HotkeyManager.IgnoreHotkeys = false; + + if (manager != null) + { + manager.HotkeysToggledTrigger -= HandleHotkeysToggle; + } } public void PrepareHotkeys(HotkeyManager hotkeyManager) @@ -58,6 +63,8 @@ public void PrepareHotkeys(HotkeyManager hotkeyManager) if (manager == null) { manager = hotkeyManager; + manager.HotkeysToggledTrigger += HandleHotkeysToggle; + AddControls(); } } @@ -97,6 +104,14 @@ private void UpdateCheckStates() } } + private void UpdateHotkeyStatus() + { + foreach (Control control in flpHotkeys.Controls) + { + ((HotkeySelectionControl)control).UpdateHotkeyStatus(); + } + } + private void control_HotkeyChanged(object sender, EventArgs e) { HotkeySelectionControl control = (HotkeySelectionControl)sender; @@ -136,6 +151,11 @@ private void EditSelected() } } + private void HandleHotkeysToggle(bool hotkeysEnabled) + { + UpdateHotkeyStatus(); + } + private void flpHotkeys_Layout(object sender, LayoutEventArgs e) { foreach (Control control in flpHotkeys.Controls) diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index dcefac6f8..1c31f115e 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -1620,15 +1620,7 @@ private void HandleHotkeys(HotkeySettings hotkeySetting) if (hotkeySetting.TaskSettings.Job != HotkeyType.None) { - if (hotkeySetting.TaskSettings.Job == HotkeyType.DisableHotkeys) - { - TaskHelpers.ToggleHotkeys(); - } - - if (!Program.Settings.DisableHotkeys) - { - ExecuteJob(hotkeySetting.TaskSettings); - } + ExecuteJob(hotkeySetting.TaskSettings); } } @@ -1791,6 +1783,9 @@ private void ExecuteJob(TaskSettings taskSettings, HotkeyType job) case HotkeyType.OpenScreenshotsFolder: TaskHelpers.OpenScreenshotsFolder(); break; + case HotkeyType.DisableHotkeys: + TaskHelpers.ToggleHotkeys(); + break; } } diff --git a/ShareX/HotkeyManager.cs b/ShareX/HotkeyManager.cs index 61c141fce..d309a124e 100644 --- a/ShareX/HotkeyManager.cs +++ b/ShareX/HotkeyManager.cs @@ -37,8 +37,10 @@ public class HotkeyManager public bool IgnoreHotkeys { get; set; } public delegate void HotkeyTriggerEventHandler(HotkeySettings hotkeySetting); + public delegate void HotkeysToggledEventHandler(bool hotkeysEnabled); public HotkeyTriggerEventHandler HotkeyTrigger; + public HotkeysToggledEventHandler HotkeysToggledTrigger; private HotkeyForm hotkeyForm; @@ -80,19 +82,22 @@ protected void OnHotkeyTrigger(HotkeySettings hotkeySetting) public void RegisterHotkey(HotkeySettings hotkeySetting) { - UnregisterHotkey(hotkeySetting, false); - - if (hotkeySetting.HotkeyInfo.Status != HotkeyStatus.Registered && hotkeySetting.HotkeyInfo.IsValidHotkey) + if (!Program.Settings.DisableHotkeys || hotkeySetting.TaskSettings.Job == HotkeyType.DisableHotkeys) { - hotkeyForm.RegisterHotkey(hotkeySetting.HotkeyInfo); + UnregisterHotkey(hotkeySetting, false); - if (hotkeySetting.HotkeyInfo.Status == HotkeyStatus.Registered) + if (hotkeySetting.HotkeyInfo.Status != HotkeyStatus.Registered && hotkeySetting.HotkeyInfo.IsValidHotkey) { - DebugHelper.WriteLine("Hotkey registered: " + hotkeySetting); - } - else if (hotkeySetting.HotkeyInfo.Status == HotkeyStatus.Failed) - { - DebugHelper.WriteLine("Hotkey register failed: " + hotkeySetting); + hotkeyForm.RegisterHotkey(hotkeySetting.HotkeyInfo); + + if (hotkeySetting.HotkeyInfo.Status == HotkeyStatus.Registered) + { + DebugHelper.WriteLine("Hotkey registered: " + hotkeySetting); + } + else if (hotkeySetting.HotkeyInfo.Status == HotkeyStatus.Failed) + { + DebugHelper.WriteLine("Hotkey register failed: " + hotkeySetting); + } } } @@ -132,11 +137,31 @@ public void UnregisterHotkey(HotkeySettings hotkeySetting, bool removeFromList = } } - public void UnregisterAllHotkeys(bool removeFromList = true) + public void UnregisterAllHotkeys(bool removeFromList = true, bool temporary = false) { foreach (HotkeySettings hotkeySetting in Hotkeys.ToArray()) { - UnregisterHotkey(hotkeySetting, removeFromList); + if (!temporary || (temporary && hotkeySetting.TaskSettings.Job != HotkeyType.DisableHotkeys)) + { + UnregisterHotkey(hotkeySetting, removeFromList); + } + } + } + + public void ToggleHotkeys(bool hotkeysDisabled) + { + if (!hotkeysDisabled) + { + RegisterAllHotkeys(); + } + else + { + UnregisterAllHotkeys(false, true); + } + + if (HotkeysToggledTrigger != null) + { + HotkeysToggledTrigger(hotkeysDisabled); } } @@ -159,6 +184,11 @@ public void ResetHotkeys() UnregisterAllHotkeys(); Hotkeys.AddRange(GetDefaultHotkeyList()); RegisterAllHotkeys(); + + if (Program.Settings.DisableHotkeys) + { + TaskHelpers.ToggleHotkeys(); + } } public static List GetDefaultHotkeyList() diff --git a/ShareX/TaskHelpers.cs b/ShareX/TaskHelpers.cs index 634a8ca50..f1a7df357 100644 --- a/ShareX/TaskHelpers.cs +++ b/ShareX/TaskHelpers.cs @@ -760,19 +760,20 @@ public static EDataType FindDataType(string filePath, TaskSettings taskSettings) public static bool ToggleHotkeys() { - bool result = !Program.Settings.DisableHotkeys; - Program.Settings.DisableHotkeys = result; + bool hotkeysDisabled = !Program.Settings.DisableHotkeys; + Program.Settings.DisableHotkeys = hotkeysDisabled; + Program.HotkeyManager.ToggleHotkeys(hotkeysDisabled); Program.MainForm.UpdateToggleHotkeyButton(); if (Program.MainForm.niTray.Visible) { Program.MainForm.niTray.Tag = null; - string balloonTipText = result ? Resources.TaskHelpers_ToggleHotkeys_Hotkeys_disabled_ : Resources.TaskHelpers_ToggleHotkeys_Hotkeys_enabled_; + string balloonTipText = hotkeysDisabled ? Resources.TaskHelpers_ToggleHotkeys_Hotkeys_disabled_ : Resources.TaskHelpers_ToggleHotkeys_Hotkeys_enabled_; Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", balloonTipText, ToolTipIcon.Info); } - return result; + return hotkeysDisabled; } public static bool CheckFFmpeg(TaskSettings taskSettings)