mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-11-03 13:33:18 +00:00
restore window position [WIP] #231
This commit is contained in:
@@ -4,18 +4,14 @@ const electron = require('electron');
|
|||||||
const {app} = require('electron');
|
const {app} = require('electron');
|
||||||
const ipc = require('electron').ipcMain;
|
const ipc = require('electron').ipcMain;
|
||||||
const electronLocalshortcut = require('electron-localshortcut');
|
const electronLocalshortcut = require('electron-localshortcut');
|
||||||
const Configstore = require('electron-config');
|
|
||||||
const isDev = require('electron-is-dev');
|
const isDev = require('electron-is-dev');
|
||||||
|
const windowStateKeeper = require('electron-window-state');
|
||||||
const appMenu = require('./menu');
|
const appMenu = require('./menu');
|
||||||
const {appUpdater} = require('./autoupdater');
|
const {appUpdater} = require('./autoupdater');
|
||||||
|
|
||||||
// Adds debug features like hotkeys for triggering dev tools and reload
|
// Adds debug features like hotkeys for triggering dev tools and reload
|
||||||
require('electron-debug')();
|
require('electron-debug')();
|
||||||
|
|
||||||
const conf = new Configstore();
|
|
||||||
|
|
||||||
// Setting userAgent so that server-side code can identify the desktop app
|
|
||||||
|
|
||||||
// Prevent window being garbage collected
|
// Prevent window being garbage collected
|
||||||
let mainWindow;
|
let mainWindow;
|
||||||
|
|
||||||
@@ -49,12 +45,19 @@ const iconPath = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function createMainWindow() {
|
function createMainWindow() {
|
||||||
|
// Load the previous state with fallback to defaults
|
||||||
|
const mainWindowState = windowStateKeeper({
|
||||||
|
defaultWidth: 1000,
|
||||||
|
defaultHeight: 600
|
||||||
|
});
|
||||||
const win = new electron.BrowserWindow({
|
const win = new electron.BrowserWindow({
|
||||||
// This settings needs to be saved in config
|
// This settings needs to be saved in config
|
||||||
title: 'Zulip',
|
title: 'Zulip',
|
||||||
width: conf.get('width') || 1000,
|
|
||||||
height: conf.get('height') || 600,
|
|
||||||
icon: iconPath(),
|
icon: iconPath(),
|
||||||
|
x: mainWindowState.x,
|
||||||
|
y: mainWindowState.y,
|
||||||
|
width: mainWindowState.width,
|
||||||
|
height: mainWindowState.height,
|
||||||
minWidth: 600,
|
minWidth: 600,
|
||||||
minHeight: 500,
|
minHeight: 500,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
@@ -93,20 +96,6 @@ function createMainWindow() {
|
|||||||
|
|
||||||
win.setTitle('Zulip');
|
win.setTitle('Zulip');
|
||||||
|
|
||||||
// Let's save browser window position
|
|
||||||
if (conf.get('x') || conf.get('y')) {
|
|
||||||
win.setPosition(conf.get('x'), conf.get('y'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conf.get('maximize')) {
|
|
||||||
win.maximize();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle sizing events so we can persist them.
|
|
||||||
win.on('maximize', () => {
|
|
||||||
conf.set('maximize', true);
|
|
||||||
});
|
|
||||||
|
|
||||||
win.on('enter-full-screen', () => {
|
win.on('enter-full-screen', () => {
|
||||||
win.webContents.send('enter-fullscreen');
|
win.webContents.send('enter-fullscreen');
|
||||||
});
|
});
|
||||||
@@ -115,28 +104,6 @@ function createMainWindow() {
|
|||||||
win.webContents.send('leave-fullscreen');
|
win.webContents.send('leave-fullscreen');
|
||||||
});
|
});
|
||||||
|
|
||||||
win.on('unmaximize', () => {
|
|
||||||
conf.set('maximize', false);
|
|
||||||
});
|
|
||||||
|
|
||||||
win.on('resize', function () {
|
|
||||||
const size = this.getSize();
|
|
||||||
conf.set({
|
|
||||||
width: size[0],
|
|
||||||
height: size[1]
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// On osx it's 'moved'
|
|
||||||
win.on('move', function () {
|
|
||||||
const pos = this.getPosition();
|
|
||||||
// Let's not allow negative positions
|
|
||||||
conf.set({
|
|
||||||
x: pos[0] > 0 ? pos[0] : 0,
|
|
||||||
y: pos[1] > 0 ? pos[1] : 0
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// To destroy tray icon when navigate to a new URL
|
// To destroy tray icon when navigate to a new URL
|
||||||
win.webContents.on('will-navigate', e => {
|
win.webContents.on('will-navigate', e => {
|
||||||
if (e) {
|
if (e) {
|
||||||
@@ -144,6 +111,11 @@ function createMainWindow() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Let us register listeners on the window, so we can update the state
|
||||||
|
// automatically (the listeners will be removed when the window is closed)
|
||||||
|
// and restore the maximized or full screen state
|
||||||
|
mainWindowState.manage(win);
|
||||||
|
|
||||||
return win;
|
return win;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
"InstantMessaging"
|
"InstantMessaging"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"electron-config": "0.2.1",
|
|
||||||
"electron-debug": "1.1.0",
|
"electron-debug": "1.1.0",
|
||||||
"electron-is-dev": "0.1.2",
|
"electron-is-dev": "0.1.2",
|
||||||
"electron-localshortcut": "1.0.0",
|
"electron-localshortcut": "1.0.0",
|
||||||
@@ -37,6 +36,7 @@
|
|||||||
"https": "^1.0.0",
|
"https": "^1.0.0",
|
||||||
"node-json-db": "0.7.3",
|
"node-json-db": "0.7.3",
|
||||||
"request": "2.79.0",
|
"request": "2.79.0",
|
||||||
"wurl": "2.1.0"
|
"wurl": "2.1.0",
|
||||||
|
"electron-window-state": "4.1.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user