提交 3ac84ba2 编写于 作者: J Johannes Rieken

add new event `onDidChangeVisibleTextEditors`, #643

上级 f0bf8e4e
......@@ -3376,6 +3376,12 @@ declare namespace vscode {
*/
export const onDidChangeActiveTextEditor: Event<TextEditor>;
/**
* An [event](#Event) which fires when the array of [visible editors](#window.visibleTextEditors)
* has changed.
*/
export const onDidChangeVisibleTextEditors: Event<TextEditor[]>;
/**
* An [event](#Event) which fires when the selection in an editor has changed.
*/
......
......@@ -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);
},
......
......@@ -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 {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册