diff --git a/examples/api-tests/src/views.spec.js b/examples/api-tests/src/views.spec.js index cdec58bc2348f..61e57595308cd 100644 --- a/examples/api-tests/src/views.spec.js +++ b/examples/api-tests/src/views.spec.js @@ -14,6 +14,8 @@ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 // ***************************************************************************** +const { timeout } = require('@theia/core/lib/common/promise-util'); + // @ts-check describe('Views', function () { this.timeout(7500); @@ -52,24 +54,26 @@ describe('Views', function () { if (view) { assert.notEqual(shell.getAreaFor(view), contribution.defaultViewOptions.area); assert.isFalse(view.isVisible); - assert.notEqual(view, shell.activeWidget); + assert.isTrue(view !== shell.activeWidget, `${contribution.viewLabel} !== shell.activeWidget`); } view = await contribution.toggleView(); - assert.notEqual(view, undefined); + // we can't use "equals" here because Mocha chokes on the diff for certain widgets + assert.isTrue(view !== undefined, `${contribution.viewLabel} !== undefined`); assert.equal(shell.getAreaFor(view), contribution.defaultViewOptions.area); assert.isDefined(shell.getTabBarFor(view)); // @ts-ignore assert.equal(shell.getAreaFor(shell.getTabBarFor(view)), contribution.defaultViewOptions.area); assert.isTrue(view.isVisible); - assert.equal(view, shell.activeWidget); + assert.isTrue(view === shell.activeWidget, `${contribution.viewLabel} === shell.activeWidget`); view = await contribution.toggleView(); + await timeout(0); // seems that the "await" is not enought to guarantee that the panel is hidden assert.notEqual(view, undefined); assert.equal(shell.getAreaFor(view), contribution.defaultViewOptions.area); assert.isDefined(shell.getTabBarFor(view)); assert.isFalse(view.isVisible); - assert.notEqual(view, shell.activeWidget); + assert.isTrue(view !== shell.activeWidget, `${contribution.viewLabel} !== shell.activeWidget`); }); } diff --git a/packages/core/src/browser/shell/split-panels.ts b/packages/core/src/browser/shell/split-panels.ts index cb3de57c26dd7..d9f59bdf4a97a 100644 --- a/packages/core/src/browser/shell/split-panels.ts +++ b/packages/core/src/browser/shell/split-panels.ts @@ -91,13 +91,14 @@ export class SplitPositionHandler { move.resolve = resolve; move.reject = reject; if (this.splitMoves.length === 0) { - window.requestAnimationFrame(this.animationFrame.bind(this)); + setTimeout(this.animationFrame.bind(this), 10); } this.splitMoves.push(move); }); } - protected animationFrame(time: number): void { + protected animationFrame(): void { + const time = Date.now(); const move = this.splitMoves[this.currentMoveIndex]; let rejectedOrResolved = false; if (move.ended || move.referenceWidget && move.referenceWidget.isHidden) { @@ -133,7 +134,7 @@ export class SplitPositionHandler { this.currentMoveIndex = 0; } if (this.splitMoves.length > 0) { - window.requestAnimationFrame(this.animationFrame.bind(this)); + setTimeout(this.animationFrame.bind(this)); } } diff --git a/packages/core/src/electron-main/electron-main-application.ts b/packages/core/src/electron-main/electron-main-application.ts index b004fd444d07a..5a895f7ca2221 100644 --- a/packages/core/src/electron-main/electron-main-application.ts +++ b/packages/core/src/electron-main/electron-main-application.ts @@ -15,8 +15,10 @@ // ***************************************************************************** import { inject, injectable, named } from 'inversify'; -import { screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage, - nativeTheme, shell, dialog } from '../../electron-shared/electron'; +import { + screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage, + nativeTheme, shell, dialog +} from '../../electron-shared/electron'; import * as path from 'path'; import { Argv } from 'yargs'; import { AddressInfo } from 'net'; @@ -350,6 +352,9 @@ export class ElectronMainApplication { alwaysOnTop: true, show: false, transparent: true, + webPreferences: { + backgroundThrottling: false + } }); if (this.isShowWindowEarly()) { @@ -458,6 +463,7 @@ export class ElectronMainApplication { // Setting the following option to `true` causes some features to break, somehow. // Issue: https://github.com/eclipse-theia/theia/issues/8577 nodeIntegrationInWorker: false, + backgroundThrottling: false, preload: path.resolve(this.globals.THEIA_APP_PROJECT_PATH, 'lib', 'frontend', 'preload.js').toString() }, ...this.config.electron?.windowOptions || {},