Enable hot exit for saved files (#469)

This commit is contained in:
Matt Irvine
2018-01-11 14:29:26 -08:00
committed by GitHub
parent 7cf0847ef5
commit 6d3995aa29
6 changed files with 29 additions and 26 deletions

View File

@@ -5,7 +5,6 @@
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { EditorInput, EditorModel } from 'vs/workbench/common/editor'; import { EditorInput, EditorModel } from 'vs/workbench/common/editor';
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
import { IDisposable } from 'vs/base/common/lifecycle'; import { IDisposable } from 'vs/base/common/lifecycle';
import URI from 'vs/base/common/uri'; import URI from 'vs/base/common/uri';
import { IModelService } from 'vs/editor/common/services/modelService'; import { IModelService } from 'vs/editor/common/services/modelService';
@@ -70,7 +69,7 @@ export class DashboardInput extends EditorInput {
} }
public getTypeId(): string { public getTypeId(): string {
return UntitledEditorInput.ID; return DashboardInput.ID;
} }
public getResource(): URI { public getResource(): URI {

View File

@@ -116,7 +116,7 @@ export class QueryInput extends EditorInput implements IEncodingSupport, IConnec
public getQueryResultsInputResource(): string { return this._results.uri; } public getQueryResultsInputResource(): string { return this._results.uri; }
public showQueryResultsEditor(): void { this._showQueryResultsEditor.fire(); } public showQueryResultsEditor(): void { this._showQueryResultsEditor.fire(); }
public updateSelection(selection: ISelectionData): void { this._updateSelection.fire(selection); } public updateSelection(selection: ISelectionData): void { this._updateSelection.fire(selection); }
public getTypeId(): string { return UntitledEditorInput.ID; } public getTypeId(): string { return QueryInput.ID; }
public getDescription(): string { return this._description; } public getDescription(): string { return this._description; }
public supportsSplitEditor(): boolean { return false; } public supportsSplitEditor(): boolean { return false; }
public getModeId(): string { return QueryInput.SCHEMA; } public getModeId(): string { return QueryInput.SCHEMA; }

View File

@@ -42,10 +42,6 @@ import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { isMacintosh } from 'vs/base/common/platform'; import { isMacintosh } from 'vs/base/common/platform';
import { GroupOnePicker, GroupTwoPicker, GroupThreePicker, AllEditorsPicker } from 'vs/workbench/browser/parts/editor/editorPicker'; import { GroupOnePicker, GroupTwoPicker, GroupThreePicker, AllEditorsPicker } from 'vs/workbench/browser/parts/editor/editorPicker';
// {{SQL CARBON EDIT}}
import { QueryResultsInput } from 'sql/parts/query/common/queryResultsInput';
import { QueryInput } from 'sql/parts/query/common/queryInput';
// Register String Editor // Register String Editor
Registry.as<IEditorRegistry>(EditorExtensions.Editors).registerEditor( Registry.as<IEditorRegistry>(EditorExtensions.Editors).registerEditor(
new EditorDescriptor( new EditorDescriptor(
@@ -136,23 +132,15 @@ class UntitledEditorInputFactory implements IEditorInputFactory {
return JSON.stringify(serialized); return JSON.stringify(serialized);
} }
// {{SQL CARBON EDIT}} public deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): UntitledEditorInput {
public deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): EditorInput { return instantiationService.invokeFunction<UntitledEditorInput>(accessor => {
return instantiationService.invokeFunction<EditorInput>(accessor => {
const deserialized: ISerializedUntitledEditorInput = JSON.parse(serializedEditorInput); const deserialized: ISerializedUntitledEditorInput = JSON.parse(serializedEditorInput);
const resource = !!deserialized.resourceJSON ? URI.revive(deserialized.resourceJSON) : URI.parse(deserialized.resource); const resource = !!deserialized.resourceJSON ? URI.revive(deserialized.resourceJSON) : URI.parse(deserialized.resource);
const filePath = resource.scheme === 'file' ? resource.fsPath : void 0; const filePath = resource.scheme === 'file' ? resource.fsPath : void 0;
const language = deserialized.modeId; const language = deserialized.modeId;
const encoding = deserialized.encoding; const encoding = deserialized.encoding;
// {{SQL CARBON EDIT}} return accessor.get(IWorkbenchEditorService).createInput({ resource, filePath, language, encoding }) as UntitledEditorInput;
let input = accessor.get(IWorkbenchEditorService).createInput({ resource, filePath, language, encoding }) as UntitledEditorInput;
if (deserialized.modeId === QueryInput.SCHEMA) {
const queryResultsInput: QueryResultsInput = instantiationService.createInstance(QueryResultsInput, resource.toString());
return instantiationService.createInstance(QueryInput, input.getName(), '', input, queryResultsInput, undefined);
} else {
return input;
}
}); });
} }
} }

View File

@@ -17,6 +17,10 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { Position, Direction } from 'vs/platform/editor/common/editor'; import { Position, Direction } from 'vs/platform/editor/common/editor';
import { ResourceMap } from 'vs/base/common/map'; import { ResourceMap } from 'vs/base/common/map';
// {{SQL CARBON EDIT}}
import { QueryInput } from 'sql/parts/query/common/queryInput';
import * as CustomInputConverter from 'sql/parts/common/customInputConverter';
export interface EditorCloseEvent extends IEditorCloseEvent { export interface EditorCloseEvent extends IEditorCloseEvent {
editor: EditorInput; editor: EditorInput;
} }
@@ -643,7 +647,14 @@ export class EditorGroup implements IEditorGroup {
let serializableEditors: EditorInput[] = []; let serializableEditors: EditorInput[] = [];
let serializedEditors: ISerializedEditorInput[] = []; let serializedEditors: ISerializedEditorInput[] = [];
let serializablePreviewIndex: number; let serializablePreviewIndex: number;
this.editors.forEach(e => { // {{SQL CARBON EDIT}}
let editors = this.editors.map(e => {
if (e instanceof QueryInput) {
return e.sql;
}
return e;
});
editors.forEach(e => {
let factory = registry.getEditorInputFactory(e.getTypeId()); let factory = registry.getEditorInputFactory(e.getTypeId());
if (factory) { if (factory) {
let value = factory.serialize(e); let value = factory.serialize(e);
@@ -658,7 +669,14 @@ export class EditorGroup implements IEditorGroup {
} }
}); });
const serializableMru = this.mru.map(e => this.indexOf(e, serializableEditors)).filter(i => i >= 0); // {{SQL CARBON EDIT}}
let mru = this.mru.map(e => {
if (e instanceof QueryInput) {
return e.sql;
}
return e;
});
const serializableMru = mru.map(e => this.indexOf(e, serializableEditors)).filter(i => i >= 0);
return { return {
label: this.label, label: this.label,
@@ -680,7 +698,8 @@ export class EditorGroup implements IEditorGroup {
this.hookEditorListeners(editor); this.hookEditorListeners(editor);
this.updateResourceMap(editor, false /* add */); this.updateResourceMap(editor, false /* add */);
return editor; // {{SQL CARBON EDIT}}
return CustomInputConverter.convertEditorInput(editor, undefined, this.instantiationService);
} }
return null; return null;

View File

@@ -267,7 +267,7 @@ configurationRegistry.registerConfiguration({
'files.hotExit': { 'files.hotExit': {
'type': 'string', 'type': 'string',
'enum': [HotExitConfiguration.OFF, HotExitConfiguration.ON_EXIT, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE], 'enum': [HotExitConfiguration.OFF, HotExitConfiguration.ON_EXIT, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE],
'default': HotExitConfiguration.ON_EXIT, 'default': HotExitConfiguration.OFF,
'enumDescriptions': [ 'enumDescriptions': [
nls.localize('hotExit.off', 'Disable hot exit.'), nls.localize('hotExit.off', 'Disable hot exit.'),
nls.localize('hotExit.onExit', 'Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (command palette, keybinding, menu). All windows with backups will be restored upon next launch.'), nls.localize('hotExit.onExit', 'Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (command palette, keybinding, menu). All windows with backups will be restored upon next launch.'),

View File

@@ -366,10 +366,7 @@ export abstract class TextFileService implements ITextFileService {
} }
// Hot exit // Hot exit
// {{SQL CARBON EDIT}} const hotExitMode = configuration && configuration.files ? configuration.files.hotExit : HotExitConfiguration.ON_EXIT;
// const hotExitMode = configuration && configuration.files ? configuration.files.hotExit : HotExitConfiguration.ON_EXIT;
const hotExitMode = HotExitConfiguration.OFF;
if (hotExitMode === HotExitConfiguration.OFF || hotExitMode === HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE) { if (hotExitMode === HotExitConfiguration.OFF || hotExitMode === HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE) {
this.configuredHotExit = hotExitMode; this.configuredHotExit = hotExitMode;
} else { } else {