From bc3bfed3bc4f2173a55deba19f4541e18aef39c6 Mon Sep 17 00:00:00 2001 From: blackholeearth Date: Mon, 3 Mar 2025 14:33:08 +0300 Subject: [PATCH 1/3] add UnsubscribeCombination KeyCombo , add Test This reverts commit 3e26e6407387013f9741a25bfaa3c1792239bdc3. added UnsubscribeCombination added UnsubscribeCombination add doc to UnsubscribeCombination. --- DOCUMENTATION.md | 7 ++++ .../KeyboardListenerUnsubscribeTests.cs | 36 +++++++++++++++++++ .../KeyboardCombinationListenerInterceptor.cs | 12 +++++++ .../Keyboard/KeyboardListener.cs | 7 ++++ 4 files changed, 62 insertions(+) diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md index 1601a8e..94a8c3c 100644 --- a/DOCUMENTATION.md +++ b/DOCUMENTATION.md @@ -127,6 +127,13 @@ var subscription = keyboardListener.Subscribe(Key.A, key => { }); keyboardListener.Unsubscribe(); keyboardListener.Unsubscribe(Key.A); keyboardListener.Unsubscribe(subscription.Id); + + +// Subscribe to the event +Key[] keyCombo = [Key.LeftCtrl, Key.V]; +var subscription2 = keyboardListener.SubscribeCombination(keyCombo, key => { }); +keyboardListener.UnsubscribeCombination(keyCombo); + ``` ## Getting the current state of the keys diff --git a/DeftSharp.Windows.Input.Tests/Keyboard/KeyboardListenerUnsubscribeTests.cs b/DeftSharp.Windows.Input.Tests/Keyboard/KeyboardListenerUnsubscribeTests.cs index 7f50e08..0dbe8e7 100644 --- a/DeftSharp.Windows.Input.Tests/Keyboard/KeyboardListenerUnsubscribeTests.cs +++ b/DeftSharp.Windows.Input.Tests/Keyboard/KeyboardListenerUnsubscribeTests.cs @@ -120,6 +120,40 @@ public void KeyboardListener_SubscribeCombinationUnsubscribeSingleKey() Assert.True(keyboardListener.Combinations.All(x => x.Combination.SequenceEqual(combination.AsEnumerable()))); } + [Fact] + public void KeyboardListener_SubscribeCombinationUnsubscribeCombinaiton() + { + var keyboardListener = new KeyboardListener(); + Key[] combination = { Key.W, Key.A }; + keyboardListener.SubscribeCombination(combination, () => { }); + keyboardListener.UnsubscribeCombination(combination); + + Assert.Empty(keyboardListener.Combinations); + + } + [Fact] + public void KeyboardListener_SubscribeCombinationUnsubscribeCombinaiton2() + { + var keyboardListener = new KeyboardListener(); + Key[] combination1 = { Key.W, Key.A }; + Key[] combination2 = { Key.W, Key.K }; + keyboardListener.SubscribeCombination(combination1, () => { }); + keyboardListener.SubscribeCombination(combination2, () => { }); + keyboardListener.UnsubscribeCombination(combination2); + + + var test1 = keyboardListener.Combinations + .FirstOrDefault(x=> x.Combination.SequenceEqual(combination2)) is null; + Assert.True(test1); + + var test2 = keyboardListener.Combinations + .FirstOrDefault(x => x.Combination.SequenceEqual(combination1)) != null; + Assert.True(test2); + + Assert.Single(keyboardListener.Combinations); + + } + [Fact] public void KeyboardListener_SubscribeSequenceUnsubscribeSingleKey() { @@ -159,4 +193,6 @@ public void KeyboardListener_SubscribeSequenceUnsubscribeAll() listener.Unsubscribe(); }); } + + } \ No newline at end of file diff --git a/DeftSharp.Windows.Input/Keyboard/Interceptors/KeyboardCombinationListenerInterceptor.cs b/DeftSharp.Windows.Input/Keyboard/Interceptors/KeyboardCombinationListenerInterceptor.cs index e50d036..f2e7c3f 100644 --- a/DeftSharp.Windows.Input/Keyboard/Interceptors/KeyboardCombinationListenerInterceptor.cs +++ b/DeftSharp.Windows.Input/Keyboard/Interceptors/KeyboardCombinationListenerInterceptor.cs @@ -49,6 +49,18 @@ public void Unsubscribe(Guid id) _subscriptions.Remove(keyboardSubscribe); } + public void Unsubscribe(Key[] keyCombination) + { + var keyboardSubscribe = + _subscriptions.FirstOrDefault(sub => sub.Combination.SequenceEqual(keyCombination) ); + + if (keyboardSubscribe is null) + return; + + _subscriptions.Remove(keyboardSubscribe); + } + + public override void Dispose() { Unsubscribe(); diff --git a/DeftSharp.Windows.Input/Keyboard/KeyboardListener.cs b/DeftSharp.Windows.Input/Keyboard/KeyboardListener.cs index 5e2180b..b363d14 100644 --- a/DeftSharp.Windows.Input/Keyboard/KeyboardListener.cs +++ b/DeftSharp.Windows.Input/Keyboard/KeyboardListener.cs @@ -350,4 +350,11 @@ public void Dispose() _sequenceListener.Dispose(); _combinationListener.Dispose(); } + + public void UnsubscribeCombination(Key[] combination) + { + _combinationListener.Unsubscribe(combination); + } + + } \ No newline at end of file From c50a7831cd1b0082c221dfe675f8c52ab96cf898 Mon Sep 17 00:00:00 2001 From: blackholeearth Date: Tue, 4 Mar 2025 23:15:32 +0300 Subject: [PATCH 2/3] add ignore files - TestPolyFilll/bin - obj TestPolyFilll projj - ignore files fix. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 34faed3..9512394 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ DeftSharp.Windows.Input.sln.DotSettings.user WPF.Playground/bin WPF.Playground/obj .vs +/Test_polyfill/bin +/Test_polyfill/obj +DeftSharp.Windows.Input/DeftSharp.Windows.Input.csproj.user From b7d38799c6305594b30560afc88c773c4aec18ca Mon Sep 17 00:00:00 2001 From: blackholeearth Date: Wed, 19 Mar 2025 23:33:57 +0300 Subject: [PATCH 3/3] restore .gitignore Revert "Delete .gitignore" This reverts commit 977279bbff3adc20e1a7689360a8d26018f5b60f. Revert "add ignore files - TestPolyFilll/bin - obj" This reverts commit c50a7831cd1b0082c221dfe675f8c52ab96cf898. --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 9512394..34faed3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,3 @@ DeftSharp.Windows.Input.sln.DotSettings.user WPF.Playground/bin WPF.Playground/obj .vs -/Test_polyfill/bin -/Test_polyfill/obj -DeftSharp.Windows.Input/DeftSharp.Windows.Input.csproj.user