diff options
| -rw-r--r-- | content_scripts/link_hints.coffee | 12 | ||||
| -rw-r--r-- | lib/dom_utils.coffee | 27 | 
2 files changed, 21 insertions, 18 deletions
| diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index fad6b839..13e2a17b 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -93,7 +93,6 @@ class LinkHintsMode        else          @hintMode.setIndicator "Open multiple links in new tabs."        @linkActivator = (link) -> -        @unhoverLast link          # When "clicking" on a link, dispatch the event with the appropriate meta key (CMD on Mac, CTRL on          # windows) to open it in a new tab if necessary.          DomUtils.simulateClick link, @@ -118,13 +117,10 @@ class LinkHintsMode      else if @mode is DOWNLOAD_LINK_URL        @hintMode.setIndicator "Download link URL."        @linkActivator = (link) -> -        @unhoverLast link          DomUtils.simulateClick link, altKey: true, ctrlKey: false, metaKey: false      else # OPEN_IN_CURRENT_TAB        @hintMode.setIndicator "Open link in current tab." -      @linkActivator = (link) -> -        @unhoverLast link -        DomUtils.simulateClick link +      @linkActivator = DomUtils.simulateClick.bind DomUtils    #    # Creates a link marker for the given link. @@ -381,12 +377,6 @@ class LinkHintsMode        else          @deactivateMode delay -  unhoverLast: do -> -    lastHoveredElement = null -    (element) -> -      DomUtils.simulateUnhover lastHoveredElement if lastHoveredElement? -      lastHoveredElement = element -    #    # Shows the marker, highlighting matchingCharCount characters.    # diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 06a02180..7473df17 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -241,13 +241,26 @@ DomUtils =      for event in eventSequence        @simulateMouseEvent event, element, modifiers -  simulateMouseEvent: (event, element, modifiers = {}) -> -    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) -    # Debugging note: Firefox will not execute the element's default action if we dispatch this click event, -    # but Webkit will. Dispatching a click on an input box does not seem to focus it; we do that separately -    element.dispatchEvent(mouseEvent) +  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) +      # Debugging note: Firefox will not execute the element's default action if we dispatch this click event, +      # but Webkit will. Dispatching a click on an input box does not seem to focus it; we do that separately +      element.dispatchEvent(mouseEvent)    # momentarily flash a rectangular border to give user some visual feedback    flashRect: (rect) -> | 
