From ffd91480d7c8cdc38bec9f3476a82a0dc0c507d1 Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 19 Apr 2018 15:52:36 +0200 Subject: [PATCH] context menu on title area is specific for sidebarPart thus move it there fixes #46237 --- .../workbench/browser/parts/compositePart.ts | 29 ++----------------- .../browser/parts/sidebar/sidebarPart.ts | 27 ++++++++++++++++- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/vs/workbench/browser/parts/compositePart.ts b/src/vs/workbench/browser/parts/compositePart.ts index 5e919a5668c..4111789e023 100644 --- a/src/vs/workbench/browser/parts/compositePart.ts +++ b/src/vs/workbench/browser/parts/compositePart.ts @@ -15,7 +15,6 @@ import * as strings from 'vs/base/common/strings'; import { Emitter } from 'vs/base/common/event'; import * as types from 'vs/base/common/types'; import * as errors from 'vs/base/common/errors'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; import { ToolBar } from 'vs/base/browser/ui/toolbar/toolbar'; import { IActionItem, ActionsOrientation } from 'vs/base/browser/ui/actionbar/actionbar'; import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar'; @@ -36,7 +35,7 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { attachProgressBarStyler } from 'vs/platform/theme/common/styler'; import { INotificationService } from 'vs/platform/notification/common/notification'; -import { Dimension, EventType } from 'vs/base/browser/dom'; +import { Dimension } from 'vs/base/browser/dom'; export interface ICompositeTitleLabel { @@ -74,7 +73,7 @@ export abstract class CompositePart extends Part { private telemetryService: ITelemetryService, protected contextMenuService: IContextMenuService, protected partService: IPartService, - private keybindingService: IKeybindingService, + protected keybindingService: IKeybindingService, protected instantiationService: IInstantiationService, themeService: IThemeService, protected readonly registry: CompositeRegistry, @@ -408,8 +407,6 @@ export abstract class CompositePart extends Part { 'class': ['composite', 'title'] }); - $(titleArea).on(EventType.CONTEXT_MENU, (e: MouseEvent) => this.onTitleAreaContextMenu(new StandardMouseEvent(e))); - // Left Title Label this.titleLabel = this.createTitleLabel(titleArea.getHTMLElement()); @@ -456,27 +453,7 @@ export abstract class CompositePart extends Part { this.titleLabel.updateStyles(); } - private onTitleAreaContextMenu(event: StandardMouseEvent): void { - if (this.activeComposite) { - const contextMenuActions = this.getTitleAreaContextMenuActions(); - if (contextMenuActions.length) { - const anchor: { x: number, y: number } = { x: event.posx, y: event.posy }; - this.contextMenuService.showContextMenu({ - getAnchor: () => anchor, - getActions: () => TPromise.as(contextMenuActions), - getActionItem: action => this.actionItemProvider(action as Action), - actionRunner: this.activeComposite.getActionRunner(), - getKeyBinding: action => this.keybindingService.lookupKeybinding(action.id) - }); - } - } - } - - protected getTitleAreaContextMenuActions(): IAction[] { - return this.activeComposite ? this.activeComposite.getContextMenuActions() : []; - } - - private actionItemProvider(action: Action): IActionItem { + protected actionItemProvider(action: Action): IActionItem { // Check Active Composite if (this.activeComposite) { diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts index 172dfe24ff2..d4826a2b8f6 100644 --- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts @@ -26,8 +26,9 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { contrastBorder } from 'vs/platform/theme/common/colorRegistry'; import { SIDE_BAR_TITLE_FOREGROUND, SIDE_BAR_BACKGROUND, SIDE_BAR_FOREGROUND, SIDE_BAR_BORDER } from 'vs/workbench/common/theme'; import { INotificationService } from 'vs/platform/notification/common/notification'; -import { Dimension } from 'vs/base/browser/dom'; +import { Dimension, EventType } from 'vs/base/browser/dom'; import { $ } from 'vs/base/browser/builder'; +import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; export class SidebarPart extends CompositePart { @@ -76,6 +77,13 @@ export class SidebarPart extends CompositePart { return this._onDidCompositeClose.event as Event; } + public createTitleArea(parent: HTMLElement): HTMLElement { + const titleArea = super.createTitleArea(parent); + $(titleArea).on(EventType.CONTEXT_MENU, (e: MouseEvent) => this.onTitleAreaContextMenu(new StandardMouseEvent(e))); + + return titleArea; + } + public updateStyles(): void { super.updateStyles(); @@ -133,6 +141,23 @@ export class SidebarPart extends CompositePart { return super.layout(dimension); } + + private onTitleAreaContextMenu(event: StandardMouseEvent): void { + const activeViewlet = this.getActiveViewlet() as Viewlet; + if (activeViewlet) { + const contextMenuActions = activeViewlet ? activeViewlet.getContextMenuActions() : []; + if (contextMenuActions.length) { + const anchor: { x: number, y: number } = { x: event.posx, y: event.posy }; + this.contextMenuService.showContextMenu({ + getAnchor: () => anchor, + getActions: () => TPromise.as(contextMenuActions), + getActionItem: action => this.actionItemProvider(action as Action), + actionRunner: activeViewlet.getActionRunner(), + getKeyBinding: action => this.keybindingService.lookupKeybinding(action.id) + }); + } + } + } } class FocusSideBarAction extends Action { -- GitLab