diff --git a/src/vs/workbench/parts/extensions/browser/dependenciesViewer.ts b/src/vs/workbench/parts/extensions/browser/dependenciesViewer.ts index d0cbd34242c70838908d409ef41e1a0c0d6156e8..598939415c045b1ebac0cd1901a1a426a2c8386f 100644 --- a/src/vs/workbench/parts/extensions/browser/dependenciesViewer.ts +++ b/src/vs/workbench/parts/extensions/browser/dependenciesViewer.ts @@ -9,12 +9,11 @@ import { IMouseEvent } from 'vs/base/browser/mouseEvent'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { TPromise, Promise } from 'vs/base/common/winjs.base'; import { IDataSource, ITree, IRenderer } from 'vs/base/parts/tree/browser/tree'; -import { DefaultController } from 'vs/base/parts/tree/browser/treeDefaults'; +import { DefaultController, ClickBehavior } from 'vs/base/parts/tree/browser/treeDefaults'; import { Action } from 'vs/base/common/actions'; import { IExtensionDependencies, IExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/common/extensions'; import { once } from 'vs/base/common/event'; import { domEvent } from 'vs/base/browser/event'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; @@ -160,7 +159,9 @@ export class Renderer implements IRenderer { export class Controller extends DefaultController { constructor( @IExtensionsWorkbenchService private extensionsWorkdbenchService: IExtensionsWorkbenchService) { - super(); + super({ clickBehavior: ClickBehavior.ON_MOUSE_UP, keyboardSupport: false }); + + // TODO@Sandeep this should be a command this.downKeyBindingDispatcher.set(KeyMod.CtrlCmd | KeyCode.Enter, (tree: ITree, event: any) => this.openExtension(tree, true)); } @@ -179,14 +180,7 @@ export class Controller extends DefaultController { return false; } - protected onEnter(tree: ITree, event: IKeyboardEvent): boolean { - if (super.onEnter(tree, event)) { - return this.openExtension(tree, false); - } - return false; - } - - private openExtension(tree: ITree, sideByside: boolean): boolean { + public openExtension(tree: ITree, sideByside: boolean): boolean { const element: IExtensionDependencies = tree.getFocus(); if (element.extension) { this.extensionsWorkdbenchService.open(element.extension, sideByside); diff --git a/src/vs/workbench/parts/extensions/browser/extensionEditor.ts b/src/vs/workbench/parts/extensions/browser/extensionEditor.ts index b12860c6bfe531155e9ec7ecd7a309b360baf69b..76397377a7f10c2f4e3cf4b42602c1d91177061d 100644 --- a/src/vs/workbench/parts/extensions/browser/extensionEditor.ts +++ b/src/vs/workbench/parts/extensions/browser/extensionEditor.ts @@ -44,6 +44,7 @@ import { IMessageService } from 'vs/platform/message/common/message'; import { IOpenerService } from 'vs/platform/opener/common/opener'; import { Tree } from 'vs/base/parts/tree/browser/treeImpl'; import { Position } from 'vs/platform/editor/common/editor'; +import { IListService } from 'vs/platform/list/browser/listService'; function renderBody(body: string): string { return ` @@ -154,7 +155,8 @@ export class ExtensionEditor extends BaseEditor { @IThemeService private themeService: IThemeService, @IKeybindingService private keybindingService: IKeybindingService, @IMessageService private messageService: IMessageService, - @IOpenerService private openerService: IOpenerService + @IOpenerService private openerService: IOpenerService, + @IListService private listService: IListService ) { super(ExtensionEditor.ID, telemetryService); this._highlight = null; @@ -388,7 +390,7 @@ export class ExtensionEditor extends BaseEditor { append(this.content, scrollableContent.getDomNode()); this.contentDisposables.push(scrollableContent); - const tree = ExtensionEditor.renderDependencies(content, extensionDependencies, this.instantiationService); + const tree = this.renderDependencies(content, extensionDependencies); const layout = () => { scrollableContent.scanDomNode(); const scrollState = scrollableContent.getScrollState(); @@ -407,18 +409,28 @@ export class ExtensionEditor extends BaseEditor { }); } - private static renderDependencies(container: HTMLElement, extensionDependencies: IExtensionDependencies, instantiationService: IInstantiationService): Tree { - const renderer = instantiationService.createInstance(Renderer); - const controller = instantiationService.createInstance(Controller); + private renderDependencies(container: HTMLElement, extensionDependencies: IExtensionDependencies): Tree { + const renderer = this.instantiationService.createInstance(Renderer); + const controller = this.instantiationService.createInstance(Controller); const tree = new Tree(container, { dataSource: new DataSource(), renderer, controller }, { indentPixels: 40, - twistiePixels: 20 + twistiePixels: 20, + keyboardSupport: false }); tree.setInput(extensionDependencies); + + this.contentDisposables.push(tree.addListener2('selection', event => { + if (event && event.payload && event.payload.origin === 'keyboard') { + controller.openExtension(tree, false); + } + })); + + this.contentDisposables.push(this.listService.register(tree)); + return tree; }