diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index b4b0f12a8b8..d2779a8be1f 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -495,15 +495,17 @@ export class MouseTargetFactory { const request = new HitTestRequest(ctx, editorPos, pos, relativePos, target); try { const r = MouseTargetFactory._createMouseTarget(ctx, request, false); - // console.log(MouseTarget.toString(r)); if (r.type === MouseTargetType.CONTENT_TEXT) { // Snap to the nearest soft tab boundary if atomic soft tabs are enabled. if (ctx.stickyTabStops && r.position !== null) { const position = MouseTargetFactory._snapToSoftTabBoundary(r.position, ctx.viewModel); - return request.fulfillContentText(position, r.range, r.detail); + const range = EditorRange.fromPositions(position, position).plusRange(r.range); + return request.fulfillContentText(position, range, r.detail); } } + + // console.log(MouseTarget.toString(r)); return r; } catch (err) { // console.log(err); @@ -782,12 +784,10 @@ export class MouseTargetFactory { const lineNumber = pos.lineNumber; const column = pos.column; - const mouseContentHorizontalOffset = Math.floor(request.mouseContentHorizontalOffset); - const lineWidth = ctx.getLineWidth(lineNumber); - if (mouseContentHorizontalOffset > lineWidth) { - const detail = createEmptyContentDataInLines(mouseContentHorizontalOffset - lineWidth); + if (request.mouseContentHorizontalOffset > lineWidth) { + const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth); return request.fulfillContentEmpty(pos, detail); } @@ -799,7 +799,7 @@ export class MouseTargetFactory { const columnHorizontalOffset = visibleRange.left; - if (mouseContentHorizontalOffset === columnHorizontalOffset) { + if (Math.abs(request.mouseContentHorizontalOffset - columnHorizontalOffset) < 1) { return request.fulfillContentText(pos, null, { mightBeForeignElement: !!injectedText, injectedText }); } @@ -833,15 +833,15 @@ export class MouseTargetFactory { for (let i = 1; i < points.length; i++) { const prev = points[i - 1]; const curr = points[i]; - if (prev.offset <= mouseContentHorizontalOffset && mouseContentHorizontalOffset <= curr.offset) { + if (prev.offset <= request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset <= curr.offset) { rng = new EditorRange(lineNumber, prev.column, lineNumber, curr.column); // See https://github.com/microsoft/vscode/issues/152819 // Due to the use of zwj, the browser's hit test result is skewed towards the left // Here we try to correct that if the mouse horizontal offset is closer to the right than the left - const prevDelta = Math.abs(prev.offset - mouseContentHorizontalOffset); - const nextDelta = Math.abs(curr.offset - mouseContentHorizontalOffset); + const prevDelta = Math.abs(prev.offset - request.mouseContentHorizontalOffset); + const nextDelta = Math.abs(curr.offset - request.mouseContentHorizontalOffset); pos = ( prevDelta < nextDelta