diff options
| author | Stephen Blott | 2015-05-05 16:59:48 +0100 |
|---|---|---|
| committer | Stephen Blott | 2015-05-05 16:59:48 +0100 |
| commit | 14b8370dcd87a969ebd5a521877d4c52e18b4b14 (patch) | |
| tree | 1aa42ff0981415bd3bd2272a4237904b759692bf | |
| parent | 7c017530d58983ff96cd9f9ac3031186210f9753 (diff) | |
| parent | f35341f42db93b5fde6712c2bc4bb767f5b9cc07 (diff) | |
| download | vimium-14b8370dcd87a969ebd5a521877d4c52e18b4b14.tar.bz2 | |
Merge remote-tracking branch 'mrmr1993/fix-insert-mode-for-shadow-dom'
| -rw-r--r-- | content_scripts/mode_insert.coffee | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee index 7ca2e561..4d68b12d 100644 --- a/content_scripts/mode_insert.coffee +++ b/content_scripts/mode_insert.coffee @@ -19,6 +19,9 @@ 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 + # An editable element in a shadow DOM is focused; blur it. + @insertModeLock.blur() @exit event, event.srcElement @suppressEvent @@ -53,6 +56,21 @@ class InsertMode extends Mode "focus": (event) => @alwaysContinueBubbling => if @insertModeLock != event.target and DomUtils.isFocusable event.target @activateOnElement event.target + else if event.target.shadowRoot + # A focusable element inside the shadow DOM might have been selected. If so, we can catch the focus + # event inside the shadow DOM. This fixes #853. + shadowRoot = event.target.shadowRoot + eventListeners = {} + 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 + + shadowRoot.addEventListener type, eventListeners[type], true # Only for tests. This gives us a hook to test the status of the permanently-installed instance. InsertMode.permanentInstance = @ if @permanent |
