diff --git a/main.js b/main.js index a74b56c49..4fbbfd365 100644 --- a/main.js +++ b/main.js @@ -319,12 +319,7 @@ function handleCommonWindowEvents(window) { } if (window.webContents) { - window.webContents.send('callbacks:call:setPassiveZoomFactor', [ - zoomFactor, - ]); - if (settingsWindow && settingsWindow.webContents) { - settingsWindow.webContents.send('render'); - } + window.webContents.send('callbacks:call:persistZoomFactor', [zoomFactor]); } lastZoomFactor = zoomFactor; diff --git a/ts/shims/dispatchItemsMiddleware.ts b/ts/shims/dispatchItemsMiddleware.ts index 4f921ee3a..e65b99f51 100644 --- a/ts/shims/dispatchItemsMiddleware.ts +++ b/ts/shims/dispatchItemsMiddleware.ts @@ -9,6 +9,7 @@ import { COLORS_CHANGED, COLOR_SELECTED } from '../state/ducks/conversations'; export const dispatchItemsMiddleware: Middleware = ({ getState, }) => next => action => { + const result = next(action); if ( action.type === 'items/PUT' || action.type === 'items/PUT_EXTERNAL' || @@ -20,6 +21,5 @@ export const dispatchItemsMiddleware: Middleware = ({ ) { ipcRenderer.send('preferences-changed', getState().items); } - - return next(action); + return result; }; diff --git a/ts/util/createIPCEvents.ts b/ts/util/createIPCEvents.ts index 93fa134fa..833b9bee7 100644 --- a/ts/util/createIPCEvents.ts +++ b/ts/util/createIPCEvents.ts @@ -107,7 +107,7 @@ export type IPCEventsCallbacksType = { customColor?: { id: string; value: CustomColorType } ) => void; getDefaultConversationColor: () => DefaultConversationColorType; - setPassiveZoomFactor: (factor: number) => Promise; + persistZoomFactor: (factor: number) => Promise; }; type ValuesWithGetters = Omit< @@ -507,7 +507,7 @@ export function createIPCEvents( getMediaPermissions: window.getMediaPermissions, getMediaCameraPermissions: window.getMediaCameraPermissions, - setPassiveZoomFactor: zoomFactor => + persistZoomFactor: zoomFactor => window.storage.put('zoomFactor', zoomFactor), ...overrideEvents, diff --git a/ts/util/preload.ts b/ts/util/preload.ts index 85b28a308..d1fe16f16 100644 --- a/ts/util/preload.ts +++ b/ts/util/preload.ts @@ -181,7 +181,7 @@ export function installCallback( ); } catch (error) { ipcRenderer.send( - `callbacks:call-success;${name}`, + `callbacks:call-success:${name}`, error && error.stack ? error.stack : error ); } diff --git a/ts/windows/preload.ts b/ts/windows/preload.ts index 5f4189049..5b1547ead 100644 --- a/ts/windows/preload.ts +++ b/ts/windows/preload.ts @@ -16,7 +16,7 @@ installCallback('resetAllChatColors'); installCallback('resetDefaultChatColor'); installCallback('setGlobalDefaultConversationColor'); installCallback('getDefaultConversationColor'); -installCallback('setPassiveZoomFactor'); +installCallback('persistZoomFactor'); // Getters only. These are set by the primary device installSetting('blockedCount', { diff --git a/ts/windows/settings/preload.ts b/ts/windows/settings/preload.ts index 2dbd329c7..315dea910 100644 --- a/ts/windows/settings/preload.ts +++ b/ts/windows/settings/preload.ts @@ -160,7 +160,7 @@ function getSystemTraySettingValues( }; } -window.renderPreferences = async () => { +const renderPreferences = async () => { if (!renderComponent) { setTimeout(window.renderPreferences, 100); return; @@ -373,7 +373,13 @@ window.renderPreferences = async () => { onUniversalExpireTimerChange: reRender( settingUniversalExpireTimer.setValue ), - onZoomFactorChange: reRender(settingZoomFactor.setValue), + + // Zoom factor change doesn't require immediate rerender since it will: + // 1. Update the zoom factor in the main window + // 2. Trigger `preferred-size-changed` in the main process + // 3. Finally result in `window.storage` update which will cause the + // rerender. + onZoomFactorChange: settingZoomFactor.setValue, i18n: window.i18n, }; @@ -381,11 +387,14 @@ window.renderPreferences = async () => { function reRender(f: (value: Value) => Promise) { return async (value: Value) => { await f(value); - window.renderPreferences(); + renderPreferences(); }; } renderComponent(Preferences, props); }; +window.renderPreferences = renderPreferences; initializeLogging(); + +ipcRenderer.on('render', () => renderPreferences());