mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-28 04:23:32 +01:00
Merge pull request #13199 from Microsoft/ben/tab-menu
allow to contribute to the tab context menu
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user