ELECTRON-1364 - Optimize and fix window bounds update issue (#714)

This commit is contained in:
Kiran Niranjan
2019-07-11 15:48:27 +05:30
committed by Vishwas Shashidhar
parent 15bd87613c
commit 7034640682
2 changed files with 25 additions and 35 deletions

View File

@@ -101,7 +101,7 @@ class Config {
* @param fields
*/
public getConfigFields(fields: string[]): IConfig {
logger.info(`config-handler: Trying to get config values for the fields ${fields}`);
logger.info(`config-handler: Trying to get config values for the fields`, fields);
return { ...this.getGlobalConfigFields(fields), ...this.getUserConfigFields(fields) } as IConfig;
}
@@ -111,7 +111,7 @@ class Config {
* @param fields {Array}
*/
public getUserConfigFields(fields: string[]): IConfig {
logger.info(`config-handler: Trying to get user config values for the fields ${fields}`);
logger.info(`config-handler: Trying to get user config values for the fields`, fields);
return pick(this.userConfig, fields) as IConfig;
}
@@ -121,7 +121,7 @@ class Config {
* @param fields {Array}
*/
public getGlobalConfigFields(fields: string[]): IConfig {
logger.info(`config-handler: Trying to get global config values for the fields ${fields}`);
logger.info(`config-handler: Trying to get global config values for the fields`, fields);
return pick(this.globalConfig, fields) as IConfig;
}
@@ -131,7 +131,7 @@ class Config {
* @param data {IConfig}
*/
public async updateUserConfig(data: Partial<IConfig>): Promise<void> {
logger.info(`config-handler: updating user config values with the data ${data}`);
logger.info(`config-handler: updating user config values with the data`, data);
this.userConfig = { ...this.userConfig, ...data };
try {
await writeFile(this.userConfigPath, JSON.stringify(this.userConfig), { encoding: 'utf8' });
@@ -161,7 +161,7 @@ class Config {
const filteredFields: IConfig = omit(this.userConfig, ignoreSettings) as IConfig;
// update to the new build number
filteredFields.buildNumber = buildNumber;
logger.info(`config-handler: setting first time launch for build ${buildNumber}`);
logger.info(`config-handler: setting first time launch for build`, buildNumber);
return await this.updateUserConfig(filteredFields);
}
}
@@ -179,7 +179,7 @@ class Config {
}
try {
parsedData = JSON.parse(data);
logger.info(`config-handler: parsed JSON file with data ${JSON.stringify(parsedData)}`);
logger.info(`config-handler: parsed JSON file with data`, parsedData);
} catch (e) {
logger.error(`config-handler: parsing JSON file failed due to error ${e}`);
throw new Error(e);

View File

@@ -23,7 +23,7 @@ const PERMISSIONS_NAMESPACE = 'Permissions';
const saveWindowSettings = async (): Promise<void> => {
const browserWindow = BrowserWindow.getFocusedWindow() as ICustomBrowserWindow;
if (browserWindow && !browserWindow.isDestroyed()) {
if (browserWindow && windowExists(browserWindow)) {
const [ x, y ] = browserWindow.getPosition();
const [ width, height ] = browserWindow.getSize();
if (x && y && width && height) {
@@ -31,7 +31,11 @@ const saveWindowSettings = async (): Promise<void> => {
// Update the config file
if (browserWindow.winName === apiName.mainWindowName) {
await config.updateUserConfig({ mainWinPos: { x, y, width, height } });
const isMaximized = browserWindow.isMaximized();
const isFullScreen = browserWindow.isFullScreen();
browserWindow.webContents.send(isFullScreen ? 'window-enter-full-screen' : 'window-leave-full-screen');
const { mainWinPos } = config.getUserConfigFields([ 'mainWinPos' ]);
await config.updateUserConfig({ mainWinPos: { ...mainWinPos, ...{ x, y, width, height, isMaximized, isFullScreen } } });
}
}
}
@@ -43,30 +47,16 @@ const windowMaximized = async (): Promise<void> => {
if (browserWindow && windowExists(browserWindow) && browserWindow.winName === apiName.mainWindowName) {
const isMaximized = browserWindow.isMaximized();
const isFullScreen = browserWindow.isFullScreen();
if (isFullScreen) {
browserWindow.webContents.send('window-enter-full-screen');
}
browserWindow.webContents.send(isFullScreen ? 'window-enter-full-screen' : 'window-leave-full-screen');
const { mainWinPos } = config.getUserConfigFields([ 'mainWinPos' ]);
await config.updateUserConfig({ mainWinPos: { ...mainWinPos, ...{ isMaximized, isFullScreen } } });
}
};
const windowUnmaximized = async (): Promise<void> => {
const browserWindow = BrowserWindow.getFocusedWindow() as ICustomBrowserWindow;
if (browserWindow && windowExists(browserWindow) && browserWindow.winName === apiName.mainWindowName) {
const isMaximized = browserWindow.isMaximized();
const isFullScreen = browserWindow.isFullScreen();
if (!isFullScreen) {
browserWindow.webContents.send('window-leave-full-screen');
}
const { mainWinPos } = config.getUserConfigFields([ 'mainWinPos' ]);
await config.updateUserConfig({ mainWinPos: { ...mainWinPos, ...{ isMaximized, isFullScreen } } });
}
};
const throttledWindowChanges = throttle(saveWindowSettings, 1000);
const throttledWindowMaximized = throttle(windowMaximized, 1000);
const throttledWindowUnmaximized = throttle(windowUnmaximized, 1000);
const throttledWindowChanges = throttle(async () => {
await saveWindowSettings();
await windowMaximized();
}, 1000);
/**
* Tries finding a window we have created with given name. If found, then
@@ -180,11 +170,11 @@ export const monitorWindowActions = (window: BrowserWindow): void => {
window.on(event, throttledWindowChanges);
}
});
window.on('enter-full-screen', throttledWindowMaximized);
window.on('maximize', throttledWindowMaximized);
window.on('enter-full-screen', throttledWindowChanges);
window.on('maximize', throttledWindowChanges);
window.on('leave-full-screen', throttledWindowUnmaximized);
window.on('unmaximize', throttledWindowUnmaximized);
window.on('leave-full-screen', throttledWindowChanges);
window.on('unmaximize', throttledWindowChanges);
};
/**
@@ -203,11 +193,11 @@ export const removeWindowEventListener = (window: BrowserWindow): void => {
window.removeListener(event, throttledWindowChanges);
}
});
window.removeListener('enter-full-screen', throttledWindowMaximized);
window.removeListener('maximize', throttledWindowMaximized);
window.removeListener('enter-full-screen', throttledWindowChanges);
window.removeListener('maximize', throttledWindowChanges);
window.removeListener('leave-full-screen', throttledWindowUnmaximized);
window.removeListener('unmaximize', throttledWindowUnmaximized);
window.removeListener('leave-full-screen', throttledWindowChanges);
window.removeListener('unmaximize', throttledWindowChanges);
};
/**