diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index 295b2fe11694ba69a50a9281645535662ef22619..e90d35a8f77187ebd25a7cef2c8067ea7f3c41d9 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -162,6 +162,14 @@ class ElementPath { ); } + public static isChildOfMinimap(path: Uint8Array): boolean { + return ( + path.length >= 2 + && path[0] === PartFingerprint.OverflowGuard + && path[1] === PartFingerprint.Minimap + ); + } + public static isChildOfContentWidgets(path: Uint8Array): boolean { return ( path.length >= 4 @@ -437,6 +445,7 @@ export class MouseTargetFactory { result = result || MouseTargetFactory._hitTestContentWidget(ctx, request); result = result || MouseTargetFactory._hitTestOverlayWidget(ctx, request); + result = result || MouseTargetFactory._hitTestMinimap(ctx, request); result = result || MouseTargetFactory._hitTestScrollbarSlider(ctx, request); result = result || MouseTargetFactory._hitTestViewZone(ctx, request); result = result || MouseTargetFactory._hitTestMargin(ctx, request); @@ -594,6 +603,15 @@ export class MouseTargetFactory { return this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true); } + private static _hitTestMinimap(ctx: HitTestContext, request: HitTestRequest): MouseTarget { + if (ElementPath.isChildOfMinimap(request.targetPath)) { + 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 _hitTestScrollbarSlider(ctx: HitTestContext, request: HitTestRequest): MouseTarget { if (ElementPath.isChildOfScrollableElement(request.targetPath)) { if (request.target && request.target.nodeType === 1) { diff --git a/src/vs/editor/browser/view/viewPart.ts b/src/vs/editor/browser/view/viewPart.ts index 6fddbabd064ccd9791140e444e72862b239bebd5..c156bba1db5feabdc91f705f4370039ef9fb7415 100644 --- a/src/vs/editor/browser/view/viewPart.ts +++ b/src/vs/editor/browser/view/viewPart.ts @@ -36,6 +36,7 @@ export const enum PartFingerprint { ScrollableElement, TextArea, ViewLines, + Minimap } export class PartFingerprints { diff --git a/src/vs/editor/browser/viewParts/minimap/minimap.ts b/src/vs/editor/browser/viewParts/minimap/minimap.ts index f8ce4c5d8a4ddf8f39f1d08cf5c535afe86bf2aa..6198ecfaec8bb8969e4fa93e3934c39a6067b653 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimap.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimap.ts @@ -6,7 +6,7 @@ 'use strict'; import 'vs/css!./minimap'; -import { ViewPart } from 'vs/editor/browser/view/viewPart'; +import { ViewPart, PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; import { getOrCreateMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer'; @@ -440,6 +440,7 @@ export class Minimap extends ViewPart { this._buffers = null; this._domNode = createFastDomNode(document.createElement('div')); + PartFingerprints.write(this._domNode.domNode, PartFingerprint.Minimap); this._domNode.setClassName('minimap'); this._domNode.setPosition('absolute'); this._domNode.setRight(this._context.configuration.editor.layoutInfo.verticalScrollbarWidth);