Skip to content

Commit 7734232

Browse files
authored
SCM - adopt new icon for selected repository (microsoft#273165)
1 parent bf119b0 commit 7734232

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

src/vs/workbench/contrib/scm/browser/media/scm.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@
5454
flex: 0 1 auto;
5555
}
5656

57+
.scm-view .scm-provider > .monaco-icon-label.visible {
58+
font-weight: bold;
59+
}
60+
5761
.scm-view .scm-provider > .monaco-icon-label .monaco-icon-name-container {
5862
overflow: hidden;
5963
text-overflow: ellipsis;

src/vs/workbench/contrib/scm/browser/scmRepositoryRenderer.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import './media/scm.css';
77
import { IDisposable, DisposableStore, combinedDisposable } from '../../../../base/common/lifecycle.js';
8-
import { autorun } from '../../../../base/common/observable.js';
8+
import { autorun, IObservable, observableSignalFromEvent } from '../../../../base/common/observable.js';
99
import { append, $ } from '../../../../base/browser/dom.js';
1010
import { ISCMProvider, ISCMRepository, ISCMViewService } from '../common/scm.js';
1111
import { CountBadge } from '../../../../base/browser/ui/countBadge/countBadge.js';
@@ -30,6 +30,7 @@ import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uri
3030
import { shorten } from '../../../../base/common/labels.js';
3131
import { dirname } from '../../../../base/common/resources.js';
3232
import { ILabelService } from '../../../../platform/label/common/label.js';
33+
import { Codicon } from '../../../../base/common/codicons.js';
3334

3435
export class RepositoryActionRunner extends ActionRunner {
3536
constructor(private readonly getSelectedRepositories: () => ISCMRepository[]) {
@@ -69,6 +70,8 @@ export class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMReposit
6970
static readonly TEMPLATE_ID = 'repository';
7071
get templateId(): string { return RepositoryRenderer.TEMPLATE_ID; }
7172

73+
private readonly onDidChangeVisibleRepositoriesSignal: IObservable<void>;
74+
7275
constructor(
7376
private readonly toolbarMenuId: MenuId,
7477
private readonly actionViewItemProvider: IActionViewItemProvider,
@@ -81,7 +84,9 @@ export class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMReposit
8184
@ISCMViewService private scmViewService: ISCMViewService,
8285
@ITelemetryService private telemetryService: ITelemetryService,
8386
@IUriIdentityService private uriIdentityService: IUriIdentityService
84-
) { }
87+
) {
88+
this.onDidChangeVisibleRepositoriesSignal = observableSignalFromEvent(this, this.scmViewService.onDidChangeVisibleRepositories);
89+
}
8590

8691
renderTemplate(container: HTMLElement): RepositoryTemplate {
8792
// hack
@@ -107,9 +112,22 @@ export class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMReposit
107112
renderElement(arg: ISCMRepository | ITreeNode<ISCMRepository, FuzzyScore>, index: number, templateData: RepositoryTemplate): void {
108113
const repository = isSCMRepository(arg) ? arg : arg.element;
109114

110-
if (ThemeIcon.isThemeIcon(repository.provider.iconPath)) {
111-
templateData.icon.classList.add(...ThemeIcon.asClassNameArray(repository.provider.iconPath));
112-
}
115+
templateData.elementDisposables.add(autorun(reader => {
116+
this.onDidChangeVisibleRepositoriesSignal.read(reader);
117+
118+
const isVisible = this.scmViewService.isVisible(repository);
119+
templateData.label.element.classList.toggle('visible', isVisible);
120+
121+
if (ThemeIcon.isThemeIcon(repository.provider.iconPath)) {
122+
if (isVisible && repository.provider.iconPath.id === Codicon.repo.id) {
123+
templateData.icon.className = ThemeIcon.asClassName(Codicon.repoSelected);
124+
} else {
125+
templateData.icon.className = ThemeIcon.asClassName(repository.provider.iconPath);
126+
}
127+
} else {
128+
templateData.icon.className = ThemeIcon.asClassName(Codicon.repo);
129+
}
130+
}));
113131

114132
// Use the description to disambiguate repositories with the same name and have
115133
// a `rootUri`. Use the `provider.rootUri` for disambiguation. If they have the

0 commit comments

Comments
 (0)