提交 d85116c2 编写于 作者: I isidor

explorer commands: fix computing context

fixes #47121
上级 605ed530
......@@ -12,7 +12,6 @@ import { ExplorerItem, OpenEditor } from 'vs/workbench/parts/files/common/explor
import { toResource } from 'vs/workbench/common/editor';
import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
import { List } from 'vs/base/browser/ui/list/listWidget';
import { IFileStat } from 'vs/platform/files/common/files';
// Commands can get exeucted from a command pallete, from a context menu or from some list using a keybinding
// To cover all these cases we need to properly compute the resource on which the command is being executed
......@@ -23,7 +22,16 @@ export function getResourceForCommand(resource: URI | object, listService: IList
let list = listService.lastFocusedList;
if (list && list.isDOMFocused()) {
const focus = list.getFocus();
let focus: any;
if (list instanceof List) {
const focused = list.getFocusedElements();
if (focused.length) {
focus = focused[0];
}
} else {
focus = list.getFocus();
}
if (focus instanceof ExplorerItem) {
return focus.resource;
} else if (focus instanceof OpenEditor) {
......@@ -39,27 +47,25 @@ export function getMultiSelectedResources(resource: URI | object, listService: I
if (list && list.isDOMFocused()) {
// Explorer
if (list instanceof Tree) {
const focus: IFileStat = list.getFocus();
const selection = list.getSelection().map((fs: ExplorerItem) => fs.resource);
const focus = list.getFocus();
const mainUriStr = URI.isUri(resource) ? resource.toString() : focus instanceof ExplorerItem ? focus.resource.toString() : undefined;
// If the resource is passed it has to be a part of the returned context.
if (focus && (!URI.isUri(resource) || focus.resource.toString() === resource.toString())) {
const selection = list.getSelection();
// We only respect the selection if it contains the focused element.
if (selection && selection.indexOf(focus) >= 0) {
return selection.map(fs => fs.resource);
}
// We only respect the selection if it contains the focused element.
if (selection.some(s => s.toString() === mainUriStr)) {
return selection;
}
}
// Open editors view
if (list instanceof List) {
const focus = list.getFocusedElements();
// If the resource is passed it has to be a part of the returned context.
if (focus.length && (!URI.isUri(resource) || (focus[0] instanceof OpenEditor && focus[0].getResource().toString() === resource.toString()))) {
const selection = list.getSelectedElements();
// We only respect the selection if it contains the focused element.
if (selection && selection.indexOf(focus[0]) >= 0) {
return selection.filter(s => s instanceof OpenEditor).map((oe: OpenEditor) => oe.getResource());
}
const selection = list.getSelectedElements().filter(s => s instanceof OpenEditor).map((oe: OpenEditor) => oe.getResource());
const focusedElements = list.getFocusedElements();
const focus = focusedElements.length ? focusedElements[0] : undefined;
const mainUriStr = URI.isUri(resource) ? resource.toString() : (focus instanceof OpenEditor) ? focus.getResource().toString() : undefined;
// We only respect the selection if it contains the main element.
if (selection.some(s => s.toString() === mainUriStr)) {
return selection;
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册