提交 11ca1c7b 编写于 作者: J Johannes Rieken 提交者: GitHub

Merge pull request #13199 from Microsoft/ben/tab-menu

allow to contribute to the tab context menu
......@@ -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 'editortab/context': return MenuId.EditorTabContext;
}
}
......@@ -97,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',
......
......@@ -39,7 +39,8 @@ export interface IMenuItem {
export enum MenuId {
EditorTitle = 1,
EditorContext = 2,
ExplorerContext = 3
ExplorerContext = 3,
EditorTabContext = 4
}
export const IMenuService = createDecorator<IMenuService>('menuService');
......
......@@ -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();
}
......@@ -417,6 +422,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 +445,9 @@ export abstract class TitleControl implements ITitleAreaControl {
}
return null;
},
onHide: (cancel) => {
this.resourceContext.set(currentContext); // restore previous context
}
});
}
......@@ -462,6 +476,9 @@ export abstract class TitleControl implements ITitleAreaControl {
actions.push(new Separator(), this.pinEditorAction);
}
// Fill in contributed actions
fillInActions(this.contextMenu, actions);
return actions;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册