aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2014-12-15 06:41:41 +0000
committerStephen Blott2014-12-15 06:41:41 +0000
commit69c07dbb6ee38c944abc5dc4bcacf73a88048aaf (patch)
tree8154b36d0234471bc3e9c8b47570f3c10895736d
parentc698061e8ae7e9ec61a780c1ff0658f4f349a4a3 (diff)
parent4e131fe4c6a2f043428c7478d81d5a291135a3f7 (diff)
downloadvimium-69c07dbb6ee38c944abc5dc4bcacf73a88048aaf.tar.bz2
Merge branch 'stop-memory-leak-for-keydown-repeats' of https://github.com/mrmr1993/vimium into mrmr1993-stop-memory-leak-for-keydown-repeats
-rw-r--r--content_scripts/vimium_frontend.coffee43
1 files changed, 23 insertions, 20 deletions
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 31f0eab5..165b3329 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -342,7 +342,20 @@ extend window,
isPassKey = ( keyChar ) ->
return !keyQueue and passKeys and 0 <= passKeys.indexOf(keyChar)
-handledKeydownEvents = []
+handledKeydownEvents = {}
+eventDetailsString = (event) ->
+ JSON.stringify
+ metaKey: event.metaKey
+ altKey: event.altKey
+ ctrlKey: event.ctrlKey
+ keyIdentifier: event.keyIdentifier
+ keyCode: event.keyCode
+pushHandledKeydownEvent = (event) -> handledKeydownEvents[eventDetailsString event] = true
+hasHandledKeydownEvent = (event) ->
+ detailString = eventDetailsString event
+ value = handledKeydownEvents[detailString]
+ delete handledKeydownEvents[detailString]
+ value
#
# Sends everything except i & ESC to the handler in background_page. i & ESC are special because they control
@@ -416,38 +429,38 @@ onKeydown = (event) ->
event.srcElement.blur()
exitInsertMode()
DomUtils.suppressEvent event
- handledKeydownEvents.push event
+ pushHandledKeydownEvent event
else if (findMode)
if (KeyboardUtils.isEscape(event))
handleEscapeForFindMode()
DomUtils.suppressEvent event
- handledKeydownEvents.push event
+ pushHandledKeydownEvent event
else if (event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey)
handleDeleteForFindMode()
DomUtils.suppressEvent event
- handledKeydownEvents.push event
+ pushHandledKeydownEvent event
else if (event.keyCode == keyCodes.enter)
handleEnterForFindMode()
DomUtils.suppressEvent event
- handledKeydownEvents.push event
+ pushHandledKeydownEvent event
else if (!modifiers)
DomUtils.suppressPropagation(event)
- handledKeydownEvents.push event
+ pushHandledKeydownEvent event
else if (isShowingHelpDialog && KeyboardUtils.isEscape(event))
hideHelpDialog()
DomUtils.suppressEvent event
- handledKeydownEvents.push event
+ pushHandledKeydownEvent event
else if (!isInsertMode() && !findMode)
if (keyChar)
if (currentCompletionKeys.indexOf(keyChar) != -1 or isValidFirstKey(keyChar))
DomUtils.suppressEvent event
- handledKeydownEvents.push event
+ pushHandledKeydownEvent event
keyPort.postMessage({ keyChar:keyChar, frameId:frameId })
@@ -468,23 +481,13 @@ onKeydown = (event) ->
(currentCompletionKeys.indexOf(KeyboardUtils.getKeyChar(event)) != -1 ||
isValidFirstKey(KeyboardUtils.getKeyChar(event))))
DomUtils.suppressPropagation(event)
- handledKeydownEvents.push event
+ pushHandledKeydownEvent event
onKeyup = (event) ->
return unless handlerStack.bubbleEvent("keyup", event)
- return if isInsertMode()
# Don't propagate the keyup to the underlying page if Vimium has handled it. See #733.
- for keydown, i in handledKeydownEvents
- if event.metaKey == keydown.metaKey and
- event.altKey == keydown.altKey and
- event.ctrlKey == keydown.ctrlKey and
- event.keyIdentifier == keydown.keyIdentifier and
- event.keyCode == keydown.keyCode
-
- handledKeydownEvents.splice i, 1
- DomUtils.suppressPropagation(event)
- break
+ DomUtils.suppressPropagation(event) if hasHandledKeydownEvent event
checkIfEnabledForUrl = ->
url = window.location.toString()