diff --git a/packages/frontend/core/src/bootstrap/setup.ts b/packages/frontend/core/src/bootstrap/setup.ts index 59dbfe7ebaad6..9e5c308680ef8 100644 --- a/packages/frontend/core/src/bootstrap/setup.ts +++ b/packages/frontend/core/src/bootstrap/setup.ts @@ -1,6 +1,7 @@ import './register-blocksuite-components'; import './edgeless-template'; +import { apis, events } from '@affine/electron-api'; import { setupGlobal } from '@affine/env/global'; import * as Sentry from '@sentry/react'; import { useEffect } from 'react'; @@ -51,10 +52,16 @@ export function setup() { // load persistent config for electron // TODO: should be sync, but it's not necessary for now - environment.isDesktop && + if (environment.isDesktop) { appConfigProxy .getSync() .catch(() => console.error('failed to load app config')); + const handleMaximized = (maximized: boolean | undefined) => { + document.documentElement.dataset.maximized = String(maximized); + }; + apis?.ui.isMaximized().then(handleMaximized).catch(console.error); + events?.ui.onMaximized(handleMaximized); + } performanceSetupLogger.info('done'); } diff --git a/packages/frontend/electron-api/src/index.ts b/packages/frontend/electron-api/src/index.ts index 2cccdddc6a07b..ade64fcfca145 100644 --- a/packages/frontend/electron-api/src/index.ts +++ b/packages/frontend/electron-api/src/index.ts @@ -21,7 +21,11 @@ type ClientHandler = { arg0: any, ...rest: infer A ) => any - ? (...args: A) => Promise> + ? ( + ...args: A + ) => ReturnType extends Promise + ? ReturnType + : Promise> : never; }; } & HelperHandlers; diff --git a/packages/frontend/electron/src/main/main-window.ts b/packages/frontend/electron/src/main/main-window.ts index f8505d2a9af5a..f66870f4f4a89 100644 --- a/packages/frontend/electron/src/main/main-window.ts +++ b/packages/frontend/electron/src/main/main-window.ts @@ -93,6 +93,10 @@ async function createWindow(additionalArguments: string[]) { ); logger.info('main window is ready to show'); + + if (browserWindow.isMaximized() || browserWindow.isFullScreen()) { + uiSubjects.onMaximized.next(true); + } }); browserWindow.on('close', e => { diff --git a/packages/frontend/electron/src/main/ui/handlers.ts b/packages/frontend/electron/src/main/ui/handlers.ts index b43e40b29a9e8..5a30c2f761446 100644 --- a/packages/frontend/electron/src/main/ui/handlers.ts +++ b/packages/frontend/electron/src/main/ui/handlers.ts @@ -12,6 +12,10 @@ import { getChallengeResponse } from './challenge'; import { getGoogleOauthCode } from './google-auth'; export const uiHandlers = { + isMaximized: async () => { + const window = await getMainWindow(); + return window?.isMaximized(); + }, handleThemeChange: async (_, theme: (typeof nativeTheme)['themeSource']) => { nativeTheme.themeSource = theme; },