mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-14 20:34:30 +01:00
Fix #58634. Drag and drop event is emitted only when clicking on real selections. A better fix for #58117.
This commit is contained in:
@@ -353,6 +353,7 @@ class MouseDownOperation extends Disposable {
|
||||
&& e.detail < 2 // only single click on a selection can work
|
||||
&& !this._isActive // the mouse is not down yet
|
||||
&& !this._currentSelection.isEmpty() // we don't drag single cursor
|
||||
&& (position.type === editorBrowser.MouseTargetType.CONTENT_TEXT) // single click on text
|
||||
&& this._currentSelection.containsPosition(position.position) // single click on a selection
|
||||
) {
|
||||
this._mouseState.isDragAndDrop = true;
|
||||
|
||||
@@ -20,7 +20,6 @@ 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';
|
||||
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
|
||||
|
||||
function hasTriggerModifier(e: IKeyboardEvent | IMouseEvent): boolean {
|
||||
@@ -40,7 +39,6 @@ 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;
|
||||
|
||||
@@ -60,7 +58,6 @@ 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;
|
||||
}
|
||||
@@ -106,12 +103,10 @@ 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'
|
||||
@@ -119,19 +114,6 @@ 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 = <IEmptyContentData>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) {
|
||||
|
||||
Reference in New Issue
Block a user