diff options
| -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) | 
