mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-11 05:30:03 -05:00
add 'don't ask again' to close with with conflicts modal (#167258)
fixes https://github.com/microsoft/vscode/issues/159024
This commit is contained in:
@@ -14,12 +14,13 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
|
||||
import { ITextEditorOptions } from 'vs/platform/editor/common/editor';
|
||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||
import { IEditorIdentifier, IResourceMergeEditorInput } from 'vs/workbench/common/editor';
|
||||
import { MergeEditorInput, MergeEditorInputData } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
|
||||
import { IMergeEditorInputModel } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel';
|
||||
import { MergeEditor } from 'vs/workbench/contrib/mergeEditor/browser/view/mergeEditor';
|
||||
import { MergeEditorViewModel } from 'vs/workbench/contrib/mergeEditor/browser/view/viewModel';
|
||||
import { ctxIsMergeEditor, ctxMergeEditorLayout, ctxMergeEditorShowBase, ctxMergeEditorShowBaseAtTop, ctxMergeEditorShowNonConflictingChanges } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
|
||||
import { ctxIsMergeEditor, ctxMergeEditorLayout, ctxMergeEditorShowBase, ctxMergeEditorShowBaseAtTop, ctxMergeEditorShowNonConflictingChanges, StorageCloseWithConflicts } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
|
||||
abstract class MergeEditorAction extends Action2 {
|
||||
@@ -636,6 +637,26 @@ export class ResetToBaseAndAutoMergeCommand extends MergeEditorAction {
|
||||
}
|
||||
}
|
||||
|
||||
export class ResetCloseWithConflictsChoice extends Action2 {
|
||||
constructor() {
|
||||
super({
|
||||
id: 'mergeEditor.resetCloseWithConflictsChoice',
|
||||
category: mergeEditorCategory,
|
||||
title: {
|
||||
value: localize(
|
||||
'mergeEditor.resetChoice',
|
||||
'Reset Choice for \'Close with Conflicts\''
|
||||
),
|
||||
original: 'Reset Choice for \'Close with Conflicts\'',
|
||||
},
|
||||
f1: true,
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor): void {
|
||||
accessor.get(IStorageService).remove(StorageCloseWithConflicts, StorageScope.PROFILE);
|
||||
}
|
||||
}
|
||||
|
||||
// this is an API command
|
||||
export class AcceptMerge extends MergeEditorAction2 {
|
||||
constructor() {
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
AcceptAllInput1, AcceptAllInput2, AcceptMerge, CompareInput1WithBaseCommand,
|
||||
CompareInput2WithBaseCommand, GoToNextUnhandledConflict, GoToPreviousUnhandledConflict, OpenBaseFile, OpenMergeEditor,
|
||||
OpenResultResource, ResetToBaseAndAutoMergeCommand, SetColumnLayout, SetMixedLayout, ShowHideTopBase, ShowHideCenterBase, ShowHideBase,
|
||||
ShowNonConflictingChanges, ToggleActiveConflictInput1, ToggleActiveConflictInput2
|
||||
ShowNonConflictingChanges, ToggleActiveConflictInput1, ToggleActiveConflictInput2, ResetCloseWithConflictsChoice
|
||||
} from 'vs/workbench/contrib/mergeEditor/browser/commands/commands';
|
||||
import { MergeEditorCopyContentsToJSON, MergeEditorLoadContentsFromFolder, MergeEditorSaveContentsToFolder } from 'vs/workbench/contrib/mergeEditor/browser/commands/devCommands';
|
||||
import { MergeEditorInput } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
|
||||
@@ -83,6 +83,7 @@ registerAction2(AcceptAllInput2);
|
||||
registerAction2(ResetToBaseAndAutoMergeCommand);
|
||||
|
||||
registerAction2(AcceptMerge);
|
||||
registerAction2(ResetCloseWithConflictsChoice);
|
||||
|
||||
// Dev Commands
|
||||
registerAction2(MergeEditorCopyContentsToJSON);
|
||||
|
||||
@@ -17,6 +17,7 @@ import { localize } from 'vs/nls';
|
||||
import { ConfirmResult, IDialogOptions, IDialogService } from 'vs/platform/dialogs/common/dialogs';
|
||||
import { IEditorModel } from 'vs/platform/editor/common/editor';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||
import { IRevertOptions, SaveSourceRegistry } from 'vs/workbench/common/editor';
|
||||
import { EditorModel } from 'vs/workbench/common/editor/editorModel';
|
||||
import { MergeEditorInputData } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
|
||||
@@ -24,6 +25,7 @@ import { conflictMarkers } from 'vs/workbench/contrib/mergeEditor/browser/mergeM
|
||||
import { MergeDiffComputer } from 'vs/workbench/contrib/mergeEditor/browser/model/diffComputer';
|
||||
import { InputData, MergeEditorModel } from 'vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel';
|
||||
import { MergeEditorTelemetry } from 'vs/workbench/contrib/mergeEditor/browser/telemetry';
|
||||
import { StorageCloseWithConflicts } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { ITextFileEditorModel, ITextFileSaveOptions, ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
|
||||
@@ -349,6 +351,7 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
|
||||
private readonly resultTextFileModel: ITextFileEditorModel,
|
||||
private readonly telemetry: MergeEditorTelemetry,
|
||||
@IDialogService private readonly _dialogService: IDialogService,
|
||||
@IStorageService private readonly _storageService: IStorageService,
|
||||
) {
|
||||
super();
|
||||
}
|
||||
@@ -449,7 +452,7 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
|
||||
const { choice } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), { ...options, cancelId: actions.length - 1 });
|
||||
return actions[choice][1];
|
||||
|
||||
} else if (someUnhandledConflicts) {
|
||||
} else if (someUnhandledConflicts && !this._storageService.getBoolean(StorageCloseWithConflicts, StorageScope.PROFILE, false)) {
|
||||
const message = isMany
|
||||
? localize('workspace.messageN.nonDirty', 'Do you want to close {0} merge editors?', inputModels.length)
|
||||
: localize('workspace.message1.nonDirty', 'Do you want to close the merge editor for {0}?', basename(inputModels[0].resultUri));
|
||||
@@ -471,7 +474,16 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
|
||||
[localize('workspace.cancel', 'Cancel'), ConfirmResult.CANCEL],
|
||||
];
|
||||
|
||||
const { choice } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), { ...options, cancelId: actions.length - 1 });
|
||||
const { choice, checkboxChecked } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), {
|
||||
...options,
|
||||
cancelId: actions.length - 1,
|
||||
checkbox: { label: localize('noMoreWarn', "Don't ask again") }
|
||||
});
|
||||
|
||||
if (checkboxChecked) {
|
||||
this._storageService.store(StorageCloseWithConflicts, true, StorageScope.PROFILE, StorageTarget.USER);
|
||||
}
|
||||
|
||||
return actions[choice][1];
|
||||
} else {
|
||||
// This shouldn't do anything
|
||||
|
||||
@@ -26,3 +26,5 @@ export interface MergeEditorContents {
|
||||
result: string;
|
||||
initialResult?: string;
|
||||
}
|
||||
|
||||
export const StorageCloseWithConflicts = 'mergeEditorCloseWithConflicts';
|
||||
|
||||
Reference in New Issue
Block a user