diff options
| author | Stephen Blott | 2016-01-31 08:07:34 +0000 |
|---|---|---|
| committer | Stephen Blott | 2016-01-31 08:07:34 +0000 |
| commit | 334e9d7c4723b71706c4e3def3fd996bf7dff6f6 (patch) | |
| tree | 1d03ca5f3e542c842e45533eca6a23e99b2b41b7 | |
| parent | 7d7588c7b28aee13137e510aa8eb89b2a9df825d (diff) | |
| parent | 4f77df0084ede4cf0c35b196b9139f412c37c496 (diff) | |
| download | vimium-334e9d7c4723b71706c4e3def3fd996bf7dff6f6.tar.bz2 | |
Merge pull request #1819 from mrmr1993/unhover-links-when-clicking-link-hint
Emit mouseout for the last link when clicking a new link with link hints
| -rw-r--r-- | content_scripts/link_hints.coffee | 2 | ||||
| -rw-r--r-- | lib/dom_utils.coffee | 20 |
2 files changed, 18 insertions, 4 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index db5a932a..84c9f7f9 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -124,7 +124,7 @@ class LinkHintsMode DomUtils.simulateClick link, altKey: true, ctrlKey: false, metaKey: false else # OPEN_IN_CURRENT_TAB @hintMode.setIndicator "Open link in current tab." - @linkActivator = (link) -> DomUtils.simulateClick.bind(DomUtils, link)() + @linkActivator = DomUtils.simulateClick.bind DomUtils # # Creates a link marker for the given link. diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 027188bf..7473df17 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -234,13 +234,27 @@ DomUtils = if element.selectionStart == 0 and element.selectionEnd == 0 element.setSelectionRange element.value.length, element.value.length - + simulateUnhover: (element, modifiers) -> @simulateMouseEvent "mouseout", element, modifiers simulateClick: (element, modifiers) -> - modifiers ||= {} - eventSequence = ["mouseover", "mousedown", "mouseup", "click"] for event in eventSequence + @simulateMouseEvent event, element, modifiers + + simulateMouseEvent: do -> + lastHoveredElement = undefined + (event, element, modifiers = {}) -> + + if event == "mouseout" + element ?= lastHoveredElement # Allow unhovering the last hovered element by passing undefined. + lastHoveredElement = undefined + return unless element? + + else if event == "mouseover" + # Simulate moving the mouse off the previous element first, as if we were a real mouse. + @simulateMouseEvent "mouseout", undefined, modifiers + lastHoveredElement = element + mouseEvent = document.createEvent("MouseEvents") mouseEvent.initMouseEvent(event, true, true, window, 1, 0, 0, 0, 0, modifiers.ctrlKey, modifiers.altKey, modifiers.shiftKey, modifiers.metaKey, 0, null) |
