diff --git a/src/vs/base/browser/ui/list/listView.ts b/src/vs/base/browser/ui/list/listView.ts index 3a04a40662c6a9b3d5e178e597a3cccead5b506d..c3e56260d46ba65f5fd7c0e0bf1761bd7cf23a0f 100644 --- a/src/vs/base/browser/ui/list/listView.ts +++ b/src/vs/base/browser/ui/list/listView.ts @@ -87,6 +87,7 @@ export class ListView implements IDisposable { this.scrollableElement = new ScrollableElement(this.rowsContainer, { canUseTranslate3d: false, + alwaysConsumeMouseWheel: true, horizontal: ScrollbarVisibility.Hidden, vertical: ScrollbarVisibility.Auto, useShadows: getOrDefault(options, o => o.useShadows, DefaultOptions.useShadows), diff --git a/src/vs/base/browser/ui/scrollbar/scrollableElement.ts b/src/vs/base/browser/ui/scrollbar/scrollableElement.ts index 6677ae3a6c41fe16289c6d7c94019c13c4b2c610..f42246f9cf5625521b5b39eb3768f12672957b73 100644 --- a/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +++ b/src/vs/base/browser/ui/scrollbar/scrollableElement.ts @@ -285,8 +285,10 @@ export class ScrollableElement extends Widget { } } - e.preventDefault(); - e.stopPropagation(); + if (this._options.alwaysConsumeMouseWheel || this._shouldRender) { + e.preventDefault(); + e.stopPropagation(); + } } private _onDidScroll(e:ScrollEvent): void { @@ -416,6 +418,7 @@ function resolveOptions(opts: ScrollableElementCreationOptions): ScrollableEleme useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true), handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true), flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false), + alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false), scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false), mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1), arrowSize: (typeof opts.arrowSize !== 'undefined' ? opts.arrowSize : 11), diff --git a/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts b/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts index 72f519e48ad595c906d7a4b77c44e78aa7628eb7..1db0602cde26049d03d55563f80e588bbb31b207 100644 --- a/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +++ b/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts @@ -40,6 +40,11 @@ export interface ScrollableElementCreationOptions { * Defaults to false. */ scrollYToX?: boolean; + /** + * Always consume mouse wheel events, even when scrolling is no longer possible. + * Defaults to false. + */ + alwaysConsumeMouseWheel?: boolean; /** * A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events. * Defaults to 1. @@ -117,6 +122,7 @@ export interface ScrollableElementResolvedOptions { handleMouseWheel: boolean; flipAxes: boolean; scrollYToX: boolean; + alwaysConsumeMouseWheel: boolean; mouseWheelScrollSensitivity: number; arrowSize: number; listenOnDomNode: HTMLElement; diff --git a/src/vs/base/parts/tree/browser/treeView.ts b/src/vs/base/parts/tree/browser/treeView.ts index eec80162bf27add6d37bb62d1f2fcc01fa444944..3a830ba9c78643eda915d6d7924cc22acd62209b 100644 --- a/src/vs/base/parts/tree/browser/treeView.ts +++ b/src/vs/base/parts/tree/browser/treeView.ts @@ -489,6 +489,7 @@ export class TreeView extends HeightMap { this.wrapper.className = 'monaco-tree-wrapper'; this.scrollableElement = new ScrollableElement(this.wrapper, { canUseTranslate3d: false, + alwaysConsumeMouseWheel: true, horizontal: ScrollbarVisibility.Hidden, vertical: (typeof context.options.verticalScrollMode !== 'undefined' ? context.options.verticalScrollMode : ScrollbarVisibility.Auto), useShadows: context.options.useShadows,