Merge pull request #1095 from mpistrich/unregister-hotkeys-on-disable

Issue #846: Unregister hotkeys when disabling them.
This commit is contained in:
Jaex 2015-10-31 22:27:57 +02:00
commit d8b4e54c1c
5 changed files with 72 additions and 26 deletions

View file

@ -91,7 +91,7 @@ private void UpdateHotkeyText()
btnHotkey.Text = Setting.HotkeyInfo.ToString();
}
private void UpdateHotkeyStatus()
public void UpdateHotkeyStatus()
{
switch (Setting.HotkeyInfo.Status)
{

View file

@ -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)

View file

@ -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;
}
}

View file

@ -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<HotkeySettings> GetDefaultHotkeyList()

View file

@ -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)