Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions DOCUMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down Expand Up @@ -159,4 +193,6 @@ public void KeyboardListener_SubscribeSequenceUnsubscribeAll()
listener.Unsubscribe();
});
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
7 changes: 7 additions & 0 deletions DeftSharp.Windows.Input/Keyboard/KeyboardListener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -350,4 +350,11 @@ public void Dispose()
_sequenceListener.Dispose();
_combinationListener.Dispose();
}

public void UnsubscribeCombination(Key[] combination)
{
_combinationListener.Unsubscribe(combination);
}


}