diff --git a/app/lib/app.ts b/app/lib/app.ts index dea1f1a3..bfe156e0 100644 --- a/app/lib/app.ts +++ b/app/lib/app.ts @@ -1,4 +1,4 @@ -import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions } from 'electron' +import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions, WebContents } from 'electron' import promiseIpc from 'electron-promise-ipc' import * as remote from '@electron/remote/main' import { exec } from 'mz/child_process' @@ -31,13 +31,9 @@ export class Application { this.useBuiltinGraphics() this.ptyManager.init(this) - ipcMain.on('app:config-change', (_event, config) => { - this.broadcast('host:config-change', config) - this.configStore = config - }) - - ipcMain.on('app:save-config', (_event, data) => { - saveConfig(data) + ipcMain.on('app:save-config', async (event, config) => { + await saveConfig(config) + this.broadcastExcept('host:config-change', event.sender, config) }) ipcMain.on('app:register-global-hotkey', (_event, specs) => { @@ -171,6 +167,14 @@ export class Application { } } + broadcastExcept (event: string, except: WebContents, ...args: any[]): void { + for (const window of this.windows) { + if (window.webContents.id === except.id) { + window.send(event, ...args) + } + } + } + async send (event: string, ...args: any[]): Promise { if (!this.hasWindows()) { await this.newWindow() diff --git a/app/lib/window.ts b/app/lib/window.ts index 02a9f3c3..6b176007 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, nativeImage } from 'electron' +import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage, WebContents } from 'electron' import ElectronConfig = require('electron-config') import { enable as enableRemote } from '@electron/remote/main' import * as os from 'os' @@ -33,6 +33,7 @@ const activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/acti export class Window { ready: Promise isMainWindow = false + webContents: WebContents private visible = new Subject() private closed = new Subject() private window?: GlasstronWindow @@ -102,6 +103,8 @@ export class Window { this.window = new glasstron.BrowserWindow(bwOptions) } + this.webContents = this.window.webContents + this.window.once('ready-to-show', () => { if (process.platform === 'darwin') { this.window.setVibrancy(macOSVibrancyType) diff --git a/tabby-core/src/api/hostApp.ts b/tabby-core/src/api/hostApp.ts index ab37a45b..a823ab82 100644 --- a/tabby-core/src/api/hostApp.ts +++ b/tabby-core/src/api/hostApp.ts @@ -38,12 +38,6 @@ export abstract class HostAppService { abstract newWindow (): void - /** - * Notifies other windows of config file changes - */ - // eslint-disable-next-line @typescript-eslint/no-empty-function - broadcastConfigChange (_configStore: Record): void { } - // eslint-disable-next-line @typescript-eslint/no-empty-function emitReady (): void { } diff --git a/tabby-core/src/services/config.service.ts b/tabby-core/src/services/config.service.ts index aa21d0c6..ead18e27 100644 --- a/tabby-core/src/services/config.service.ts +++ b/tabby-core/src/services/config.service.ts @@ -205,7 +205,6 @@ export class ConfigService { cleanStore = await this.maybeEncryptConfig(cleanStore) await this.platform.saveConfig(yaml.dump(cleanStore)) this.emitChange() - this.hostApp.broadcastConfigChange(JSON.parse(JSON.stringify(this.store))) } /** diff --git a/tabby-electron/src/services/hostApp.service.ts b/tabby-electron/src/services/hostApp.service.ts index 15f30397..8eb2d841 100644 --- a/tabby-electron/src/services/hostApp.service.ts +++ b/tabby-electron/src/services/hostApp.service.ts @@ -58,13 +58,6 @@ export class ElectronHostAppService extends HostAppService { this.electron.ipcRenderer.send('app:new-window') } - /** - * Notifies other windows of config file changes - */ - broadcastConfigChange (configStore: Record): void { - this.electron.ipcRenderer.send('app:config-change', configStore) - } - saveConfig (data: string): void { this.electron.ipcRenderer.send('app:save-config', data) }