lg-cns-ucap-messenger/main/src/lib/window-state.ts
2019-11-09 21:56:11 +09:00

55 lines
2.1 KiB
TypeScript

import { BrowserWindow } from 'electron';
import { WindowState } from '@ucap-webmessenger/native';
import { WindowStateChannel } from '@ucap-webmessenger/native-electron';
import { ElectronBrowserWindowChannel } from '@ucap-webmessenger/electron-core';
export function getWindowState(window: Electron.BrowserWindow): WindowState {
if (window.isFullScreen()) {
return WindowState.FullScreen;
} else if (window.isMaximized()) {
return WindowState.Maximized;
} else if (window.isMinimized()) {
return WindowState.Minimized;
} else if (!window.isVisible()) {
return WindowState.Hidden;
} else {
return WindowState.Normal;
}
}
export function registerWindowStateChangedEvents(window: BrowserWindow) {
window.on(ElectronBrowserWindowChannel.EnterFullScreen, () =>
sendWindowStateEvent(window, WindowState.FullScreen)
);
window.on(ElectronBrowserWindowChannel.LeaveFullScreen, () =>
sendWindowStateEvent(window, WindowState.Normal)
);
window.on(ElectronBrowserWindowChannel.Maximize, () =>
sendWindowStateEvent(window, WindowState.Maximized)
);
window.on(ElectronBrowserWindowChannel.Minimize, () =>
sendWindowStateEvent(window, WindowState.Minimized)
);
window.on(ElectronBrowserWindowChannel.Unmaximize, () =>
sendWindowStateEvent(window, WindowState.Normal)
);
window.on(ElectronBrowserWindowChannel.Restore, () =>
sendWindowStateEvent(window, WindowState.Normal)
);
window.on(ElectronBrowserWindowChannel.Hide, () =>
sendWindowStateEvent(window, WindowState.Hidden)
);
window.on(ElectronBrowserWindowChannel.Show, () => {
// because the app can be maximized before being closed - which will restore it
// maximized on the next launch - this function should inspect the current state
// rather than always assume it is a 'normal' launch
sendWindowStateEvent(window, getWindowState(window));
});
}
function sendWindowStateEvent(window: BrowserWindow, windowState: WindowState) {
window.webContents.send(WindowStateChannel.Changed, windowState);
}