| Index: tools/dom/src/KeyboardEventController.dart
|
| diff --git a/tools/dom/src/KeyboardEventController.dart b/tools/dom/src/KeyboardEventController.dart
|
| index 1e0f97a82c6e8e173783b5827383eef99b6d86ec..73a7602f83b26cdb3e8bdcf09687cd9f40a85922 100644
|
| --- a/tools/dom/src/KeyboardEventController.dart
|
| +++ b/tools/dom/src/KeyboardEventController.dart
|
| @@ -37,9 +37,8 @@ class KeyboardEventController {
|
| // The distance to shift from upper case alphabet Roman letters to lower case.
|
| final int _ROMAN_ALPHABET_OFFSET = "a".charCodes[0] - "A".charCodes[0];
|
|
|
| - // Instance members referring to the internal event handlers because closures
|
| - // are not hashable.
|
| - var _keyUp, _keyDown, _keyPress;
|
| + StreamSubscription _keyUpSubscription, _keyDownSubscription,
|
| + _keyPressSubscription;
|
|
|
| /**
|
| * An enumeration of key identifiers currently part of the W3C draft for DOM3
|
| @@ -95,9 +94,6 @@ class KeyboardEventController {
|
| _callbacks = [];
|
| _type = type;
|
| _target = target;
|
| - _keyDown = processKeyDown;
|
| - _keyUp = processKeyUp;
|
| - _keyPress = processKeyPress;
|
| }
|
|
|
| /**
|
| @@ -106,9 +102,14 @@ class KeyboardEventController {
|
| */
|
| void _initializeAllEventListeners() {
|
| _keyDownList = [];
|
| - _target.on.keyDown.add(_keyDown, true);
|
| - _target.on.keyPress.add(_keyPress, true);
|
| - _target.on.keyUp.add(_keyUp, true);
|
| + if (_keyDownSubscription == null) {
|
| + _keyDownSubscription = Element.keyDownEvent.forTarget(
|
| + _target, useCapture: true).listen(processKeyDown);
|
| + _keyPressSubscription = Element.keyPressEvent.forTarget(
|
| + _target, useCapture: true).listen(processKeyUp);
|
| + _keyUpSubscription = Element.keyUpEvent.forTarget(
|
| + _target, useCapture: true).listen(processKeyPress);
|
| + }
|
| }
|
|
|
| /** Add a callback that wishes to be notified when a KeyEvent occurs. */
|
| @@ -142,9 +143,12 @@ class KeyboardEventController {
|
| }
|
| if (_callbacks.length == 0) {
|
| // If we have no listeners, don't bother keeping track of keypresses.
|
| - _target.on.keyDown.remove(_keyDown);
|
| - _target.on.keyPress.remove(_keyPress);
|
| - _target.on.keyUp.remove(_keyUp);
|
| + _keyDownSubscription.cancel();
|
| + _keyDownSubscription = null;
|
| + _keyPressSubscription.cancel();
|
| + _keyPressSubscription = null;
|
| + _keyUpSubscription.cancel();
|
| + _keyUpSubscription = null;
|
| }
|
| }
|
|
|
|
|