Skip to content

Commit de62c8a

Browse files
author
jmhofer
committed
Improved key press observable to filter out events of type KEY_TYPED completely.
1 parent 8664ce2 commit de62c8a

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/ComponentEventSource.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,5 @@ private Predicate(int id) {
103103
public Boolean call(ComponentEvent event) {
104104
return event.getID() == id;
105105
}
106-
107106
}
108107
}

rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public void call() {
8585
* @see SwingObservable.fromKeyEvents(Component, Set)
8686
*/
8787
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>>{
8989
@Override
9090
public Set<Integer> call(Set<Integer> pressedKeys, KeyEvent event) {
9191
Set<Integer> afterEvent = new HashSet<Integer>(pressedKeys);
@@ -102,7 +102,16 @@ public Set<Integer> call(Set<Integer> pressedKeys, KeyEvent event) {
102102
}
103103
return afterEvent;
104104
}
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+
}
105112
});
113+
114+
return Observable.<KeyEvent, Set<Integer>>scan(filteredKeyEvents, Collections.<Integer>emptySet(), new CollectKeys());
106115
}
107116

108117
public static class UnitTest {
@@ -158,6 +167,7 @@ public void testObservingPressedKeys() {
158167
verify(complete, never()).call();
159168

160169
fireKeyEvent(keyEvent(2, KeyEvent.KEY_PRESSED));
170+
fireKeyEvent(keyEvent(KeyEvent.VK_UNDEFINED, KeyEvent.KEY_TYPED));
161171
inOrder.verify(action, times(1)).call(new HashSet<Integer>(asList(1, 2)));
162172

163173
fireKeyEvent(keyEvent(2, KeyEvent.KEY_RELEASED));

0 commit comments

Comments
 (0)