aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2015-05-05 09:56:07 +0100
committerStephen Blott2015-05-05 17:00:09 +0100
commit80f9ea33c2daf6648aa45511ccd9bc3bc156cfad (patch)
tree5c6e315b5243f8b84ad7ac34ab109aa95c7c81f9
parent14b8370dcd87a969ebd5a521877d4c52e18b4b14 (diff)
downloadvimium-80f9ea33c2daf6648aa45511ccd9bc3bc156cfad.tar.bz2
Possible re-working of #1627.
-rw-r--r--content_scripts/mode_insert.coffee20
1 files changed, 11 insertions, 9 deletions
diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee
index 4d68b12d..4e03cdd5 100644
--- a/content_scripts/mode_insert.coffee
+++ b/content_scripts/mode_insert.coffee
@@ -19,7 +19,7 @@ class InsertMode extends Mode
# the right thing to do for most common use cases. However, it could also cripple flash-based sites and
# games. See discussion in #1211 and #1194.
target.blur()
- else if target.shadowRoot and @insertModeLock
+ else if target?.shadowRoot and @insertModeLock
# An editable element in a shadow DOM is focused; blur it.
@insertModeLock.blur()
@exit event, event.srcElement
@@ -61,17 +61,19 @@ class InsertMode extends Mode
# event inside the shadow DOM. This fixes #853.
shadowRoot = event.target.shadowRoot
eventListeners = {}
- for type in ["focus", "blur"]
+ for type in [ "focus", "blur" ]
eventListeners[type] = do (type) ->
- (event) ->
- handlerStack.bubbleEvent type, event
- if type == "blur"
- # Unregister the event listeners.
- for ltype, listener of eventListeners
- shadowRoot.removeEventListener ltype, listener, true
-
+ (event) -> handlerStack.bubbleEvent type, event
shadowRoot.addEventListener type, eventListeners[type], true
+ handlerStack.push
+ _name: "shadow-DOM-input-mode"
+ blur: (event) ->
+ if event.target.shadowRoot == shadowRoot
+ handlerStack.remove()
+ for type, listener of eventListeners
+ shadowRoot.removeEventListener type, listener, true
+
# Only for tests. This gives us a hook to test the status of the permanently-installed instance.
InsertMode.permanentInstance = @ if @permanent