diff --git a/packages/core/src/electron-browser/menu/electron-context-menu-renderer.ts b/packages/core/src/electron-browser/menu/electron-context-menu-renderer.ts index 56769d0985c0f..5e15a4a95f9e8 100644 --- a/packages/core/src/electron-browser/menu/electron-context-menu-renderer.ts +++ b/packages/core/src/electron-browser/menu/electron-context-menu-renderer.ts @@ -38,7 +38,7 @@ export class ElectronContextMenuRenderer implements ContextMenuRenderer { // native context menu stops the event loop, so there is no keyboard events this.context.resetAltPressed(); if (onHide) { - onHide(); + menu.once('menu-will-close', () => onHide()); } } diff --git a/packages/debug/src/browser/editor/debug-editor-model.ts b/packages/debug/src/browser/editor/debug-editor-model.ts index 090b2cbcd49e5..d91728fc2bab9 100644 --- a/packages/debug/src/browser/editor/debug-editor-model.ts +++ b/packages/debug/src/browser/editor/debug-editor-model.ts @@ -244,16 +244,20 @@ export class DebugEditorModel implements Disposable { get position(): monaco.Position { return this._position || this.editor.getControl().getPosition()!; } + get breakpoint(): DebugBreakpoint | undefined { - return this.getBreakpoint(); + // Use stored position or control position + return this.getBreakpoint(this.position); } - protected getBreakpoint(position: monaco.Position = this.position): DebugBreakpoint | undefined { + protected getBreakpoint(position: monaco.Position): DebugBreakpoint | undefined { return this.sessions.getBreakpoint(this.uri, position.lineNumber); } + toggleBreakpoint(): void { - this.doToggleBreakpoint(); + // Use stored position or control position + this.doToggleBreakpoint(this.position); } - protected doToggleBreakpoint(position: monaco.Position = this.position): void { + protected doToggleBreakpoint(position: monaco.Position): void { const breakpoint = this.getBreakpoint(position); if (breakpoint) { breakpoint.remove(); @@ -285,10 +289,11 @@ export class DebugEditorModel implements Disposable { protected handleMouseDown(event: monaco.editor.IEditorMouseEvent): void { if (event.target && event.target.type === monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN) { if (event.event.rightButton) { - this._position = event.target.position!; - this.contextMenu.render(DebugEditorModel.CONTEXT_MENU, event.event.browserEvent, () => - setTimeout(() => this._position = undefined) - ); + this.editor.focus(); + setTimeout(() => { + this._position = event.target.position!; + this.contextMenu.render(DebugEditorModel.CONTEXT_MENU, event.event.browserEvent); + }); } else { this.doToggleBreakpoint(event.target.position!); } diff --git a/packages/debug/src/browser/editor/debug-editor-service.ts b/packages/debug/src/browser/editor/debug-editor-service.ts index 9b4ea52ad4908..d4a067cdb92cf 100644 --- a/packages/debug/src/browser/editor/debug-editor-service.ts +++ b/packages/debug/src/browser/editor/debug-editor-service.ts @@ -143,6 +143,7 @@ export class DebugEditorService { model.breakpointWidget.show({ breakpoint, context }); } else { model.breakpointWidget.show({ + // Use position stored by context menu or current editor position position: model.position, context });