From 4c32c0383964e178e0196a87df7fc7a4ad7f8f27 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 14 Apr 2017 07:48:56 +0100 Subject: Use event.code to detect/suppress keyup events. This avoids the possibility of leaking keyup events if the keys a released in a different order from that in which they were pressed. Also, replace suppressKeyupAfterEscape with this same mechanism. This fixes a bug (in master/1.59) whereby we leak the keyup event for `i` when entering insert mode. TODO: - `/`, `` leaks a keyup event - `i` leaks a keyup event --- lib/dom_utils.coffee | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) (limited to 'lib') diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 8764bdbe..3f0bd7f3 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -305,27 +305,13 @@ DomUtils = event.preventDefault() @suppressPropagation(event) - # Suppress the next keyup event for Escape. - suppressKeyupAfterEscape: (handlerStack) -> - handlerStack.push - _name: "dom_utils/suppressKeyupAfterEscape" - keyup: (event) -> - return true unless KeyboardUtils.isEscape event - @remove() - false - handlerStack.suppressEvent - consumeKeyup: (event, callback = null) -> - @suppressEvent event - keyChar = KeyboardUtils.getKeyCharString event + code = event.code unless event.repeat handlerStack.push _name: "dom_utils/consumeKeyup" - keydown: (event) -> - @remove() - handlerStack.continueBubbling keyup: (event) -> - return handlerStack.continueBubbling unless keyChar == KeyboardUtils.getKeyCharString event + return handlerStack.continueBubbling unless event.code == code @remove() handlerStack.suppressEvent # We cannot track keyup events if we lose the focus. @@ -333,6 +319,7 @@ DomUtils = @remove() if event.target == window handlerStack.continueBubbling callback?() + @suppressEvent event handlerStack.suppressEvent # Adapted from: http://roysharon.com/blog/37. -- cgit v1.2.3