add new event onDidChangeVisibleTextEditors, #643

This commit is contained in:
Johannes Rieken
2016-10-13 10:08:19 +02:00
parent f0bf8e4e3b
commit 3ac84ba23e
3 changed files with 33 additions and 6 deletions

View File

@@ -232,6 +232,9 @@ export class ExtHostAPIImplementation {
return extHostEditors.createTextEditorDecorationType(options);
},
onDidChangeActiveTextEditor: extHostEditors.onDidChangeActiveTextEditor.bind(extHostEditors),
onDidChangeVisibleTextEditors(listener, thisArg, disposables) {
return extHostEditors.onDidChangeVisibleTextEditors(listener, thisArg, disposables);
},
onDidChangeTextEditorSelection: (listener: (e: vscode.TextEditorSelectionChangeEvent) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) => {
return extHostEditors.onDidChangeTextEditorSelection(listener, thisArgs, disposables);
},

View File

@@ -6,6 +6,7 @@
import URI from 'vs/base/common/uri';
import { readonly, illegalArgument } from 'vs/base/common/errors';
import { equals as arrayEquals } from 'vs/base/common/arrays';
import { IdGenerator } from 'vs/base/common/idGenerator';
import Event, { Emitter } from 'vs/base/common/event';
import { TPromise } from 'vs/base/common/winjs.base';
@@ -32,6 +33,7 @@ export class ExtHostEditors extends ExtHostEditorsShape {
private _editors: { [id: string]: ExtHostTextEditor };
private _proxy: MainThreadEditorsShape;
private _onDidChangeActiveTextEditor: Emitter<vscode.TextEditor>;
private _onDidChangeVisibleTextEditors: Emitter<vscode.TextEditor[]>;
private _extHostDocuments: ExtHostDocuments;
private _activeEditorId: string;
private _visibleEditorIds: string[];
@@ -53,6 +55,7 @@ export class ExtHostEditors extends ExtHostEditorsShape {
this._extHostDocuments = extHostDocuments;
this._proxy = threadService.get(MainContext.MainThreadEditors);
this._onDidChangeActiveTextEditor = new Emitter<vscode.TextEditor>();
this._onDidChangeVisibleTextEditors = new Emitter<vscode.TextEditor[]>();
this._editors = Object.create(null);
this._visibleEditorIds = [];
@@ -70,6 +73,10 @@ export class ExtHostEditors extends ExtHostEditorsShape {
return this._onDidChangeActiveTextEditor && this._onDidChangeActiveTextEditor.event;
}
get onDidChangeVisibleTextEditors(): Event<vscode.TextEditor[]> {
return this._onDidChangeVisibleTextEditors && this._onDidChangeVisibleTextEditors.event;
}
showTextDocument(document: TextDocument, column: ViewColumn, preserveFocus: boolean): TPromise<vscode.TextEditor> {
return this._proxy.$tryShowTextDocument(<URI>document.uri, TypeConverters.fromViewColumn(column), preserveFocus).then(id => {
let editor = this._editors[id];
@@ -115,14 +122,25 @@ export class ExtHostEditors extends ExtHostEditorsShape {
}
$acceptActiveEditorAndVisibleEditors(id: string, visibleIds: string[]): void {
this._visibleEditorIds = visibleIds;
let visibleChanged = false;
let activeChanged = false;
if (this._activeEditorId === id) {
// nothing to do
return;
if (!arrayEquals(this._visibleEditorIds, visibleIds)) {
this._visibleEditorIds = visibleIds;
visibleChanged = true;
}
if (this._activeEditorId !== id) {
this._activeEditorId = id;
activeChanged = true;
}
if (visibleChanged) {
this._onDidChangeVisibleTextEditors.fire(this.getVisibleTextEditors());
}
if (activeChanged) {
this._onDidChangeActiveTextEditor.fire(this.getActiveTextEditor());
}
this._activeEditorId = id;
this._onDidChangeActiveTextEditor.fire(this.getActiveTextEditor());
}
$acceptEditorPositionData(data: ITextEditorPositionData): void {