Преглед изворни кода

show profiles in macos dock item menu

Eugene Pankov пре 7 година
родитељ
комит
fe75aab724
2 измењених фајлова са 36 додато и 0 уклоњено
  1. 5 0
      terminus-terminal/src/index.ts
  2. 31 0
      terminus-terminal/src/services/dockMenu.service.ts

+ 5 - 0
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()
     }
 }
 

+ 31 - 0
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)
+                    }),
+                }))
+            ))
+        }
+    }
+}