diff --git a/terminus-terminal/src/index.ts b/terminus-terminal/src/index.ts index d07b7374d5adc7c187f7e6f1b0250fb63e0c3d19..d8b30dfba6a09f0af386c15a76f26ba0f37fe331 100644 --- a/terminus-terminal/src/index.ts +++ b/terminus-terminal/src/index.ts @@ -22,6 +22,7 @@ import { EditProfileModalComponent } from './components/editProfileModal.compone import { SessionsService, BaseSession } from './services/sessions.service' import { TerminalFrontendService } from './services/terminalFrontend.service' import { TerminalService } from './services/terminal.service' +import { DockMenuService } from './services/dockMenu.service' import { ButtonProvider } from './buttonProvider' import { RecoveryProvider } from './recoveryProvider' @@ -59,6 +60,7 @@ import { hterm } from './hterm' SessionsService, TerminalFrontendService, TerminalService, + DockMenuService, { provide: SettingsTabProvider, useClass: AppearanceSettingsTabProvider, multi: true }, { provide: SettingsTabProvider, useClass: ShellSettingsTabProvider, multi: true }, @@ -115,6 +117,7 @@ export default class TerminalModule { hotkeys: HotkeysService, terminal: TerminalService, hostApp: HostAppService, + dockMenu: DockMenuService, ) { let events = [ { @@ -183,6 +186,8 @@ export default class TerminalModule { hostApp.bringToFront() } }) + + dockMenu.update() } } diff --git a/terminus-terminal/src/services/dockMenu.service.ts b/terminus-terminal/src/services/dockMenu.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..5f68f6b2f523557b12f56e054716e51a3ede3386 --- /dev/null +++ b/terminus-terminal/src/services/dockMenu.service.ts @@ -0,0 +1,31 @@ +import { NgZone, Injectable } from '@angular/core' +import { ElectronService, ConfigService, HostAppService, Platform } from 'terminus-core' +import { TerminalService } from './terminal.service' + +@Injectable() +export class DockMenuService { + appVersion: string + + constructor ( + private electron: ElectronService, + private config: ConfigService, + private hostApp: HostAppService, + private zone: NgZone, + private terminalService: TerminalService, + ) { + config.changed$.subscribe(() => this.update()) + } + + update () { + if (this.hostApp.platform === Platform.macOS) { + this.electron.app.dock.setMenu(this.electron.Menu.buildFromTemplate( + this.config.store.terminal.profiles.map(profile => ({ + label: profile.name, + click: () => this.zone.run(() => { + this.terminalService.openTabWithOptions(profile.sessionOptions) + }), + })) + )) + } + } +}