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

allow to contribute to the tab context menu
This commit is contained in:
Johannes Rieken
2016-10-04 16:01:11 +02:00
committed by GitHub
3 changed files with 26 additions and 2 deletions

View File

@@ -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;
}