diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3565c2b6..fa7c665d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: node-version: [18.x] - os: [ubuntu-latest, windows-2019, macos-latest] + os: [ubuntu-latest, windows-2025, macos-latest] steps: - uses: actions/checkout@v3 diff --git a/src/app/stores/window-store.ts b/src/app/stores/window-store.ts index efa9efae..730adebe 100644 --- a/src/app/stores/window-store.ts +++ b/src/app/stores/window-store.ts @@ -6,8 +6,8 @@ import { logger } from '../../common/logger'; import { presenceStatus } from '../presence-status-handler'; import { ICustomBrowserWindow, windowHandler } from '../window-handler'; import { + exitFullscreenAndHideWindow, getWindowByName, - hideOrMinimizeFullscreenWindow, showBadgeCount, } from '../window-utils'; @@ -60,7 +60,7 @@ export class WindowStore { ) { if (isMac) { if (isFullScreen) { - hideOrMinimizeFullscreenWindow(currentWindow); + exitFullscreenAndHideWindow(currentWindow); // No need to hide minimized windows } else if (!isMinimized) { currentWindow?.hide(); diff --git a/src/app/window-actions.ts b/src/app/window-actions.ts index 7cd9df84..b47ea946 100644 --- a/src/app/window-actions.ts +++ b/src/app/window-actions.ts @@ -216,6 +216,9 @@ export const activate = ( // Note: On window just focusing will preserve window snapped state // Hiding the window and just calling the focus() won't display the window if (isWindowsOS) { + if (!window.isVisible()) { + return window.show(); + } return window.isMinimized() ? window.restore() : window.focus(); } diff --git a/src/app/window-handler.ts b/src/app/window-handler.ts index 38e859c2..b1f11483 100644 --- a/src/app/window-handler.ts +++ b/src/app/window-handler.ts @@ -70,11 +70,11 @@ import { import { createComponentWindow, didVerifyAndRestoreWindow, + exitFullscreenAndHideWindow, getBounds, getWindowByName, handleCertificateProxyVerification, handleDownloadManager, - hideOrMinimizeFullscreenWindow, initSysTray, injectStyles, isSymphonyReachable, @@ -803,11 +803,21 @@ export class WindowHandler { minimizeOnClose === CloudConfigDataTypes.ENABLED && !this.isAutoUpdating ) { + const hasChildWindow = + BrowserWindow.getAllWindows().filter( + (window) => + (window as ICustomBrowserWindow).winName !== + apiName.notificationWindowName && + (window as ICustomBrowserWindow).winName !== + apiName.mainWindowName, + ).length > 0; + logger.info(`window-handler: has child window?`, hasChildWindow); + event.preventDefault(); if (this.mainWindow.isFullScreen()) { - hideOrMinimizeFullscreenWindow(this.mainWindow); + exitFullscreenAndHideWindow(this.mainWindow); } else { - this.mainWindow.hide(); + hasChildWindow ? this.mainWindow.minimize() : this.mainWindow.hide(); } return; } @@ -817,7 +827,7 @@ export class WindowHandler { // this is a workaround for an issue with macOS // https://github.com/electron/electron/issues/39572 if (this.mainWindow.isFullScreen()) { - hideOrMinimizeFullscreenWindow(this.mainWindow); + exitFullscreenAndHideWindow(this.mainWindow); } else { this.mainWindow.hide(); } diff --git a/src/app/window-utils.ts b/src/app/window-utils.ts index 751c5428..09bc25d7 100644 --- a/src/app/window-utils.ts +++ b/src/app/window-utils.ts @@ -1609,7 +1609,7 @@ export const loadWebContentsView = async ( return mainView.webContents; }; -export const hideOrMinimizeFullscreenWindow = (window: BrowserWindow) => { +export const exitFullscreenAndHideWindow = (window: BrowserWindow) => { window.once('leave-full-screen', () => { if (!window && !windowExists(window)) { logger.info('window-utils: window does not exists');