diff --git a/src/vs/workbench/parts/search/browser/search.contribution.ts b/src/vs/workbench/parts/search/browser/search.contribution.ts index d09832f2081..948143d11b0 100644 --- a/src/vs/workbench/parts/search/browser/search.contribution.ts +++ b/src/vs/workbench/parts/search/browser/search.contribution.ts @@ -29,6 +29,7 @@ import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; import { ITree } from 'vs/base/parts/tree/browser/tree'; import * as searchActions from 'vs/workbench/parts/search/browser/searchActions'; +import { Model } from 'vs/workbench/parts/files/common/explorerModel'; import * as Constants from 'vs/workbench/parts/search/common/constants'; import { registerContributions as replaceContributions } from 'vs/workbench/parts/search/browser/replaceContributions'; import { registerContributions as searchWidgetContributions } from 'vs/workbench/parts/search/browser/searchWidget'; @@ -199,7 +200,11 @@ class ExplorerViewerActionContributor extends ActionBarContributor { public hasSecondaryActions(context: any): boolean { let element = context.element; - // Contribute only on file resources + // Contribute only on file resources and model (context menu for multi root) + if (element instanceof Model) { + return true; + } + let fileResource = explorerItemToFileResource(element); if (!fileResource) { return false; @@ -212,9 +217,14 @@ class ExplorerViewerActionContributor extends ActionBarContributor { let actions: IAction[] = []; if (this.hasSecondaryActions(context)) { - let fileResource = explorerItemToFileResource(context.element); + let action: Action; + if (context.element instanceof Model) { + action = this._instantiationService.createInstance(searchActions.FindInWorkspaceAction); + } else { + let fileResource = explorerItemToFileResource(context.element); + action = this._instantiationService.createInstance(searchActions.FindInFolderAction, fileResource.resource); + } - let action = this._instantiationService.createInstance(searchActions.FindInFolderAction, fileResource.resource); action.order = 55; actions.push(action); diff --git a/src/vs/workbench/parts/search/browser/searchActions.ts b/src/vs/workbench/parts/search/browser/searchActions.ts index 8365df7f653..33673e1f9e9 100644 --- a/src/vs/workbench/parts/search/browser/searchActions.ts +++ b/src/vs/workbench/parts/search/browser/searchActions.ts @@ -240,6 +240,21 @@ export class CloseReplaceAction extends Action { } } +export class FindInWorkspaceAction extends Action { + + public static ID = 'filesExplorer.findInWorkspace'; + + constructor( @IViewletService private viewletService: IViewletService) { + super(FindInWorkspaceAction.ID, nls.localize('findInWorkspace', "Find in Workspace...")); + } + + public run(event?: any): TPromise { + return this.viewletService.openViewlet(Constants.VIEWLET_ID, true).then((viewlet: SearchViewlet) => { + viewlet.searchInFolder(null); + }); + } +} + export class FindInFolderAction extends Action { public static ID = 'filesExplorer.findInFolder'; @@ -247,7 +262,7 @@ export class FindInFolderAction extends Action { private resource: URI; constructor(resource: URI, @IInstantiationService private instantiationService: IInstantiationService) { - super(FindInFolderAction.ID, nls.localize('findInFolder', "Find in Folder")); + super(FindInFolderAction.ID, nls.localize('findInFolder', "Find in Folder...")); this.resource = resource; } diff --git a/src/vs/workbench/parts/search/browser/searchViewlet.ts b/src/vs/workbench/parts/search/browser/searchViewlet.ts index f66206306d8..66a4b808f66 100644 --- a/src/vs/workbench/parts/search/browser/searchViewlet.ts +++ b/src/vs/workbench/parts/search/browser/searchViewlet.ts @@ -839,7 +839,7 @@ export class SearchViewlet extends Viewlet { public searchInFolder(resource: URI): void { let folderPath = null; const workspace = this.contextService.getWorkspace(); - if (workspace) { + if (workspace && resource) { if (workspace.roots.length === 1) { // Show relative path from the root for single-root mode folderPath = paths.relative(workspace.roots[0].fsPath, resource.fsPath);