From f6f188cea819e8b51a17a531d0bd5ce29a043ac3 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 4 Oct 2016 11:36:57 +0200 Subject: [PATCH 1/2] allow to contribute to the tab context menu --- .../platform/actions/browser/menusExtensionPoint.ts | 1 + src/vs/platform/actions/common/actions.ts | 3 ++- .../workbench/browser/parts/editor/titleControl.ts | 13 +++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/vs/platform/actions/browser/menusExtensionPoint.ts b/src/vs/platform/actions/browser/menusExtensionPoint.ts index 3eb906cc83d..25be267fc03 100644 --- a/src/vs/platform/actions/browser/menusExtensionPoint.ts +++ b/src/vs/platform/actions/browser/menusExtensionPoint.ts @@ -30,6 +30,7 @@ namespace schema { case 'editor/title': return MenuId.EditorTitle; case 'editor/context': return MenuId.EditorContext; case 'explorer/context': return MenuId.ExplorerContext; + case 'editor/tab': return MenuId.EditorTab; } } diff --git a/src/vs/platform/actions/common/actions.ts b/src/vs/platform/actions/common/actions.ts index 250504ec6eb..3de63bfcab8 100644 --- a/src/vs/platform/actions/common/actions.ts +++ b/src/vs/platform/actions/common/actions.ts @@ -39,7 +39,8 @@ export interface IMenuItem { export enum MenuId { EditorTitle = 1, EditorContext = 2, - ExplorerContext = 3 + ExplorerContext = 3, + EditorTab = 4 } export const IMenuService = createDecorator('menuService'); diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index 436e2b5b14d..eda18501325 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -417,6 +417,12 @@ export abstract class TitleControl implements ITitleAreaControl { } protected onContextMenu(identifier: IEditorIdentifier, e: Event, node: HTMLElement): void { + + // Update the resource context + const currentContext = this.resourceContext.get(); + this.resourceContext.set(identifier.editor && getResource(identifier.editor)); + + // Find target anchor let anchor: HTMLElement | { x: number, y: number } = node; if (e instanceof MouseEvent) { const event = new StandardMouseEvent(e); @@ -434,6 +440,9 @@ export abstract class TitleControl implements ITitleAreaControl { } return null; + }, + onHide: (cancel) => { + this.resourceContext.set(currentContext); // restore previous context } }); } @@ -462,6 +471,10 @@ export abstract class TitleControl implements ITitleAreaControl { actions.push(new Separator(), this.pinEditorAction); } + const titleBarMenu = this.menuService.createMenu(MenuId.EditorTab, this.contextKeyService); + fillInActions(titleBarMenu, actions); + titleBarMenu.dispose(); // not needed anymore + return actions; } From 2d5c428787399861c19601fa1d67592648799559 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 4 Oct 2016 13:43:09 +0200 Subject: [PATCH 2/2] polish based on feedback --- .../platform/actions/browser/menusExtensionPoint.ts | 7 ++++++- src/vs/platform/actions/common/actions.ts | 2 +- .../workbench/browser/parts/editor/titleControl.ts | 12 ++++++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/vs/platform/actions/browser/menusExtensionPoint.ts b/src/vs/platform/actions/browser/menusExtensionPoint.ts index 25be267fc03..8c9d818d1b1 100644 --- a/src/vs/platform/actions/browser/menusExtensionPoint.ts +++ b/src/vs/platform/actions/browser/menusExtensionPoint.ts @@ -30,7 +30,7 @@ namespace schema { case 'editor/title': return MenuId.EditorTitle; case 'editor/context': return MenuId.EditorContext; case 'explorer/context': return MenuId.ExplorerContext; - case 'editor/tab': return MenuId.EditorTab; + case 'editortab/context': return MenuId.EditorTabContext; } } @@ -98,6 +98,11 @@ namespace schema { type: 'array', items: menuItem }, + 'editortab/context': { + description: localize('menus.editorTabContext', "The editor tabs context menu"), + type: 'array', + items: menuItem + }, 'explorer/context': { description: localize('menus.explorerContext', "The file explorer context menu"), type: 'array', diff --git a/src/vs/platform/actions/common/actions.ts b/src/vs/platform/actions/common/actions.ts index 3de63bfcab8..5e517209238 100644 --- a/src/vs/platform/actions/common/actions.ts +++ b/src/vs/platform/actions/common/actions.ts @@ -40,7 +40,7 @@ export enum MenuId { EditorTitle = 1, EditorContext = 2, ExplorerContext = 3, - EditorTab = 4 + EditorTabContext = 4 } export const IMenuService = createDecorator('menuService'); diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index eda18501325..6bbe529c0d5 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -35,7 +35,7 @@ import {IContextKeyService} from 'vs/platform/contextkey/common/contextkey'; import {CloseEditorsInGroupAction, SplitEditorAction, CloseEditorAction, KeepEditorAction, CloseOtherEditorsInGroupAction, CloseRightEditorsInGroupAction, ShowEditorsInGroupAction} from 'vs/workbench/browser/parts/editor/editorActions'; import {IDisposable, dispose} from 'vs/base/common/lifecycle'; import {createActionItem, fillInActions} from 'vs/platform/actions/browser/menuItemActionItem'; -import {IMenuService, MenuId} from 'vs/platform/actions/common/actions'; +import {IMenuService, MenuId, IMenu} from 'vs/platform/actions/common/actions'; import {ResourceContextKey} from 'vs/platform/actions/common/resourceContextKey'; export interface IToolbarActions { @@ -90,6 +90,8 @@ export abstract class TitleControl implements ITitleAreaControl { private resourceContext: ResourceContextKey; private disposeOnEditorActions: IDisposable[] = []; + private contextMenu: IMenu; + constructor( @IContextMenuService protected contextMenuService: IContextMenuService, @IInstantiationService protected instantiationService: IInstantiationService, @@ -114,6 +116,9 @@ export abstract class TitleControl implements ITitleAreaControl { this.resourceContext = instantiationService.createInstance(ResourceContextKey); + this.contextMenu = this.menuService.createMenu(MenuId.EditorTabContext, this.contextKeyService); + this.toDispose.push(this.contextMenu); + this.initActions(); this.registerListeners(); } @@ -471,9 +476,8 @@ export abstract class TitleControl implements ITitleAreaControl { actions.push(new Separator(), this.pinEditorAction); } - const titleBarMenu = this.menuService.createMenu(MenuId.EditorTab, this.contextKeyService); - fillInActions(titleBarMenu, actions); - titleBarMenu.dispose(); // not needed anymore + // Fill in contributed actions + fillInActions(this.contextMenu, actions); return actions; }