提交 f1fb2794 编写于 作者: R rebornix

use some closure data to avoid blocking click-on-selection

上级 dc710448
......@@ -348,6 +348,7 @@ class MouseDownOperation extends Disposable {
private _mouseDragThenMoveEventHandler: EventGateKeeper<EditorMouseEvent>;
private _currentSelection: Selection;
private _dragTargetPosition: Position;
private _mouseState: MouseDownState;
private _onScrollTimeout: TimeoutTimer;
......@@ -410,6 +411,7 @@ class MouseDownOperation extends Disposable {
return;
}
this._dispatchMouse(position, MouseDownEventType.Select);
}
......@@ -423,6 +425,7 @@ class MouseDownOperation extends Disposable {
return;
}
this._dragTargetPosition = position.position;
this._dispatchMouse(position, MouseDownEventType.Drag);
}
......@@ -449,12 +452,13 @@ class MouseDownOperation extends Disposable {
&& this._currentSelection.containsPosition(position.position) // single click on a selection
) {
this._isActive = true;
this._dragTargetPosition = position.position;
this._mouseMoveMonitor.startMonitoring(
createMouseMoveEventMerger(null),
this._mouseDragThenMoveEventHandler.handler,
() => {
this._viewController.dragTo('mouse', position.position);
this._viewController.dragTo('mouse', this._dragTargetPosition);
this._stop();
}
);
......
......@@ -1357,12 +1357,19 @@ export class Cursor extends EventEmitter {
return false;
}
var lastAddedCursor = this.cursors.getLastAddedCursor();
let dragTargetPosition = ctx.eventData.position;
if (selections[0].containsPosition(dragTargetPosition)) {
this._invokeForAll(ctx, (cursorIndex: number, oneCursor: OneCursor, oneCtx: IOneCursorOperationContext) => {
if (oneCursor.modelState.selection.containsPosition(dragTargetPosition)) {
return OneCursorOp.moveTo(oneCursor, false, ctx.eventData.position, ctx.eventData.viewPosition, ctx.eventSource, oneCtx);
}
return false;
});
if (selections[0].containsPosition(lastAddedCursor.modelState.position)) {
return false;
return true;
}
var lastAddedCursor = this.cursors.getLastAddedCursor();
this._invokeForAll(ctx, (cursorIndex: number, oneCursor: OneCursor, oneCtx: IOneCursorOperationContext) => {
if (oneCursor !== lastAddedCursor) {
return this._doApplyEdit(cursorIndex, oneCursor, oneCtx, () => new EditOperationResult(new DragAndDropCommand(oneCursor.modelState.selection, lastAddedCursor.modelState.position), {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册