diff --git a/src/cursor.coffee b/src/cursor.coffee index 8f7a516f7..443e81f2c 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -22,32 +22,6 @@ class Cursor extends Model @assignId(id) @updateVisibility() - @marker.onDidChange (e) => - @updateVisibility() - {oldHeadScreenPosition, newHeadScreenPosition} = e - {oldHeadBufferPosition, newHeadBufferPosition} = e - {textChanged} = e - return if oldHeadScreenPosition.isEqual(newHeadScreenPosition) - - @goalColumn = null - - movedEvent = - oldBufferPosition: oldHeadBufferPosition - oldScreenPosition: oldHeadScreenPosition - newBufferPosition: newHeadBufferPosition - newScreenPosition: newHeadScreenPosition - textChanged: textChanged - cursor: this - - @emit 'moved', movedEvent if Grim.includeDeprecatedAPIs - @emitter.emit 'did-change-position', movedEvent - @editor.cursorMoved(movedEvent) - @marker.onDidDestroy => - @destroyed = true - @editor.removeCursor(this) - @emit 'destroyed' if Grim.includeDeprecatedAPIs - @emitter.emit 'did-destroy' - @emitter.dispose() destroy: -> @marker.destroy() diff --git a/src/selection.coffee b/src/selection.coffee index 0e565cf33..50a3d12ae 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -22,14 +22,8 @@ class Selection extends Model @cursor.selection = this @decoration = @editor.decorateMarker(@marker, type: 'highlight', class: 'selection') - @marker.onDidChange (e) => @screenRangeChanged(e) - @marker.onDidDestroy => - unless @editor.isDestroyed() - @destroyed = true - @editor.removeSelection(this) - @emit 'destroyed' if Grim.includeDeprecatedAPIs - @emitter.emit 'did-destroy' - @emitter.dispose() + @marker.onDidChange (e) => @markerDidChange(e) + @marker.onDidDestroy => @markerDidDestroy() destroy: -> @marker.destroy() @@ -754,20 +748,48 @@ class Selection extends Model Section: Private Utilities ### - screenRangeChanged: (e) -> - {oldHeadBufferPosition, oldTailBufferPosition} = e - {oldHeadScreenPosition, oldTailScreenPosition} = e + markerDidChange: (e) -> + {oldHeadBufferPosition, oldTailBufferPosition, newHeadBufferPosition} = e + {oldHeadScreenPosition, oldTailScreenPosition, newHeadScreenPosition} = e + {textChanged} = e - eventObject = + @cursor.updateVisibility() + + unless oldHeadScreenPosition.isEqual(newHeadScreenPosition) + @cursor.goalColumn = null + cursorMovedEvent = { + oldBufferPosition: oldHeadBufferPosition + oldScreenPosition: oldHeadScreenPosition + newBufferPosition: newHeadBufferPosition + newScreenPosition: newHeadScreenPosition + textChanged: textChanged + cursor: @cursor + } + @cursor.emitter.emit('did-change-position', cursorMovedEvent) + @editor.cursorMoved(cursorMovedEvent) + + @emitter.emit 'did-change-range' + @editor.selectionRangeChanged( oldBufferRange: new Range(oldHeadBufferPosition, oldTailBufferPosition) oldScreenRange: new Range(oldHeadScreenPosition, oldTailScreenPosition) newBufferRange: @getBufferRange() newScreenRange: @getScreenRange() selection: this + ) - @emit 'screen-range-changed', @getScreenRange() if Grim.includeDeprecatedAPIs - @emitter.emit 'did-change-range' - @editor.selectionRangeChanged(eventObject) + markerDidDestroy: -> + return if @editor.isDestroyed() + + @destroyed = true + @cursor.destroyed = true + + @editor.removeSelection(this) + + @cursor.emitter.emit 'did-destroy' + @emitter.emit 'did-destroy' + + @cursor.emitter.dispose() + @emitter.dispose() finalize: -> @initialScreenRange = null unless @initialScreenRange?.isEqual(@getScreenRange()) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 9dcc7cb62..e1b379c39 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1761,18 +1761,11 @@ class TextEditor extends Model @emitter.emit 'did-add-cursor', cursor cursor - # Remove the given cursor from this editor. - removeCursor: (cursor) -> - _.remove(@cursors, cursor) - @emit 'cursor-removed', cursor if includeDeprecatedAPIs - @emitter.emit 'did-remove-cursor', cursor - moveCursors: (fn) -> fn(cursor) for cursor in @getCursors() @mergeCursors() cursorMoved: (event) -> - @emit 'cursor-moved', event if includeDeprecatedAPIs @emitter.emit 'did-change-cursor-position', event # Merge cursors that have the same screen position @@ -2259,9 +2252,9 @@ class TextEditor extends Model # Remove the given selection. removeSelection: (selection) -> + _.remove(@cursors, selection.cursor) _.remove(@selections, selection) - atom.assert @selections.length > 0, "Removed last selection" - @emit 'selection-removed', selection if includeDeprecatedAPIs + @emitter.emit 'did-remove-cursor', selection.cursor @emitter.emit 'did-remove-selection', selection # Reduce one or more selections to a single empty selection based on the most @@ -2281,7 +2274,6 @@ class TextEditor extends Model # Called by the selection selectionRangeChanged: (event) -> - @emit 'selection-screen-range-changed', event if includeDeprecatedAPIs @emitter.emit 'did-change-selection-range', event createLastSelectionIfNeeded: ->