Skip to content

Commit dd8f681

Browse files
authored
Fix: prevent view shift when enable minimap with right-click on the scrollbar (microsoft#210510)
1 parent e4728e7 commit dd8f681

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -218,14 +218,19 @@ export abstract class AbstractScrollbar extends Widget {
218218
offsetY = e.pageY - domNodePosition.top;
219219
}
220220

221-
const offset = this._pointerDownRelativePosition(offsetX, offsetY);
222-
this._setDesiredScrollPositionNow(
223-
this._scrollByPage
224-
? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)
225-
: this._scrollbarState.getDesiredScrollPositionFromOffset(offset)
226-
);
221+
const isMouse = (e.pointerType === 'mouse');
222+
const isLeftClick = (e.button === 0);
223+
224+
if (isLeftClick || !isMouse) {
225+
const offset = this._pointerDownRelativePosition(offsetX, offsetY);
226+
this._setDesiredScrollPositionNow(
227+
this._scrollByPage
228+
? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)
229+
: this._scrollbarState.getDesiredScrollPositionFromOffset(offset)
230+
);
231+
}
227232

228-
if (e.button === 0) {
233+
if (isLeftClick) {
229234
// left button
230235
e.preventDefault();
231236
this._sliderPointerDown(e);

src/vs/editor/browser/viewParts/minimap/minimap.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,6 +1237,9 @@ class InnerMinimap extends Disposable {
12371237
this._pointerDownListener = dom.addStandardDisposableListener(this._domNode.domNode, dom.EventType.POINTER_DOWN, (e) => {
12381238
e.preventDefault();
12391239

1240+
const isMouse = (e.pointerType === 'mouse');
1241+
const isLeftClick = (e.button === 0);
1242+
12401243
const renderMinimap = this._model.options.renderMinimap;
12411244
if (renderMinimap === RenderMinimap.None) {
12421245
return;
@@ -1245,22 +1248,25 @@ class InnerMinimap extends Disposable {
12451248
return;
12461249
}
12471250
if (this._model.options.size !== 'proportional') {
1248-
if (e.button === 0 && this._lastRenderData) {
1251+
if (isLeftClick && this._lastRenderData) {
12491252
// pretend the click occurred in the center of the slider
12501253
const position = dom.getDomNodePagePosition(this._slider.domNode);
12511254
const initialPosY = position.top + position.height / 2;
12521255
this._startSliderDragging(e, initialPosY, this._lastRenderData.renderedLayout);
12531256
}
12541257
return;
12551258
}
1256-
const minimapLineHeight = this._model.options.minimapLineHeight;
1257-
const internalOffsetY = (this._model.options.canvasInnerHeight / this._model.options.canvasOuterHeight) * e.offsetY;
1258-
const lineIndex = Math.floor(internalOffsetY / minimapLineHeight);
12591259

1260-
let lineNumber = lineIndex + this._lastRenderData.renderedLayout.startLineNumber - this._lastRenderData.renderedLayout.topPaddingLineCount;
1261-
lineNumber = Math.min(lineNumber, this._model.getLineCount());
1260+
if (isLeftClick || !isMouse) {
1261+
const minimapLineHeight = this._model.options.minimapLineHeight;
1262+
const internalOffsetY = (this._model.options.canvasInnerHeight / this._model.options.canvasOuterHeight) * e.offsetY;
1263+
const lineIndex = Math.floor(internalOffsetY / minimapLineHeight);
12621264

1263-
this._model.revealLineNumber(lineNumber);
1265+
let lineNumber = lineIndex + this._lastRenderData.renderedLayout.startLineNumber - this._lastRenderData.renderedLayout.topPaddingLineCount;
1266+
lineNumber = Math.min(lineNumber, this._model.getLineCount());
1267+
1268+
this._model.revealLineNumber(lineNumber);
1269+
}
12641270
});
12651271

12661272
this._sliderPointerMoveMonitor = new GlobalPointerMoveMonitor();

0 commit comments

Comments
 (0)