diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index 1857f1611d69104213a246c60cf409d6dad2f4b1..e1211b9092f7ca39f40f2a01bda65cf698546271 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -437,6 +437,7 @@ export class MouseTargetFactory { result = result || MouseTargetFactory._hitTestContentWidget(ctx, request); result = result || MouseTargetFactory._hitTestOverlayWidget(ctx, request); + result = result || MouseTargetFactory._hitTestScrollbarSlider(ctx, request); result = result || MouseTargetFactory._hitTestViewZone(ctx, request); result = result || MouseTargetFactory._hitTestMargin(ctx, request); result = result || MouseTargetFactory._hitTestViewCursor(ctx, request); @@ -584,6 +585,20 @@ export class MouseTargetFactory { return this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true); } + private static _hitTestScrollbarSlider(ctx: HitTestContext, request: HitTestRequest): MouseTarget { + if (ElementPath.isChildOfScrollableElement(request.targetPath)) { + if (request.target && request.target.nodeType === 1) { + let className = request.target.className; + if (className && /\b(slider|scrollbar)\b/.test(className)) { + const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset); + const maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber); + return request.fulfill(MouseTargetType.SCROLLBAR, new Position(possibleLineNumber, maxColumn)); + } + } + } + return null; + } + private static _hitTestScrollbar(ctx: HitTestContext, request: HitTestRequest): MouseTarget { // Is it the overview ruler? // Is it a child of the scrollable element?