@@ -85,7 +85,7 @@ public void call() {
85
85
* @see SwingObservable.fromKeyEvents(Component, Set)
86
86
*/
87
87
public static Observable <Set <Integer >> currentlyPressedKeysOf (Component component ) {
88
- return Observable .< KeyEvent , Set < Integer >> scan ( fromKeyEventsOf ( component ), new HashSet < Integer >(), new Func2 <Set <Integer >, KeyEvent , Set <Integer >>() {
88
+ class CollectKeys implements Func2 <Set <Integer >, KeyEvent , Set <Integer >>{
89
89
@ Override
90
90
public Set <Integer > call (Set <Integer > pressedKeys , KeyEvent event ) {
91
91
Set <Integer > afterEvent = new HashSet <Integer >(pressedKeys );
@@ -102,7 +102,16 @@ public Set<Integer> call(Set<Integer> pressedKeys, KeyEvent event) {
102
102
}
103
103
return afterEvent ;
104
104
}
105
+ }
106
+
107
+ Observable <KeyEvent > filteredKeyEvents = fromKeyEventsOf (component ).filter (new Func1 <KeyEvent , Boolean >() {
108
+ @ Override
109
+ public Boolean call (KeyEvent event ) {
110
+ return event .getID () == KeyEvent .KEY_PRESSED || event .getID () == KeyEvent .KEY_RELEASED ;
111
+ }
105
112
});
113
+
114
+ return Observable .<KeyEvent , Set <Integer >>scan (filteredKeyEvents , Collections .<Integer >emptySet (), new CollectKeys ());
106
115
}
107
116
108
117
public static class UnitTest {
@@ -158,6 +167,7 @@ public void testObservingPressedKeys() {
158
167
verify (complete , never ()).call ();
159
168
160
169
fireKeyEvent (keyEvent (2 , KeyEvent .KEY_PRESSED ));
170
+ fireKeyEvent (keyEvent (KeyEvent .VK_UNDEFINED , KeyEvent .KEY_TYPED ));
161
171
inOrder .verify (action , times (1 )).call (new HashSet <Integer >(asList (1 , 2 )));
162
172
163
173
fireKeyEvent (keyEvent (2 , KeyEvent .KEY_RELEASED ));
0 commit comments