diff --git a/src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts b/src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts index af80931635f14e0ac4a8c5c3a11f129f2a3ae77e..503b0a3254ef1a46fdb9b7ae3775cb16ea393b02 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts @@ -13,7 +13,7 @@ import { ExtHostContext, ExtHostDocumentsAndEditorsShape, IModelAddedData, IText import { MainThreadTextEditor } from './mainThreadEditor'; import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; -import { EditorViewColumn } from 'vs/workbench/api/shared/editor'; +import { EditorViewColumn, editorGroupToViewColumn } from 'vs/workbench/api/shared/editor'; import { IEditor } from 'vs/workbench/common/editor'; import { extHostCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers'; import { MainThreadDocuments } from 'vs/workbench/api/electron-browser/mainThreadDocuments'; @@ -424,16 +424,12 @@ export class MainThreadDocumentsAndEditors { private _findEditorPosition(editor: MainThreadTextEditor): EditorViewColumn { for (let workbenchEditor of this._editorService.visibleControls) { if (editor.matches(workbenchEditor)) { - return this.findEditorPosition(workbenchEditor); + return editorGroupToViewColumn(this._editorGroupService, workbenchEditor.group); } } return undefined; } - findEditorPosition(workbenchEditor: IEditor): number { - return this._editorGroupService.groups.indexOf(workbenchEditor.group); - } - findTextEditorIdFor(editor: IEditor): string { for (let id in this._textEditors) { if (this._textEditors[id].matches(editor)) { diff --git a/src/vs/workbench/api/electron-browser/mainThreadEditors.ts b/src/vs/workbench/api/electron-browser/mainThreadEditors.ts index 8f4153fb8e6b44f989820e400c95d026b4873d54..1ac06c88f5800f7d03086e273b297b72ef04a11c 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadEditors.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadEditors.ts @@ -18,7 +18,7 @@ import { IRange } from 'vs/editor/common/core/range'; import { ISelection } from 'vs/editor/common/core/selection'; import { IDecorationOptions, IDecorationRenderOptions, ILineChange } from 'vs/editor/common/editorCommon'; import { ISingleEditOperation } from 'vs/editor/common/model'; -import { EditorViewColumn, viewColumnToEditorGroup } from 'vs/workbench/api/shared/editor'; +import { EditorViewColumn, viewColumnToEditorGroup, editorGroupToViewColumn } from 'vs/workbench/api/shared/editor'; import { CommandsRegistry } from 'vs/platform/commands/common/commands'; import { IApplyEditsOptions, ITextEditorConfigurationUpdate, IUndoStopOptions, TextEditorRevealType, WorkspaceEditDto, reviveWorkspaceEditDto } from 'vs/workbench/api/node/extHost.protocol'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; @@ -101,7 +101,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape { for (let workbenchEditor of this._editorService.visibleControls) { const id = this._documentsAndEditors.findTextEditorIdFor(workbenchEditor); if (id) { - result[id] = this._documentsAndEditors.findEditorPosition(workbenchEditor); + result[id] = editorGroupToViewColumn(this._editorGroupService, workbenchEditor.group); } } return result; diff --git a/src/vs/workbench/api/electron-browser/mainThreadWebview.ts b/src/vs/workbench/api/electron-browser/mainThreadWebview.ts index 4b3bd22c9c22e4c7d4ca75b49438e743e1706fca..cb968927ce33a694597b36ee5a81cc67a0ca2f74 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadWebview.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadWebview.ts @@ -8,7 +8,7 @@ import URI, { UriComponents } from 'vs/base/common/uri'; import { TPromise } from 'vs/base/common/winjs.base'; import { localize } from 'vs/nls'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { EditorViewColumn, viewColumnToEditorGroup } from 'vs/workbench/api/shared/editor'; +import { EditorViewColumn, viewColumnToEditorGroup, editorGroupToViewColumn } from 'vs/workbench/api/shared/editor'; import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle'; import { IOpenerService } from 'vs/platform/opener/common/opener'; import { ExtHostContext, ExtHostWebviewsShape, IExtHostContext, MainContext, MainThreadWebviewsShape, WebviewPanelHandle } from 'vs/workbench/api/node/extHost.protocol'; @@ -19,7 +19,6 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; import { extHostNamedCustomer } from './extHostCustomers'; -import { GroupIdentifier } from 'vs/workbench/common/editor'; @extHostNamedCustomer(MainContext.MainThreadWebviews) export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviver { @@ -150,7 +149,7 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv state = {}; } - return this._proxy.$deserializeWebviewPanel(handle, webview.state.viewType, webview.getTitle(), state, this.positionOfGroup(webview.group), webview.options) + return this._proxy.$deserializeWebviewPanel(handle, webview.state.viewType, webview.getTitle(), state, editorGroupToViewColumn(this._editorGroupService, webview.group), webview.options) .then(undefined, () => { webview.html = MainThreadWebviews.getDeserializationFailedContents(viewType); }); @@ -211,7 +210,7 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv if (newActiveWebview && newActiveWebview.handle === this._activeWebview) { // Webview itself unchanged but position may have changed - this._proxy.$onDidChangeWebviewPanelViewState(newActiveWebview.handle, true, this.positionOfGroup(newActiveWebview.input.group)); + this._proxy.$onDidChangeWebviewPanelViewState(newActiveWebview.handle, true, editorGroupToViewColumn(this._editorGroupService, newActiveWebview.input.group)); return; } @@ -219,25 +218,19 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv if (typeof this._activeWebview !== 'undefined') { const oldActiveWebview = this._webviews.get(this._activeWebview); if (oldActiveWebview) { - this._proxy.$onDidChangeWebviewPanelViewState(this._activeWebview, false, this.positionOfGroup(oldActiveWebview.group)); + this._proxy.$onDidChangeWebviewPanelViewState(this._activeWebview, false, editorGroupToViewColumn(this._editorGroupService, oldActiveWebview.group)); } } // Then for newly active if (newActiveWebview) { - this._proxy.$onDidChangeWebviewPanelViewState(newActiveWebview.handle, true, this.positionOfGroup(activeEditor.group.id)); + this._proxy.$onDidChangeWebviewPanelViewState(newActiveWebview.handle, true, editorGroupToViewColumn(this._editorGroupService, activeEditor.group)); this._activeWebview = newActiveWebview.handle; } else { this._activeWebview = undefined; } } - private positionOfGroup(groupId: GroupIdentifier): number { - const group = this._editorGroupService.getGroup(groupId); - - return this._editorGroupService.groups.indexOf(group); - } - private onVisibleEditorsChanged(): void { for (const workbenchEditor of this._editorService.visibleControls) { if (!workbenchEditor.input) { @@ -245,8 +238,8 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv } this._webviews.forEach((input, handle) => { - const inputPosition = this.positionOfGroup(input.group); - const editorPosition = this.positionOfGroup(workbenchEditor.group.id); + const inputPosition = editorGroupToViewColumn(this._editorGroupService, input.group); + const editorPosition = editorGroupToViewColumn(this._editorGroupService, workbenchEditor.group); if (workbenchEditor.input.matches(input) && inputPosition !== editorPosition) { input.updateGroup(workbenchEditor.group.id); diff --git a/src/vs/workbench/api/shared/editor.ts b/src/vs/workbench/api/shared/editor.ts index 8fc6711edb2b46dca15bd31b5c13f6d7b8ac8d70..7c537a8edd0bbb68437932e788a3a7e9241554b8 100644 --- a/src/vs/workbench/api/shared/editor.ts +++ b/src/vs/workbench/api/shared/editor.ts @@ -5,13 +5,14 @@ 'use strict'; -import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; +import { IEditorGroupsService, IEditorGroup, GroupsOrder } from 'vs/workbench/services/group/common/editorGroupsService'; import { GroupIdentifier } from 'vs/workbench/common/editor'; import { ACTIVE_GROUP, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; // TODO@api this was previously a hardcoded list of editor positions (ONE, TWO, THREE) // that with the introduction of grid editor feature is now unbounded. This should be -// revisited when the grid functionality is exposed to extensions +// revisited when the grid functionality is exposed to extensions, + export type EditorViewColumn = number; export function viewColumnToEditorGroup(editorGroupService: IEditorGroupsService, position?: EditorViewColumn): GroupIdentifier { @@ -19,7 +20,7 @@ export function viewColumnToEditorGroup(editorGroupService: IEditorGroupsService return ACTIVE_GROUP; // prefer active group when position is undefined } - const groups = editorGroupService.groups; + const groups = editorGroupService.getGroups(GroupsOrder.CREATION_TIME); let candidate = groups[position]; if (candidate) { @@ -32,4 +33,10 @@ export function viewColumnToEditorGroup(editorGroupService: IEditorGroupsService } return SIDE_GROUP; // open to the side if group not found +} + +export function editorGroupToViewColumn(editorGroupService: IEditorGroupsService, editorGroup: IEditorGroup | GroupIdentifier): EditorViewColumn { + const group = typeof editorGroup === 'number' ? editorGroupService.getGroup(editorGroup) : editorGroup; + + return editorGroupService.getGroups(GroupsOrder.CREATION_TIME).indexOf(group); } \ No newline at end of file