add git.decorations.enabled setting, #37299

This commit is contained in:
Johannes Rieken
2017-11-01 14:41:30 +01:00
parent 155fbe80dc
commit 5efffdfcb4
3 changed files with 34 additions and 7 deletions

View File

@@ -118,15 +118,35 @@ class GitDecorationProvider implements DecorationProvider {
export class GitDecorations {
private disposables: Disposable[] = [];
private configListener: Disposable;
private modelListener: Disposable[] = [];
private providers = new Map<Repository, Disposable>();
constructor(private model: Model) {
this.disposables.push(
model.onDidOpenRepository(this.onDidOpenRepository, this),
model.onDidCloseRepository(this.onDidCloseRepository, this)
);
model.repositories.forEach(this.onDidOpenRepository, this);
this.configListener = workspace.onDidChangeConfiguration(e => e.affectsConfiguration('git.decorations.enabled') && this.update());
this.update();
}
private update(): void {
const enabled = workspace.getConfiguration('git').get('decorations.enabled');
if (enabled) {
this.enable();
} else {
this.disable();
}
}
private enable(): void {
this.modelListener = [];
this.model.onDidOpenRepository(this.onDidOpenRepository, this, this.modelListener);
this.model.onDidCloseRepository(this.onDidCloseRepository, this, this.modelListener);
this.model.repositories.forEach(this.onDidOpenRepository, this);
}
private disable(): void {
this.modelListener.forEach(d => d.dispose());
this.providers.forEach(value => value.dispose());
this.providers.clear();
}
private onDidOpenRepository(repository: Repository): void {
@@ -144,7 +164,8 @@ export class GitDecorations {
}
dispose(): void {
this.disposables.forEach(d => d.dispose());
this.configListener.dispose();
this.modelListener.forEach(d => d.dispose());
this.providers.forEach(value => value.dispose);
this.providers.clear();
}