提交 4ffafbdf 编写于 作者: E Eric Amodio

Fixes #7749 - Resolves the layer break

Isolates the editor from knowing about specific widgets
上级 d85af395
......@@ -102,7 +102,8 @@ export interface IPointerHandlerHelper {
getLineNumberAtVerticalOffset(verticalOffset: number): number;
getVerticalOffsetForLineNumber(lineNumber: number): number;
getWhitespaceAtVerticalOffset(verticalOffset:number): editorCommon.IViewWhitespaceViewportData;
shouldSuppressMouseDownOnViewZone(viewZoneId:number): boolean;
shouldSuppressMouseDownOnViewZone(viewZoneId: number): boolean;
shouldSuppressMouseDownOnWidget(widgetId: string): boolean;
/**
* Decode an Editor.IPosition from a rendered dom node
......@@ -302,7 +303,7 @@ export class MouseHandler extends ViewEventHandler implements IDisposable {
this._mouseDownOperation.start(t.type, e);
e.preventDefault();
}
} else if (targetIsWidget && (<string>t.detail).indexOf('codeLensWidget') === 0) {
} else if (targetIsWidget && this.viewHelper.shouldSuppressMouseDownOnWidget(<string>t.detail)) {
focus();
e.preventDefault();
}
......
......@@ -275,6 +275,8 @@ export interface IContentWidget {
* Render this content widget in a location where it could overflow the editor's view dom node.
*/
allowEditorOverflow?: boolean;
suppressMouseDown?: boolean;
/**
* Get a unique identifier of the content widget.
*/
......
......@@ -358,7 +358,12 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
}
return this.viewZones.shouldSuppressMouseDownOnViewZone(viewZoneId);
},
shouldSuppressMouseDownOnWidget: (widgetId: string) => {
if (this._isDisposed) {
throw new Error('ViewImpl.pointerHandler.shouldSuppressMouseDownOnWidget: View is disposed');
}
return this.contentWidgets.shouldSuppressMouseDownOnWidget(widgetId);
},
getPositionFromDOMInfo: (spanNode: HTMLElement, offset: number) => {
if (this._isDisposed) {
throw new Error('ViewImpl.pointerHandler.getPositionFromDOMInfo: View is disposed');
......
......@@ -185,6 +185,14 @@ export class ViewContentWidgets extends ViewPart {
}
}
public shouldSuppressMouseDownOnWidget(widgetId: string): boolean {
if (this._widgets.hasOwnProperty(widgetId)) {
let widgetData = this._widgets[widgetId];
return widgetData.widget.suppressMouseDown;
}
return false;
}
private _layoutBoxInViewport(position:Position, domNode:HTMLElement, ctx:IRenderingContext): IBoxLayoutResult {
let visibleRange = ctx.visibleRangeForPosition(position);
......
......@@ -50,6 +50,8 @@ class CodeLensContentWidget implements editorBrowser.IContentWidget {
private static ID: number = 0;
public suppressMouseDown: boolean;
private _id: string;
private _domNode: HTMLElement;
......@@ -65,6 +67,8 @@ class CodeLensContentWidget implements editorBrowser.IContentWidget {
this._id = 'codeLensWidget' + (++CodeLensContentWidget.ID);
this._editor = editor;
this.suppressMouseDown = true;
this.setSymbolRange(symbolRange);
this._domNode = document.createElement('span');
......
......@@ -3434,6 +3434,7 @@ declare module monaco.editor {
* Render this content widget in a location where it could overflow the editor's view dom node.
*/
allowEditorOverflow?: boolean;
suppressMouseDown?: boolean;
/**
* Get a unique identifier of the content widget.
*/
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册