Feature/middle click open in new independent window (#1895)

* ^ Update electron 15.x

* ^ Update electron 15.x > 16.x

This fixes the issue of white flash on new window shown before event `ready-to-show`
even window created with option `backgroundColor`

* * Update `createWindow` to pass options via an object instead of positional arguments

* * Implement windows opening with new window won't be closed when "parent" window closed

* * Update new window opened via middle click to be shown immediately

Matches current behaviour and better user experience (due to elimination of delay from the click to window appearance)

* * Update new window button to show new window faster

* * Only focus on new window on event `ready-to-show` if new window is not already shown

* Update src/main/index.js

Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>

Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
This commit is contained in:
PikachuEXE 2022-02-07 04:07:39 +08:00 committed by GitHub
parent 46316bd2a7
commit bf63c864a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 20 deletions

View File

@ -108,7 +108,7 @@
"babel-loader": "^8.2.2", "babel-loader": "^8.2.2",
"copy-webpack-plugin": "^9.0.1", "copy-webpack-plugin": "^9.0.1",
"css-loader": "5.2.6", "css-loader": "5.2.6",
"electron": "^15.3.3", "electron": "^16.0.8",
"electron-builder": "^22.11.7", "electron-builder": "^22.11.7",
"electron-builder-squirrel-windows": "^22.13.1", "electron-builder-squirrel-windows": "^22.13.1",
"electron-debug": "^3.2.0", "electron-debug": "^3.2.0",

View File

@ -171,7 +171,7 @@ function runApp() {
} }
} }
async function createWindow(replaceMainWindow = true) { async function createWindow({ replaceMainWindow = true, windowStartupUrl = null, showWindowNow = false } = { }) {
/** /**
* Initial window options * Initial window options
*/ */
@ -195,7 +195,7 @@ function runApp() {
Object.assign( Object.assign(
{ {
// It will be shown later when ready via `ready-to-show` event // It will be shown later when ready via `ready-to-show` event
show: false show: showWindowNow
}, },
commonBrowserWindowOptions commonBrowserWindowOptions
) )
@ -204,16 +204,14 @@ function runApp() {
// region Ensure child windows use same options since electron 14 // region Ensure child windows use same options since electron 14
// https://github.com/electron/electron/blob/14-x-y/docs/api/window-open.md#native-window-example // https://github.com/electron/electron/blob/14-x-y/docs/api/window-open.md#native-window-example
newWindow.webContents.setWindowOpenHandler(() => { newWindow.webContents.setWindowOpenHandler((details) => {
createWindow({
replaceMainWindow: false,
showWindowNow: true,
windowStartupUrl: details.url
})
return { return {
action: 'allow', action: 'deny'
overrideBrowserWindowOptions: Object.assign(
{
// It should be visible on click
show: true
},
commonBrowserWindowOptions
)
} }
}) })
@ -257,10 +255,18 @@ function runApp() {
// load root file/url // load root file/url
if (isDev) { if (isDev) {
newWindow.loadURL('http://localhost:9080') let devStartupURL = 'http://localhost:9080'
if (windowStartupUrl != null) {
devStartupURL = windowStartupUrl
}
newWindow.loadURL(devStartupURL)
} else {
if (windowStartupUrl != null) {
newWindow.loadURL(windowStartupUrl)
} else { } else {
/* eslint-disable-next-line */ /* eslint-disable-next-line */
newWindow.loadFile(`${__dirname}/index.html`) newWindow.loadFile(`${__dirname}/index.html`)
}
global.__static = path global.__static = path
.join(__dirname, '/static') .join(__dirname, '/static')
@ -269,6 +275,8 @@ function runApp() {
// Show when loaded // Show when loaded
newWindow.once('ready-to-show', () => { newWindow.once('ready-to-show', () => {
if (newWindow.isVisible()) { return }
newWindow.show() newWindow.show()
newWindow.focus() newWindow.focus()
}) })
@ -381,7 +389,10 @@ function runApp() {
}) })
ipcMain.on(IpcChannels.CREATE_NEW_WINDOW, () => { ipcMain.on(IpcChannels.CREATE_NEW_WINDOW, () => {
createWindow(false) createWindow({
replaceMainWindow: false,
showWindowNow: true
})
}) })
ipcMain.on(IpcChannels.OPEN_IN_EXTERNAL_PLAYER, (_, payload) => { ipcMain.on(IpcChannels.OPEN_IN_EXTERNAL_PLAYER, (_, payload) => {

View File

@ -3543,10 +3543,10 @@ electron-to-chromium@^1.3.830:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz#823cb9c98f28c64c673920f1c90ea3826596eaf9" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz#823cb9c98f28c64c673920f1c90ea3826596eaf9"
integrity sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg== integrity sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg==
electron@^15.3.3: electron@^16.0.8:
version "15.3.3" version "16.0.8"
resolved "https://registry.yarnpkg.com/electron/-/electron-15.3.3.tgz#e66c6c6fbcd74641dbfafe5e101228d2b7734c7b" resolved "https://registry.yarnpkg.com/electron/-/electron-16.0.8.tgz#7ebd3e23c4883c239f53d8b7af1100f455ac8a02"
integrity sha512-tr4UaMosN6+s8vSbx6OxqRXDTTCBjjJkmDMv0b0sg8f+cRFQeY0u7xYbULpXS4B1+hHJmdh7Nz40Qpv0bJXa6w== integrity sha512-znTVkl8LaGcPNdfc6SRr+6LYg2GtSCKXln/nW/PC+urBfAFnOYIuDock8QyGVFfzr5PuAa+g8YQQAboHV77D7g==
dependencies: dependencies:
"@electron/get" "^1.13.0" "@electron/get" "^1.13.0"
"@types/node" "^14.6.2" "@types/node" "^14.6.2"