소스 검색

fixed touchbar activity indicators

Eugene Pankov 4 년 전
부모
커밋
f5f88d3d9d
3개의 변경된 파일10개의 추가작업 그리고 14개의 파일을 삭제
  1. 7 2
      app/lib/window.ts
  2. 1 3
      tabby-electron/src/services/electron.service.ts
  3. 2 9
      tabby-electron/src/services/touchbar.service.ts

+ 7 - 2
app/lib/window.ts

@@ -1,7 +1,7 @@
 import * as glasstron from 'glasstron'
 
 import { Subject, Observable, debounceTime } from 'rxjs'
-import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar } from 'electron'
+import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage } from 'electron'
 import ElectronConfig = require('electron-config')
 import * as os from 'os'
 import * as path from 'path'
@@ -28,6 +28,8 @@ abstract class GlasstronWindow extends BrowserWindow {
 
 const macOSVibrancyType = process.platform === 'darwin' ? compareVersions.compare(macOSRelease().version, '10.14', '>=') ? 'fullscreen-ui' : 'dark' : null
 
+const activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/activity.png`)
+
 export class Window {
     ready: Promise<void>
     private visible = new Subject<boolean>()
@@ -367,7 +369,10 @@ export class Window {
         })
 
         ipcMain.on('window-set-touch-bar', (_event, segments, selectedIndex) => {
-            this.touchBarControl.segments = segments
+            this.touchBarControl.segments = segments.map(s => ({
+                label: s.label,
+                icon: s.hasActivity ? activityIcon : undefined,
+            })
             this.touchBarControl.selectedIndex = selectedIndex
         })
 

+ 1 - 3
tabby-electron/src/services/electron.service.ts

@@ -1,5 +1,5 @@
 import { Injectable } from '@angular/core'
-import { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, Remote, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, NativeImage, PowerSaveBlocker } from 'electron'
+import { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, Remote, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, PowerSaveBlocker } from 'electron'
 import * as remote from '@electron/remote'
 
 export interface MessageBoxResponse {
@@ -15,7 +15,6 @@ export class ElectronService {
     dialog: Dialog
     clipboard: Clipboard
     globalShortcut: GlobalShortcut
-    nativeImage: typeof NativeImage
     screen: Screen
     remote: Remote
     process: any
@@ -38,7 +37,6 @@ export class ElectronService {
         this.screen = remote.screen
         this.dialog = remote.dialog
         this.globalShortcut = remote.globalShortcut
-        this.nativeImage = remote.nativeImage
         this.autoUpdater = remote.autoUpdater
         this.powerSaveBlocker = remote.powerSaveBlocker
         this.TouchBar = remote.TouchBar

+ 2 - 9
tabby-electron/src/services/touchbar.service.ts

@@ -1,17 +1,13 @@
-import { ipcRenderer, NativeImage } from 'electron'
+import { ipcRenderer } from 'electron'
 import { Injectable, NgZone } from '@angular/core'
 import { AppService, HostAppService, Platform } from 'tabby-core'
-import { ElectronService } from '../services/electron.service'
 
 /** @hidden */
 @Injectable({ providedIn: 'root' })
 export class TouchbarService {
-    private activityIcon: NativeImage
-
     private constructor (
         private app: AppService,
         private hostApp: HostAppService,
-        private electron: ElectronService,
         private zone: NgZone,
     ) {
         if (this.hostApp.platform !== Platform.macOS) {
@@ -20,9 +16,6 @@ export class TouchbarService {
         app.tabsChanged$.subscribe(() => this.update())
         app.activeTabChange$.subscribe(() => this.update())
 
-        const activityIconPath = `${electron.app.getAppPath()}/assets/activity.png`
-        this.activityIcon = this.electron.nativeImage.createFromPath(activityIconPath)
-
         app.tabOpened$.subscribe(tab => {
             tab.titleChange$.subscribe(() => this.update())
             tab.activity$.subscribe(() => this.update())
@@ -40,7 +33,7 @@ export class TouchbarService {
 
         const tabSegments = this.app.tabs.map(tab => ({
             label: this.shortenTitle(tab.title),
-            icon: this.app.activeTab !== tab && tab.hasActivity ? this.activityIcon : undefined,
+            hasActivity: this.app.activeTab !== tab && tab.hasActivity,
         }))
 
         ipcRenderer.send('window-set-touch-bar', tabSegments, this.app.activeTab ? this.app.tabs.indexOf(this.app.activeTab) : undefined)