From c62b6fa7fd8e2f33f11d31c464fcd61b4ce17192 Mon Sep 17 00:00:00 2001 From: Peng Lyu Date: Tue, 11 Sep 2018 16:40:32 -0700 Subject: [PATCH] Fix #58117. Mouse clicking on whitespace near the selection should shrink the selection. --- src/vs/editor/contrib/dnd/dnd.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/vs/editor/contrib/dnd/dnd.ts b/src/vs/editor/contrib/dnd/dnd.ts index e639b6aea8f..17acbe14b30 100644 --- a/src/vs/editor/contrib/dnd/dnd.ts +++ b/src/vs/editor/contrib/dnd/dnd.ts @@ -20,6 +20,7 @@ import { DragAndDropCommand } from 'vs/editor/contrib/dnd/dragAndDropCommand'; import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; import { IModelDeltaDecoration } from 'vs/editor/common/model'; import { IMouseEvent } from 'vs/base/browser/mouseEvent'; +import { IEmptyContentData } from 'vs/editor/browser/controller/mouseTarget'; function hasTriggerModifier(e: IKeyboardEvent | IMouseEvent): boolean { if (isMacintosh) { @@ -38,6 +39,7 @@ export class DragAndDropController implements editorCommon.IEditorContribution { private _dragSelection: Selection; private _dndDecorationIds: string[]; private _mouseDown: boolean; + private _mouseDownInfo: IEditorMouseEvent; private _modiferPressed: boolean; static TRIGGER_KEY_VALUE = isMacintosh ? KeyCode.Alt : KeyCode.Ctrl; @@ -57,6 +59,7 @@ export class DragAndDropController implements editorCommon.IEditorContribution { this._toUnhook.push(this._editor.onDidBlurEditorWidget(() => this.onEditorBlur())); this._dndDecorationIds = []; this._mouseDown = false; + this._mouseDownInfo = null; this._modiferPressed = false; this._dragSelection = null; } @@ -102,10 +105,12 @@ export class DragAndDropController implements editorCommon.IEditorContribution { private _onEditorMouseDown(mouseEvent: IEditorMouseEvent): void { this._mouseDown = true; + this._mouseDownInfo = mouseEvent; } private _onEditorMouseUp(mouseEvent: IEditorMouseEvent): void { this._mouseDown = false; + this._mouseDownInfo = null; // Whenever users release the mouse, the drag and drop operation should finish and the cursor should revert to text. this._editor.updateOptions({ mouseStyle: 'text' @@ -113,6 +118,19 @@ export class DragAndDropController implements editorCommon.IEditorContribution { } private _onEditorMouseDrag(mouseEvent: IEditorMouseEvent): void { + if (!this._mouseDownInfo) { + return; + } + + if (this._mouseDownInfo.target.type === MouseTargetType.CONTENT_EMPTY) { + const epsilon = this._editor.getConfiguration().fontInfo.typicalHalfwidthCharacterWidth / 2; + const data = mouseEvent.target.detail; + if (!data || data.isAfterLines || typeof data.horizontalDistanceToText !== 'number' || data.horizontalDistanceToText >= epsilon) { + this._mouseDownInfo = null; // clear the mousedown info then we can early exit for this drag listener. + return; + } + } + let target = mouseEvent.target; if (this._dragSelection === null) { -- GitLab