aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2016-01-31 08:07:34 +0000
committerStephen Blott2016-01-31 08:07:34 +0000
commit334e9d7c4723b71706c4e3def3fd996bf7dff6f6 (patch)
tree1d03ca5f3e542c842e45533eca6a23e99b2b41b7
parent7d7588c7b28aee13137e510aa8eb89b2a9df825d (diff)
parent4f77df0084ede4cf0c35b196b9139f412c37c496 (diff)
downloadvimium-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.coffee2
-rw-r--r--lib/dom_utils.coffee20
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)