From f5f88d3d9d265c027276c19018dd7ab60aae6007 Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Mon, 16 Aug 2021 00:03:25 +0200 Subject: [PATCH] fixed touchbar activity indicators --- app/lib/window.ts | 9 +++++++-- tabby-electron/src/services/electron.service.ts | 4 +--- tabby-electron/src/services/touchbar.service.ts | 11 ++--------- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/app/lib/window.ts b/app/lib/window.ts index ca3ebeba..c7600923 100644 --- a/app/lib/window.ts +++ b/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 private visible = new Subject() @@ -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 }) diff --git a/tabby-electron/src/services/electron.service.ts b/tabby-electron/src/services/electron.service.ts index eb40a94a..f7ee6a61 100644 --- a/tabby-electron/src/services/electron.service.ts +++ b/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 diff --git a/tabby-electron/src/services/touchbar.service.ts b/tabby-electron/src/services/touchbar.service.ts index 3f81a20a..8af277ee 100644 --- a/tabby-electron/src/services/touchbar.service.ts +++ b/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) -- GitLab