diff --git a/src/vs/workbench/parts/scm/browser/scmActivity.ts b/src/vs/workbench/parts/scm/browser/scmActivity.ts index df200b989100f5fbacd3482ce4c720b05e6b0c05..214b25850b0c3dc2463cc12926f661fea845fcd4 100644 --- a/src/vs/workbench/parts/scm/browser/scmActivity.ts +++ b/src/vs/workbench/parts/scm/browser/scmActivity.ts @@ -6,7 +6,7 @@ 'use strict'; import { localize } from 'vs/nls'; -import { IDisposable, dispose, empty as EmptyDisposable } from 'vs/base/common/lifecycle'; +import { IDisposable, dispose, empty as EmptyDisposable, OneDisposable } from 'vs/base/common/lifecycle'; import { VIEWLET_ID } from 'vs/workbench/parts/scm/common/scm'; import { ISCMService, ISCMProvider } from 'vs/workbench/services/scm/common/scm'; import { IActivityBarService, NumberBadge } from 'vs/workbench/services/activity/common/activityBarService'; @@ -17,6 +17,7 @@ export class StatusUpdater implements IWorkbenchContribution { static ID = 'vs.scm.statusUpdater'; private providerChangeDisposable: IDisposable = EmptyDisposable; + private badgeHandle = new OneDisposable(); private disposables: IDisposable[] = []; constructor( @@ -25,6 +26,7 @@ export class StatusUpdater implements IWorkbenchContribution { ) { this.scmService.onDidChangeProvider(this.setActiveProvider, this, this.disposables); this.setActiveProvider(this.scmService.activeProvider); + this.disposables.push(this.badgeHandle); } getId(): string { @@ -40,9 +42,14 @@ export class StatusUpdater implements IWorkbenchContribution { private update(): void { const provider = this.scmService.activeProvider; const count = provider ? provider.resources.reduce((r, g) => r + g.resources.length, 0) : 0; - const badge = count > 0 ? new NumberBadge(count, num => localize('scmPendingChangesBadge', '{0} pending changes', num)) : null; - this.activityBarService.showActivity(VIEWLET_ID, badge, 'scm-viewlet-label'); + + if (count > 0) { + const badge = new NumberBadge(count, num => localize('scmPendingChangesBadge', '{0} pending changes', num)); + this.badgeHandle.value = this.activityBarService.showActivity(VIEWLET_ID, badge, 'scm-viewlet-label'); + } else { + this.badgeHandle.value = null; + } } dispose(): void { diff --git a/src/vs/workbench/parts/scm/browser/scmViewlet.ts b/src/vs/workbench/parts/scm/browser/scmViewlet.ts index d8423aeb85d2b7ebdb85be28a0ce420d7f7b50f7..57473df6374b04a16dfc8bde85f2fb04c38ef8b8 100644 --- a/src/vs/workbench/parts/scm/browser/scmViewlet.ts +++ b/src/vs/workbench/parts/scm/browser/scmViewlet.ts @@ -12,7 +12,7 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { chain } from 'vs/base/common/event'; import { Throttler } from 'vs/base/common/async'; import { domEvent } from 'vs/base/browser/event'; -import { IDisposable, dispose, empty as EmptyDisposable, OneDisposable } from 'vs/base/common/lifecycle'; +import { IDisposable, dispose, empty as EmptyDisposable } from 'vs/base/common/lifecycle'; import { Builder, Dimension } from 'vs/base/browser/builder'; import { Viewlet } from 'vs/workbench/browser/viewlet'; import { append, $, toggleClass } from 'vs/base/browser/dom'; @@ -156,7 +156,6 @@ export class SCMViewlet extends Viewlet { private list: List; private menus: SCMMenus; private providerChangeDisposable: IDisposable = EmptyDisposable; - private badgeHandle = new OneDisposable(); private disposables: IDisposable[] = []; constructor( @@ -174,7 +173,7 @@ export class SCMViewlet extends Viewlet { super(VIEWLET_ID, telemetryService); this.menus = this.instantiationService.createInstance(SCMMenus); - this.disposables.push(this.menus, this.badgeHandle); + this.disposables.push(this.menus); } private setActiveProvider(activeProvider: ISCMProvider | undefined): void {