From 7c778d197e8bb7a482fe247db1ee93ae9c28cfd1 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Fri, 3 Feb 2012 09:55:04 -0800 Subject: [PATCH] Text is selected when mouse is moved after double click --- spec/atom/editor-spec.coffee | 31 +++++++++++++++++++++++++++++++ src/atom/editor.coffee | 11 ++++++++--- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/spec/atom/editor-spec.coffee b/spec/atom/editor-spec.coffee index 4eb40f510..2125425b7 100644 --- a/spec/atom/editor-spec.coffee +++ b/spec/atom/editor-spec.coffee @@ -385,6 +385,37 @@ describe "Editor", -> expect(range.end).toEqual({row: 5, column: 27}) expect(editor.getCursorPosition()).toEqual(row: 5, column: 27) + fit "creates a selection from the initial double click to mouse cursor's location ", -> + editor.attachToDom() + editor.css(position: 'absolute', top: 10, left: 10) + + # double click + [pageX, pageY] = window.pixelPositionForPoint(editor, [4, 10]) + editor.lines.trigger mousedownEvent({pageX, pageY, originalEvent: {detail: 1}}) + $(document).trigger 'mouseup' + editor.lines.trigger mousedownEvent({pageX, pageY, originalEvent: {detail: 2}}) + + # moving changes selection + [pageX, pageY] = window.pixelPositionForPoint(editor, [5, 27]) + editor.lines.trigger mousemoveEvent({pageX, pageY}) + + range = editor.selection.getRange() + expect(range.start).toEqual({row: 4, column: 10}) + expect(range.end).toEqual({row: 5, column: 27}) + expect(editor.getCursorPosition()).toEqual(row: 5, column: 27) + + # mouse up may occur outside of editor, but still need to halt selection + $(document).trigger 'mouseup' + + # moving after mouse up should not change selection + [pageX, pageY] = window.pixelPositionForPoint(editor, [8, 8]) + editor.lines.trigger mousemoveEvent({pageX, pageY}) + + range = editor.selection.getRange() + expect(range.start).toEqual({row: 4, column: 10}) + expect(range.end).toEqual({row: 5, column: 27}) + expect(editor.getCursorPosition()).toEqual(row: 5, column: 27) + describe "buffer manipulation", -> describe "when text input events are triggered on the hidden input element", -> describe "when there is no selection", -> diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index 86bc95eb7..0384eda2f 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -83,11 +83,10 @@ class Editor extends Template if clickCount == 1 @setCursorPosition @pointFromMouseEvent(e) - moveHandler = (e) => @selectToPosition(@pointFromMouseEvent(e)) - @on 'mousemove', moveHandler - $(document).one 'mouseup', => @off 'mousemove', moveHandler + @selectTextOnMouseMovement() else if clickCount == 2 @selection.selectWord() + @selectTextOnMouseMovement() @hiddenInput.on "textInput", (e) => @insertText(e.originalEvent.data) @@ -100,6 +99,12 @@ class Editor extends Template @hiddenInput.width(@charWidth) @focus() + selectTextOnMouseMovement: -> + moveHandler = (e) => @selectToPosition(@pointFromMouseEvent(e)) + @on 'mousemove', moveHandler + $(document).one 'mouseup', => @off 'mousemove', moveHandler + + buildLineElement: (row) -> tokens = @highlighter.tokensForRow(row) $$.pre class: 'line', ->