diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts index e6f78e622e205cdb3816149be04b893db4e05f90..241ccd8a12681da731b24287cf46d7b2a520e47b 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts @@ -26,6 +26,7 @@ export class TerminalPanel extends Panel { private _actions: IAction[]; private _contextMenuActions: IAction[]; + private _cancelContextMenu: boolean = false; private _currentBaseThemeId: string; private _font: ITerminalFont; private _fontStyleElement: HTMLElement; @@ -159,24 +160,29 @@ export class TerminalPanel extends Panel { } else { terminal.paste(); } - } else { - const standardEvent = new StandardMouseEvent(event); - let anchor: { x: number, y: number } = { x: standardEvent.posx, y: standardEvent.posy }; - this._contextMenuService.showContextMenu({ - getAnchor: () => anchor, - getActions: () => TPromise.as(this._getContextMenuActions()), - getActionsContext: () => this._parentDomElement, - getKeyBinding: (action) => { - const [kb] = this._keybindingService.lookupKeybindings(action.id); - if (kb) { - return kb; - } - return null; - } - }); + this._cancelContextMenu = true; } } })); + this._register(DOM.addDisposableListener(this._parentDomElement, 'contextmenu', (event: MouseEvent) => { + if (!this._cancelContextMenu) { + const standardEvent = new StandardMouseEvent(event); + let anchor: { x: number, y: number } = { x: standardEvent.posx, y: standardEvent.posy }; + this._contextMenuService.showContextMenu({ + getAnchor: () => anchor, + getActions: () => TPromise.as(this._getContextMenuActions()), + getActionsContext: () => this._parentDomElement, + getKeyBinding: (action) => { + const [kb] = this._keybindingService.lookupKeybindings(action.id); + if (kb) { + return kb; + } + return null; + } + }); + } + this._cancelContextMenu = false; + })); this._register(DOM.addDisposableListener(this._parentDomElement, 'click', (event) => { if (this._terminalService.terminalInstances.length === 0) { return;