diff options
| -rw-r--r-- | lib/dom_utils.coffee | 23 | 
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 21a00ae4..1d1b67ba 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -173,20 +173,23 @@ DomUtils =        node = document.getSelection()?.anchorNode        node and @isDOMDescendant element, node      else -      element.selectionStart? and element.selectionEnd? and element.selectionStart != element.selectionEnd +      # Note.  This makes the wrong decision if the user has placed the caret at the start of element.  We +      # cannot distinguish that case from the user having made no selection. +      element.selectionStart? and element.selectionEnd? and element.selectionEnd != 0    simulateSelect: (element) -> -    isSelected = @isSelected element -    # If element == document.activeElement, then we won't get a new focus event.  So, we pretend (to any -    # active modes which care, e.g. PostFindMode) that element has been clicked. +    # If element is already active, then we don't move the selection.  However, we also won't get a new focus +    # event.  So, instead we pretend (to any active modes which care, e.g. PostFindMode) that element has been +    # clicked.      if element == document.activeElement and DomUtils.isEditable document.activeElement        handlerStack.bubbleEvent "click", target: element - -    element.focus() -    unless isSelected -      # When focusing a textbox, put the selection caret at the end of the textbox's contents. -      # For some HTML5 input types (eg. date) we can't position the caret, so we wrap this with a try. -      try element.setSelectionRange(element.value.length, element.value.length) +    else +      element.focus() +      unless @isSelected element +        # When focusing a textbox (without an existing selection), put the selection caret at the end of the +        # textbox's contents.  For some HTML5 input types (eg. date) we can't position the caret, so we wrap +        # this with a try. +        try element.setSelectionRange(element.value.length, element.value.length)    simulateClick: (element, modifiers) ->      modifiers ||= {}  | 
