diff --git a/src/Greenshot/Components/HotkeyService.cs b/src/Greenshot/Components/HotkeyService.cs index 88f633987..7dbadaaa0 100644 --- a/src/Greenshot/Components/HotkeyService.cs +++ b/src/Greenshot/Components/HotkeyService.cs @@ -23,8 +23,6 @@ using System; using System.Reactive.Linq; -using System.Threading; -using Autofac.Features.AttributeFilters; using Caliburn.Micro; using Dapplo.Addons; using Dapplo.Log; @@ -42,53 +40,67 @@ namespace Greenshot.Components { private static readonly LogSource Log = new LogSource(); private readonly ICoreConfiguration _coreConfiguration; - private readonly SynchronizationContext _synchronizationContext; private IDisposable _subscriptions; - public HotkeyService(ICoreConfiguration coreConfiguration, - [KeyFilter("ui")] SynchronizationContext synchronizationContext) + public HotkeyService(ICoreConfiguration coreConfiguration) { _coreConfiguration = coreConfiguration; - _synchronizationContext = synchronizationContext; + } + + /// + /// If set to false, hotkey presses don't trigger the functionality + /// + public bool AreHotkeysActive { get; set; } = true; + + /// + /// This can be used to disable or enable the triggering of hotkeys, depending in different logic + /// + /// KeyboardHookEventArgs + /// bool + private bool HotkeyTrigger(KeyboardHookEventArgs keyboardHookEventArgs) + { + return AreHotkeysActive; } public void Startup() { Log.Debug().WriteLine("Registering hotkeys"); - var syncedEvents = KeyboardHook.KeyboardEvents - .Synchronize() - .ObserveOn(_synchronizationContext) - .SubscribeOn(_synchronizationContext); + var syncedEvents = KeyboardHook.KeyboardEvents; // Region hotkey var regionHotkeyHandler = new HotKeyHandler(_coreConfiguration, nameof(ICoreConfiguration.RegionHotkey)); _subscriptions = syncedEvents .Where(regionHotkeyHandler) + .Where(HotkeyTrigger) .Subscribe(CaptureRegion, () => regionHotkeyHandler.Dispose()); // Fullscreen hotkey var fullScreenHotkeyHandler = new HotKeyHandler(_coreConfiguration, nameof(ICoreConfiguration.FullscreenHotkey)); _subscriptions = syncedEvents .Where(fullScreenHotkeyHandler) + .Where(HotkeyTrigger) .Subscribe(CaptureFullscreen, () => fullScreenHotkeyHandler.Dispose()); // Last region hotkey var lastRegionHotKeyHandler = new HotKeyHandler(_coreConfiguration, nameof(ICoreConfiguration.LastregionHotkey)); _subscriptions = syncedEvents .Where(lastRegionHotKeyHandler) + .Where(HotkeyTrigger) .Subscribe(CaptureLast, () => lastRegionHotKeyHandler.Dispose()); // Window hotkey var windowHotKeyHandler = new HotKeyHandler(_coreConfiguration, nameof(ICoreConfiguration.WindowHotkey)); _subscriptions = syncedEvents .Where(windowHotKeyHandler) + .Where(HotkeyTrigger) .Subscribe(CaptureWindow, () => windowHotKeyHandler.Dispose()); // IE hotkey var ieHotKeyHandler = new HotKeyHandler(_coreConfiguration, nameof(ICoreConfiguration.IEHotkey)); _subscriptions = syncedEvents .Where(ieHotKeyHandler) + .Where(HotkeyTrigger) .Subscribe(CaptureIe, () => ieHotKeyHandler.Dispose()); Log.Debug().WriteLine("Started hotkeys");