提交 d5152c65 编写于 作者: J Johannes Rieken

breadcrumbs - fix open to side issue

上级 01a3f15a
...@@ -336,7 +336,12 @@ export class BreadcrumbsControl { ...@@ -336,7 +336,12 @@ export class BreadcrumbsControl {
editorViewState = undefined; editorViewState = undefined;
} }
this._contextViewService.hideContextView(this); this._contextViewService.hideContextView(this);
this._revealInEditor(event, data.target, this._getEditorGroup(data.payload && data.payload.originalEvent), (data.payload && data.payload.originalEvent && data.payload.originalEvent.middleButton));
const group = (picker.useAltAsMultipleSelectionModifier && (data.browserEvent as MouseEvent).metaKey) || (!picker.useAltAsMultipleSelectionModifier && (data.browserEvent as MouseEvent).altKey)
? SIDE_GROUP
: ACTIVE_GROUP;
this._revealInEditor(event, data.target, group, (data.browserEvent as MouseEvent).button === 1);
/* __GDPR__ /* __GDPR__
"breadcrumbs/open" : { "breadcrumbs/open" : {
"type": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } "type": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
...@@ -464,10 +469,10 @@ export class BreadcrumbsControl { ...@@ -464,10 +469,10 @@ export class BreadcrumbsControl {
} }
} }
private _getEditorGroup(data: StandardMouseEvent | object): SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | undefined { private _getEditorGroup(data: object): SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | undefined {
if (data === BreadcrumbsControl.Payload_RevealAside || (data instanceof StandardMouseEvent && data.altKey)) { if (data === BreadcrumbsControl.Payload_RevealAside) {
return SIDE_GROUP; return SIDE_GROUP;
} else if (data === BreadcrumbsControl.Payload_Reveal || (data instanceof StandardMouseEvent && data.metaKey)) { } else if (data === BreadcrumbsControl.Payload_Reveal) {
return ACTIVE_GROUP; return ACTIVE_GROUP;
} else { } else {
return undefined; return undefined;
......
...@@ -48,6 +48,11 @@ interface ILayoutInfo { ...@@ -48,6 +48,11 @@ interface ILayoutInfo {
type Tree<I, E> = WorkbenchDataTree<I, E, FuzzyScore> | WorkbenchAsyncDataTree<I, E, FuzzyScore>; type Tree<I, E> = WorkbenchDataTree<I, E, FuzzyScore> | WorkbenchAsyncDataTree<I, E, FuzzyScore>;
export interface SelectEvent {
target: any;
browserEvent: UIEvent;
}
export abstract class BreadcrumbsPicker { export abstract class BreadcrumbsPicker {
protected readonly _disposables = new Array<IDisposable>(); protected readonly _disposables = new Array<IDisposable>();
...@@ -58,11 +63,11 @@ export abstract class BreadcrumbsPicker { ...@@ -58,11 +63,11 @@ export abstract class BreadcrumbsPicker {
protected _fakeEvent = new UIEvent('fakeEvent'); protected _fakeEvent = new UIEvent('fakeEvent');
protected _layoutInfo: ILayoutInfo; protected _layoutInfo: ILayoutInfo;
private readonly _onDidPickElement = new Emitter<{ target: any, payload: any }>(); private readonly _onDidPickElement = new Emitter<SelectEvent>();
readonly onDidPickElement: Event<{ target: any, payload: any }> = this._onDidPickElement.event; readonly onDidPickElement: Event<SelectEvent> = this._onDidPickElement.event;
private readonly _onDidFocusElement = new Emitter<{ target: any, payload: any }>(); private readonly _onDidFocusElement = new Emitter<SelectEvent>();
readonly onDidFocusElement: Event<{ target: any, payload: any }> = this._onDidFocusElement.event; readonly onDidFocusElement: Event<SelectEvent> = this._onDidFocusElement.event;
constructor( constructor(
parent: HTMLElement, parent: HTMLElement,
...@@ -106,18 +111,18 @@ export abstract class BreadcrumbsPicker { ...@@ -106,18 +111,18 @@ export abstract class BreadcrumbsPicker {
this._disposables.push(this._tree.onDidChangeSelection(e => { this._disposables.push(this._tree.onDidChangeSelection(e => {
if (e.browserEvent !== this._fakeEvent) { if (e.browserEvent !== this._fakeEvent) {
const target = this._getTargetFromEvent(e.elements[0], e.browserEvent); const target = this._getTargetFromEvent(e.elements[0]);
if (target) { if (target) {
setTimeout(_ => {// need to debounce here because this disposes the tree and the tree doesn't like to be disposed on click setTimeout(_ => {// need to debounce here because this disposes the tree and the tree doesn't like to be disposed on click
this._onDidPickElement.fire({ target, payload: undefined }); this._onDidPickElement.fire({ target, browserEvent: e.browserEvent || new UIEvent('fake') });
}, 0); }, 0);
} }
} }
})); }));
this._disposables.push(this._tree.onDidChangeFocus(e => { this._disposables.push(this._tree.onDidChangeFocus(e => {
const target = this._getTargetFromEvent(e.elements[0], e.browserEvent); const target = this._getTargetFromEvent(e.elements[0]);
if (target) { if (target) {
this._onDidFocusElement.fire({ target, payload: undefined }); this._onDidFocusElement.fire({ target, browserEvent: e.browserEvent || new UIEvent('fake') });
} }
})); }));
this._disposables.push(this._tree.onDidChangeContentHeight(() => { this._disposables.push(this._tree.onDidChangeContentHeight(() => {
...@@ -155,9 +160,13 @@ export abstract class BreadcrumbsPicker { ...@@ -155,9 +160,13 @@ export abstract class BreadcrumbsPicker {
} }
get useAltAsMultipleSelectionModifier() {
return this._tree.useAltAsMultipleSelectionModifier;
}
protected abstract _setInput(element: BreadcrumbElement): Promise<void>; protected abstract _setInput(element: BreadcrumbElement): Promise<void>;
protected abstract _createTree(container: HTMLElement): Tree<any, any>; protected abstract _createTree(container: HTMLElement): Tree<any, any>;
protected abstract _getTargetFromEvent(element: any, payload: UIEvent | undefined): any | undefined; protected abstract _getTargetFromEvent(element: any): any | undefined;
} }
//#region - Files //#region - Files
...@@ -425,7 +434,7 @@ export class BreadcrumbsFilePicker extends BreadcrumbsPicker { ...@@ -425,7 +434,7 @@ export class BreadcrumbsFilePicker extends BreadcrumbsPicker {
}); });
} }
protected _getTargetFromEvent(element: any, _payload: any): any | undefined { protected _getTargetFromEvent(element: any): any | undefined {
// todo@joh // todo@joh
if (element && !IWorkspaceFolder.isIWorkspaceFolder(element) && !(element as IFileStat).isDirectory) { if (element && !IWorkspaceFolder.isIWorkspaceFolder(element) && !(element as IFileStat).isDirectory) {
return new FileElement((element as IFileStat).resource, FileKind.FILE); return new FileElement((element as IFileStat).resource, FileKind.FILE);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册