aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts/mode.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'content_scripts/mode.coffee')
-rw-r--r--content_scripts/mode.coffee19
1 files changed, 19 insertions, 0 deletions
diff --git a/content_scripts/mode.coffee b/content_scripts/mode.coffee
index 508b1b2c..49da03e2 100644
--- a/content_scripts/mode.coffee
+++ b/content_scripts/mode.coffee
@@ -144,6 +144,25 @@ class Mode
keyup: (event) =>
if KeyboardUtils.isPrintable event then @stopBubblingAndFalse else @stopBubblingAndTrue
+ # if @options.suppressTrailingKeyEvents is set, then we suppress all key events until a subsquent
+ # (non-repeat) keydown or keypress. In particular, the intention is to catch keyup events for keys which
+ # we have handled, but which otherwise might trigger page actions (if the page is listening for keyup
+ # events).
+ if @options.suppressTrailingKeyEvents
+ @onExit ->
+ handler = (event) ->
+ if event.repeat
+ false # Suppress event.
+ else
+ keyEventSuppressor.exit()
+ true # Do not suppress event.
+
+ keyEventSuppressor = new Mode
+ name: "suppress-trailing-key-events"
+ keydown: handler
+ keypress: handler
+ keyup: -> handlerStack.stopBubblingAndFalse
+
Mode.modes.push @
@setIndicator()
@logModes()