bring back event loop activator

This commit is contained in:
Atul R 2020-04-13 23:25:23 +02:00
parent a746c341ae
commit e0cddc9a7b
4 changed files with 578 additions and 1647 deletions

2189
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "@nodegui/nodegui", "name": "@nodegui/nodegui",
"version": "0.18.2", "version": "0.19.0",
"description": "A cross platform library to build native desktop apps.", "description": "A cross platform library to build native desktop apps.",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
@ -40,20 +40,20 @@
}, },
"devDependencies": { "devDependencies": {
"@types/bindings": "^1.3.0", "@types/bindings": "^1.3.0",
"@types/jest": "^25.1.1", "@types/jest": "^25.2.1",
"@types/node": "^13.9.1", "@types/node": "^13.11.1",
"@typescript-eslint/eslint-plugin": "^2.23.0", "@typescript-eslint/eslint-plugin": "^2.28.0",
"@typescript-eslint/parser": "^2.23.0", "@typescript-eslint/parser": "^2.28.0",
"clang-format": "^1.3.0", "clang-format": "^1.3.0",
"eslint": "^6.6.0", "eslint": "^6.6.0",
"eslint-config-prettier": "^6.5.0", "eslint-config-prettier": "^6.5.0",
"eslint-plugin-prettier": "^3.1.1", "eslint-plugin-prettier": "^3.1.3",
"husky": "^4.0.10", "husky": "^4.2.5",
"jest": "^25.1.0", "jest": "^25.3.0",
"prebuild": "^10.0.0", "prebuild": "^10.0.0",
"prettier": "^2.0.1", "prettier": "^2.0.4",
"ts-jest": "^25.0.0", "ts-jest": "^25.3.1",
"typedoc": "^0.17.0", "typedoc": "^0.17.4",
"typedoc-plugin-markdown": "^2.2.14", "typedoc-plugin-markdown": "^2.2.14",
"typescript": "^3.8.3" "typescript": "^3.8.3"
}, },

View File

@ -1,5 +1,6 @@
import { EventEmitter } from 'events'; import { EventEmitter } from 'events';
import { NativeElement, Component, NativeRawPointer } from './Component'; import { NativeElement, Component, NativeRawPointer } from './Component';
import { wrapWithActivateUvLoop } from '../utils/helpers';
function addDefaultErrorHandler(native: NativeElement, emitter: EventEmitter): void { function addDefaultErrorHandler(native: NativeElement, emitter: EventEmitter): void {
native.subscribeToQtEvent('error'); native.subscribeToQtEvent('error');
@ -38,7 +39,7 @@ export abstract class EventWidget<Signals extends {}> extends Component {
super(); super();
if (native.initNodeEventEmitter) { if (native.initNodeEventEmitter) {
this.emitter = new EventEmitter(); this.emitter = new EventEmitter();
this.emitter.emit = this.emitter.emit.bind(this.emitter); this.emitter.emit = wrapWithActivateUvLoop(this.emitter.emit.bind(this.emitter));
native.initNodeEventEmitter(this.emitter.emit); native.initNodeEventEmitter(this.emitter.emit);
} else { } else {
throw new Error('initNodeEventEmitter not implemented on native side'); throw new Error('initNodeEventEmitter not implemented on native side');

View File

@ -10,15 +10,14 @@ export function checkIfNapiExternal(arg: any): boolean {
return addon.NUtils.isNapiExternal(arg); return addon.NUtils.isNapiExternal(arg);
} }
// function noop(): void { function noop(): void {
// return; return;
// } }
export const wrapWithActivateUvLoop = (func: Function) => { export const wrapWithActivateUvLoop = (func: Function) => {
return (...args: any[]): any => { return (...args: any[]): any => {
// Temporarily removing activateUvLoop const activateUvLoop = (process as any).activateUvLoop || noop;
// const activateUvLoop = (process as any).activateUvLoop || noop; activateUvLoop();
// activateUvLoop();
return func(...args); return func(...args);
}; };
}; };