Skip to content

Commit 8ceb90a

Browse files
committed
1 parent 83af777 commit 8ceb90a

6 files changed

Lines changed: 19 additions & 17 deletions

File tree

extensions/git/src/commands.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ export class CommandCenter {
290290
}
291291

292292
@command('git.openResource')
293-
async openResource(resource: Resource): Promise<void> {
293+
async openResource(resource: Resource, preserveFocus: boolean): Promise<void> {
294294
const repository = this.model.getRepository(resource.resourceUri);
295295

296296
if (!repository) {
@@ -301,7 +301,7 @@ export class CommandCenter {
301301
const openDiffOnClick = config.get<boolean>('openDiffOnClick');
302302

303303
if (openDiffOnClick) {
304-
await this._openResource(resource, undefined, true, false);
304+
await this._openResource(resource, undefined, preserveFocus, false);
305305
} else {
306306
await this.openFile(resource);
307307
}

src/vs/workbench/api/browser/mainThreadSCM.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ class MainThreadSCMResource implements ISCMResource {
7171
public decorations: ISCMResourceDecorations
7272
) { }
7373

74-
open(): Promise<void> {
75-
return this.proxy.$executeResourceCommand(this.sourceControlHandle, this.groupHandle, this.handle);
74+
open(preserveFocus: boolean): Promise<void> {
75+
return this.proxy.$executeResourceCommand(this.sourceControlHandle, this.groupHandle, this.handle, preserveFocus);
7676
}
7777

7878
toJSON(): any {

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1388,7 +1388,7 @@ export interface ExtHostTerminalServiceShape {
13881388
export interface ExtHostSCMShape {
13891389
$provideOriginalResource(sourceControlHandle: number, uri: UriComponents, token: CancellationToken): Promise<UriComponents | null>;
13901390
$onInputBoxValueChange(sourceControlHandle: number, value: string): void;
1391-
$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number): Promise<void>;
1391+
$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number, preserveFocus: boolean): Promise<void>;
13921392
$validateInput(sourceControlHandle: number, value: string, cursorPosition: number): Promise<[string, number] | undefined>;
13931393
$setSelectedSourceControls(selectedSourceControlHandles: number[]): Promise<void>;
13941394
}

src/vs/workbench/api/common/extHostSCM.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,14 +266,14 @@ class ExtHostSourceControlResourceGroup implements vscode.SourceControlResourceG
266266
return this._resourceStatesMap.get(handle);
267267
}
268268

269-
$executeResourceCommand(handle: number): Promise<void> {
269+
$executeResourceCommand(handle: number, preserveFocus: boolean): Promise<void> {
270270
const command = this._resourceStatesCommandsMap.get(handle);
271271

272272
if (!command) {
273273
return Promise.resolve(undefined);
274274
}
275275

276-
return asPromise(() => this._commands.executeCommand(command.command, ...(command.arguments || [])));
276+
return asPromise(() => this._commands.executeCommand(command.command, ...(command.arguments || []), preserveFocus));
277277
}
278278

279279
_takeResourceStateSnapshot(): SCMRawResourceSplice[] {
@@ -628,7 +628,7 @@ export class ExtHostSCM implements ExtHostSCMShape {
628628
return Promise.resolve(undefined);
629629
}
630630

631-
$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number): Promise<void> {
631+
$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number, preserveFocus: boolean): Promise<void> {
632632
this.logService.trace('ExtHostSCM#$executeResourceCommand', sourceControlHandle, groupHandle, handle);
633633

634634
const sourceControl = this._sourceControls.get(sourceControlHandle);
@@ -643,7 +643,7 @@ export class ExtHostSCM implements ExtHostSCMShape {
643643
return Promise.resolve(undefined);
644644
}
645645

646-
return group.$executeResourceCommand(handle);
646+
return group.$executeResourceCommand(handle, preserveFocus);
647647
}
648648

649649
$validateInput(sourceControlHandle: number, value: string, cursorPosition: number): Promise<[string, number] | undefined> {

src/vs/workbench/contrib/scm/browser/repositoryPane.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { ActionBar, IActionViewItemProvider } from 'vs/base/browser/ui/actionbar
2727
import { IThemeService, LIGHT, registerThemingParticipant, IFileIconTheme } from 'vs/platform/theme/common/themeService';
2828
import { isSCMResource, isSCMResourceGroup, connectPrimaryMenuToInlineActionBar } from './util';
2929
import { attachBadgeStyler } from 'vs/platform/theme/common/styler';
30-
import { WorkbenchCompressibleObjectTree } from 'vs/platform/list/browser/listService';
30+
import { WorkbenchCompressibleObjectTree, TreeResourceNavigator, IOpenEvent } from 'vs/platform/list/browser/listService';
3131
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
3232
import { disposableTimeout, ThrottledDelayer } from 'vs/base/common/async';
3333
import { INotificationService } from 'vs/platform/notification/common/notification';
@@ -877,10 +877,8 @@ export class RepositoryPane extends ViewPane {
877877
accessibilityProvider: new SCMAccessibilityProvider()
878878
}) as WorkbenchCompressibleObjectTree<TreeElement, FuzzyScore>;
879879

880-
this._register(Event.chain(this.tree.onDidOpen)
881-
.map(e => e.elements[0])
882-
.filter<ISCMResource>((e): e is ISCMResource => !!e && !isSCMResourceGroup(e) && !ResourceTree.isResourceNode(e))
883-
.on(this.open, this));
880+
const navigator = this._register(new TreeResourceNavigator(this.tree, { openOnSelection: false }));
881+
this._register(navigator.onDidOpenResource(this.open, this));
884882

885883
this._register(Event.chain(this.tree.onDidPin)
886884
.map(e => e.elements[0])
@@ -1020,8 +1018,12 @@ export class RepositoryPane extends ViewPane {
10201018
return this.repository.provider;
10211019
}
10221020

1023-
private open(e: ISCMResource): void {
1024-
e.open();
1021+
private open(e: IOpenEvent<TreeElement | null>): void {
1022+
if (!e.element || isSCMResourceGroup(e.element) || ResourceTree.isResourceNode(e.element)) {
1023+
return;
1024+
}
1025+
1026+
e.element.open(!!e.editorOptions.preserveFocus);
10251027
}
10261028

10271029
private pin(): void {

src/vs/workbench/contrib/scm/common/scm.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export interface ISCMResource {
3030
readonly resourceGroup: ISCMResourceGroup;
3131
readonly sourceUri: URI;
3232
readonly decorations: ISCMResourceDecorations;
33-
open(): Promise<void>;
33+
open(preserveFocus: boolean): Promise<void>;
3434
}
3535

3636
export interface ISCMResourceGroup extends ISequence<ISCMResource> {

0 commit comments

Comments
 (0)