diff --git a/src/vs/editor/standalone/browser/standaloneThemeServiceImpl.ts b/src/vs/editor/standalone/browser/standaloneThemeServiceImpl.ts index f25911aa714..841119d3829 100644 --- a/src/vs/editor/standalone/browser/standaloneThemeServiceImpl.ts +++ b/src/vs/editor/standalone/browser/standaloneThemeServiceImpl.ts @@ -10,7 +10,7 @@ import * as dom from 'vs/base/browser/dom'; import { TokenizationRegistry } from 'vs/editor/common/modes'; import { Color } from 'vs/base/common/color'; import { Extensions, IColorRegistry, ColorIdentifier } from 'vs/platform/theme/common/colorRegistry'; -import { Extensions as ThemingExtensions, IThemingRegistry, ICssStyleCollector } from 'vs/platform/theme/common/themeService'; +import { Extensions as ThemingExtensions, IThemingRegistry, ICssStyleCollector, IIconTheme } from 'vs/platform/theme/common/themeService'; import { Registry } from 'vs/platform/registry/common/platform'; import { Event, Emitter } from 'vs/base/common/event'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; @@ -163,10 +163,12 @@ export class StandaloneThemeServiceImpl implements IStandaloneThemeService { private _styleElement: HTMLStyleElement; private _theme: IStandaloneTheme; private readonly _onThemeChange: Emitter; + private readonly _onIconThemeChange: Emitter; private environment: IEnvironmentService = Object.create(null); constructor() { this._onThemeChange = new Emitter(); + this._onIconThemeChange = new Emitter(); this._knownThemes = new Map(); this._knownThemes.set(VS_THEME_NAME, newBuiltInTheme(VS_THEME_NAME)); @@ -239,4 +241,16 @@ export class StandaloneThemeServiceImpl implements IStandaloneThemeService { return theme.id; } + + public getIconTheme(): IIconTheme { + return { + hasFileIcons: false, + hasFolderIcons: false, + hidesExplorerArrows: false + }; + } + + public get onIconThemeChange(): Event { + return this._onIconThemeChange.event; + } } diff --git a/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts b/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts index e8b3ec85b60..356e1bc1ba4 100644 --- a/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts +++ b/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts @@ -5,8 +5,8 @@ import * as assert from 'assert'; import { TokenizationSupport2Adapter, TokensProvider, ILineTokens, IToken } from 'vs/editor/standalone/browser/standaloneLanguages'; import { IStandaloneThemeService, IStandaloneThemeData, IStandaloneTheme } from 'vs/editor/standalone/common/standaloneThemeService'; -import { Event } from 'vs/base/common/event'; -import { ITheme, LIGHT } from 'vs/platform/theme/common/themeService'; +import { Emitter } from 'vs/base/common/event'; +import { ITheme, LIGHT, IIconTheme } from 'vs/platform/theme/common/themeService'; import { LanguageIdentifier, LanguageId, IState, MetadataConsts } from 'vs/editor/common/modes'; import { Token } from 'vs/editor/common/core/token'; import { TokenTheme } from 'vs/editor/common/modes/supports/tokenization'; @@ -56,7 +56,15 @@ suite('TokenizationSupport2Adapter', () => { } }; } - public readonly onThemeChange: Event | null = null; + public getIconTheme(): IIconTheme { + return { + hasFileIcons: false, + hasFolderIcons: false, + hidesExplorerArrows: false + }; + } + public readonly onThemeChange = new Emitter().event; + public readonly onIconThemeChange = new Emitter().event; } class MockState implements IState { diff --git a/src/vs/platform/theme/common/themeService.ts b/src/vs/platform/theme/common/themeService.ts index a719d8647dd..8e2707a6dc4 100644 --- a/src/vs/platform/theme/common/themeService.ts +++ b/src/vs/platform/theme/common/themeService.ts @@ -61,6 +61,12 @@ export interface ITheme { defines(color: ColorIdentifier): boolean; } +export interface IIconTheme { + readonly hasFileIcons: boolean; + readonly hasFolderIcons: boolean; + readonly hidesExplorerArrows: boolean; +} + export interface ICssStyleCollector { addRule(rule: string): void; } @@ -74,10 +80,11 @@ export interface IThemeService { getTheme(): ITheme; - /** - * Register a theming participant that is invoked after every theme change. - */ - onThemeChange: Event; + readonly onThemeChange: Event; + + getIconTheme(): IIconTheme; + + readonly onIconThemeChange: Event; } diff --git a/src/vs/platform/theme/test/common/testThemeService.ts b/src/vs/platform/theme/test/common/testThemeService.ts index f5e9c13a49e..08207173349 100644 --- a/src/vs/platform/theme/test/common/testThemeService.ts +++ b/src/vs/platform/theme/test/common/testThemeService.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Event, Emitter } from 'vs/base/common/event'; -import { IThemeService, ITheme, DARK } from 'vs/platform/theme/common/themeService'; +import { IThemeService, ITheme, DARK, IIconTheme } from 'vs/platform/theme/common/themeService'; import { Color } from 'vs/base/common/color'; export class TestTheme implements ITheme { @@ -25,14 +25,23 @@ export class TestTheme implements ITheme { } } +export class TestIconTheme implements IIconTheme { + hasFileIcons = false; + hasFolderIcons = false; + hidesExplorerArrows = false; +} + export class TestThemeService implements IThemeService { _serviceBrand: any; _theme: ITheme; + _iconTheme: IIconTheme; _onThemeChange = new Emitter(); + _onIconThemeChange = new Emitter(); - constructor(theme = new TestTheme()) { + constructor(theme = new TestTheme(), iconTheme = new TestIconTheme()) { this._theme = theme; + this._iconTheme = iconTheme; } getTheme(): ITheme { @@ -51,4 +60,12 @@ export class TestThemeService implements IThemeService { public get onThemeChange(): Event { return this._onThemeChange.event; } + + getIconTheme(): IIconTheme { + return this._iconTheme; + } + + public get onIconThemeChange(): Event { + return this._onIconThemeChange.event; + } } diff --git a/src/vs/workbench/services/themes/common/workbenchThemeService.ts b/src/vs/workbench/services/themes/common/workbenchThemeService.ts index 287af47691f..71d5dd447e1 100644 --- a/src/vs/workbench/services/themes/common/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/common/workbenchThemeService.ts @@ -6,7 +6,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { Event } from 'vs/base/common/event'; import { Color } from 'vs/base/common/color'; -import { ITheme, IThemeService } from 'vs/platform/theme/common/themeService'; +import { ITheme, IThemeService, IIconTheme } from 'vs/platform/theme/common/themeService'; import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; export const IWorkbenchThemeService = createDecorator('themeService'); @@ -38,7 +38,7 @@ export interface IColorMap { [id: string]: Color; } -export interface IFileIconTheme { +export interface IFileIconTheme extends IIconTheme { readonly id: string; readonly label: string; readonly settingsId: string; @@ -46,9 +46,9 @@ export interface IFileIconTheme { readonly extensionData: ExtensionData; readonly isLoaded: boolean; - readonly hasFileIcons?: boolean; - readonly hasFolderIcons?: boolean; - readonly hidesExplorerArrows?: boolean; + readonly hasFileIcons: boolean; + readonly hasFolderIcons: boolean; + readonly hidesExplorerArrows: boolean; } export interface IWorkbenchThemeService extends IThemeService { diff --git a/src/vs/workbench/services/themes/electron-browser/fileIconThemeData.ts b/src/vs/workbench/services/themes/electron-browser/fileIconThemeData.ts index 71404c276f3..5b4136989fb 100644 --- a/src/vs/workbench/services/themes/electron-browser/fileIconThemeData.ts +++ b/src/vs/workbench/services/themes/electron-browser/fileIconThemeData.ts @@ -17,9 +17,9 @@ export class FileIconThemeData implements IFileIconTheme { label: string; settingsId: string; description?: string; - hasFileIcons?: boolean; - hasFolderIcons?: boolean; - hidesExplorerArrows?: boolean; + hasFileIcons: boolean; + hasFolderIcons: boolean; + hidesExplorerArrows: boolean; isLoaded: boolean; location?: URI; extensionData: ExtensionData; diff --git a/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts b/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts index 51525c6dd56..e312eda08d3 100644 --- a/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts @@ -191,6 +191,10 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { return this.onFileIconThemeChange.event; } + public get onIconThemeChange(): Event { + return this.onFileIconThemeChange.event; + } + public get onThemeChange(): Event { return this.onColorThemeChange.event; } @@ -394,6 +398,10 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { return this.currentIconTheme; } + public getIconTheme() { + return this.currentIconTheme; + } + public setFileIconTheme(iconTheme: string, settingsTarget: ConfigurationTarget): Thenable { iconTheme = iconTheme || ''; if (iconTheme === this.currentIconTheme.id && this.currentIconTheme.isLoaded) {