summaryrefslogtreecommitdiffhomepage
path: root/desktop
diff options
context:
space:
mode:
authorOskar <oskar@mullvad.net>2024-11-13 15:13:47 +0100
committerOskar <oskar@mullvad.net>2024-11-14 16:43:39 +0100
commit2c9d60d7b68df39fa5cc0b76bd8f9755d33df255 (patch)
tree19350f1547e56ab2b8f4b6017049c930994f7fa4 /desktop
parentd36acf1176bd3ee5a3a2fc5d8241fb0eca7dfb96 (diff)
downloadmullvadvpn-2c9d60d7b68df39fa5cc0b76bd8f9755d33df255.tar.xz
mullvadvpn-2c9d60d7b68df39fa5cc0b76bd8f9755d33df255.zip
Replace `nseventmonitor` with `nseventforwarder`
Diffstat (limited to 'desktop')
-rw-r--r--desktop/package-lock.json32
-rw-r--r--desktop/packages/mullvad-vpn/gulpfile.js5
-rw-r--r--desktop/packages/mullvad-vpn/package.json7
-rw-r--r--desktop/packages/mullvad-vpn/src/main/user-interface.ts14
-rw-r--r--desktop/packages/mullvad-vpn/tasks/distribution.js35
-rw-r--r--desktop/packages/mullvad-vpn/tasks/scripts.js10
-rw-r--r--desktop/packages/nseventforwarder/build.sh2
7 files changed, 52 insertions, 53 deletions
diff --git a/desktop/package-lock.json b/desktop/package-lock.json
index f454d28091..5f146d52b1 100644
--- a/desktop/package-lock.json
+++ b/desktop/package-lock.json
@@ -10011,6 +10011,7 @@
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
"integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
+ "dev": true,
"optional": true
},
"node_modules/nanoid": {
@@ -10183,20 +10184,6 @@
"resolved": "packages/nseventforwarder",
"link": true
},
- "node_modules/nseventmonitor": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nseventmonitor/-/nseventmonitor-1.0.5.tgz",
- "integrity": "sha512-CP1Qvr3yAY08o+2KpNUMjVTM6KM37sQEgRp+3KvzWCcutzwQwsUy4IkixModqgmxqB3BP281SRlizqOnf7sk0w==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "dependencies": {
- "@mapbox/node-pre-gyp": "^1.0.11",
- "nan": "^2.19.0"
- }
- },
"node_modules/number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@@ -14624,6 +14611,7 @@
"gl-matrix": "^3.4.3",
"google-protobuf": "^3.21.0",
"node-gettext": "^3.0.0",
+ "nseventforwarder": "0.0.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-redux": "^7.2.9",
@@ -14677,8 +14665,7 @@
"xvfb-maybe": "^0.2.1"
},
"optionalDependencies": {
- "grpc-tools": "^1.12.4",
- "nseventmonitor": "^1.0.5"
+ "grpc-tools": "^1.12.4"
}
},
"packages/nseventforwarder": {
@@ -22538,7 +22525,7 @@
"gulp-typescript": "^6.0.0-alpha.1",
"mocha": "^10.2.0",
"node-gettext": "^3.0.0",
- "nseventmonitor": "^1.0.5",
+ "nseventforwarder": "0.0.0",
"playwright": "^1.41.1",
"postject": "^1.0.0-alpha.6",
"react": "^18.3.1",
@@ -22566,6 +22553,7 @@
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
"integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
+ "dev": true,
"optional": true
},
"nanoid": {
@@ -22707,16 +22695,6 @@
"@neon-rs/load": "^0.1.73"
}
},
- "nseventmonitor": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nseventmonitor/-/nseventmonitor-1.0.5.tgz",
- "integrity": "sha512-CP1Qvr3yAY08o+2KpNUMjVTM6KM37sQEgRp+3KvzWCcutzwQwsUy4IkixModqgmxqB3BP281SRlizqOnf7sk0w==",
- "optional": true,
- "requires": {
- "@mapbox/node-pre-gyp": "^1.0.11",
- "nan": "^2.19.0"
- }
- },
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
diff --git a/desktop/packages/mullvad-vpn/gulpfile.js b/desktop/packages/mullvad-vpn/gulpfile.js
index 072e3652e0..ff5a82df17 100644
--- a/desktop/packages/mullvad-vpn/gulpfile.js
+++ b/desktop/packages/mullvad-vpn/gulpfile.js
@@ -23,7 +23,10 @@ task(
'build',
series('clean', 'set-prod-env', parallel(assets.copyAll, scripts.buildProto), scripts.build),
);
-task('develop', series('clean', 'set-dev-env', scripts.buildProto, watch.start));
+task(
+ 'develop',
+ series('clean', 'set-dev-env', scripts.buildProto, scripts.buildNseventforwarder, watch.start),
+);
task('pack-win', series('build', dist.packWin));
task('pack-linux', series('build', dist.packLinux));
task('pack-mac', series('build', dist.packMac));
diff --git a/desktop/packages/mullvad-vpn/package.json b/desktop/packages/mullvad-vpn/package.json
index 104291e824..b67b7e7421 100644
--- a/desktop/packages/mullvad-vpn/package.json
+++ b/desktop/packages/mullvad-vpn/package.json
@@ -25,11 +25,11 @@
"redux": "^4.2.0",
"simple-plist": "^1.3.1",
"sprintf-js": "^1.1.2",
- "styled-components": "^6.1.0"
+ "styled-components": "^6.1.0",
+ "nseventforwarder": "0.0.0"
},
"optionalDependencies": {
- "grpc-tools": "^1.12.4",
- "nseventmonitor": "^1.0.5"
+ "grpc-tools": "^1.12.4"
},
"devDependencies": {
"@playwright/test": "^1.41.1",
@@ -76,7 +76,6 @@
},
"scripts": {
"preinstall": "test -d node_modules || mkdir node_modules",
- "postinstall": "cross-env ELECTRON_BUILDER_ALLOW_UNRESOLVED_DEPENDENCIES=true electron-builder install-app-deps",
"build": "gulp build",
"build-proto": "gulp build-proto",
"pack-test-executable": "./scripts/build-test-executable.sh",
diff --git a/desktop/packages/mullvad-vpn/src/main/user-interface.ts b/desktop/packages/mullvad-vpn/src/main/user-interface.ts
index f7b81247ff..a079246373 100644
--- a/desktop/packages/mullvad-vpn/src/main/user-interface.ts
+++ b/desktop/packages/mullvad-vpn/src/main/user-interface.ts
@@ -487,7 +487,7 @@ export default class UserInterface implements WindowControllerDelegate {
});
}
- // setup NSEvent monitor to fix inconsistent window.blur on macOS
+ // setup NSEvent forwarder to fix inconsistent window.blur on macOS
// see https://github.com/electron/electron/issues/8689
private installMacOsMenubarAppWindowHandlers() {
if (this.delegate.isUnpinnedWindow()) {
@@ -495,14 +495,14 @@ export default class UserInterface implements WindowControllerDelegate {
}
// eslint-disable-next-line @typescript-eslint/no-require-imports
- const { NSEventMonitor, NSEventMask } = require('nseventmonitor');
- const macEventMonitor = new NSEventMonitor();
- const eventMask = NSEventMask.leftMouseDown | NSEventMask.rightMouseDown;
+ const nseventforwarder = require('nseventforwarder');
+ let nseventforwarderStop: ReturnType<typeof nseventforwarder.start>;
- this.windowController.window?.on('show', () =>
- macEventMonitor.start(eventMask, () => this.windowController.hide()),
+ this.windowController.window?.on(
+ 'show',
+ () => (nseventforwarderStop = nseventforwarder.start(() => this.windowController.hide())),
);
- this.windowController.window?.on('hide', () => macEventMonitor.stop());
+ this.windowController.window?.on('hide', () => nseventforwarderStop?.());
this.windowController.window?.on('blur', () => {
// Make sure to hide the menubar window when other program captures the focus.
// But avoid doing that when dev tools capture the focus to make it possible to inspect the UI
diff --git a/desktop/packages/mullvad-vpn/tasks/distribution.js b/desktop/packages/mullvad-vpn/tasks/distribution.js
index c99be22fda..b3a4260434 100644
--- a/desktop/packages/mullvad-vpn/tasks/distribution.js
+++ b/desktop/packages/mullvad-vpn/tasks/distribution.js
@@ -60,7 +60,7 @@ const config = {
'node_modules/',
'!node_modules/grpc-tools',
'!node_modules/@types',
- '!node_modules/nseventmonitor/build/Release',
+ '!node_modules/nseventforwarder/target',
],
// Make sure that all files declared in "extraResources" exists and abort if they don't.
@@ -84,7 +84,7 @@ const config = {
target: 'pkg',
arch: getMacArch(),
},
- singleArchFiles: 'node_modules/nseventmonitor/lib/binding/Release/**',
+ singleArchFiles: 'node_modules/nseventforwarder/dist/**',
artifactName: 'MullvadVPN-${version}.${ext}',
category: 'public.app-category.tools',
icon: distAssets('icon-macos.icns'),
@@ -329,13 +329,15 @@ function packMac() {
config: {
...config,
asarUnpack: ['**/*.node'],
- beforeBuild: (options) => {
+ beforeBuild: async (options) => {
switch (options.arch) {
case 'x64':
process.env.TARGET_TRIPLE = 'x86_64-apple-darwin';
+ execFileSync('npm', ['-w', 'nseventforwarder', 'run', 'build-x86']);
break;
case 'arm64':
process.env.TARGET_TRIPLE = 'aarch64-apple-darwin';
+ execFileSync('npm', ['-w', 'nseventforwarder', 'run', 'build-arm']);
break;
default:
delete process.env.TARGET_TRIPLE;
@@ -348,17 +350,7 @@ function packMac() {
return true;
},
beforePack: async (context) => {
- try {
- // `@electron/universal` tries to lipo together libraries built for the same architecture
- // if they're present for both targets. So make sure we remove libraries for other archs.
- // Remove the workaround once the issue has been fixed:
- // https://github.com/electron/universal/issues/41#issuecomment-1496288834
- await fs.promises.rm('node_modules/nseventmonitor/lib/binding/Release', {
- recursive: true,
- });
- } catch {
- // noop
- }
+ await removeNseventforwarderNativeModules();
config.beforePack?.(context);
},
afterPack: (context) => {
@@ -538,6 +530,21 @@ function productVersion(extraArgs) {
return execFileSync('cargo', args, { encoding: 'utf-8' }).trim();
}
+// `@electron/universal` tries to lipo together libraries built for the same architecture
+// if they're present for both targets. So make sure we remove libraries for other archs.
+// Remove the workaround once the issue has been fixed:
+// https://github.com/electron/universal/issues/41#issuecomment-1496288834
+//
+// dist/darwin-x64/index.node
+// dist/darwin-arm64/index.node
+async function removeNseventforwarderNativeModules() {
+ try {
+ await fs.promises.rm('../../node_modules/nseventforwarder/dist/', { recursive: true });
+ } catch {
+ // noop
+ }
+}
+
packWin.displayName = 'builder-win';
packMac.displayName = 'builder-mac';
packLinux.displayName = 'builder-linux';
diff --git a/desktop/packages/mullvad-vpn/tasks/scripts.js b/desktop/packages/mullvad-vpn/tasks/scripts.js
index 20acc69c35..9074cd1f1d 100644
--- a/desktop/packages/mullvad-vpn/tasks/scripts.js
+++ b/desktop/packages/mullvad-vpn/tasks/scripts.js
@@ -113,12 +113,22 @@ function buildProto(callback) {
exec('bash ./scripts/build-proto.sh', (err) => callback(err));
}
+function buildNseventforwarder(callback) {
+ if (process.platform === 'darwin') {
+ exec('npm -w nseventforwarder run build-debug', (err) => callback(err));
+ } else {
+ callback();
+ }
+}
+
compileScripts.displayName = 'compile-scripts';
buildProto.displayName = 'build-proto';
+buildNseventforwarder.displayName = 'build-nseventforwarder';
exports.build = series(
compileScripts,
parallel(makeBrowserifyPreload(false), makeBrowserifyRenderer(false)),
);
exports.buildProto = buildProto;
+exports.buildNseventforwarder = buildNseventforwarder;
exports.makeWatchCompiler = makeWatchCompiler;
diff --git a/desktop/packages/nseventforwarder/build.sh b/desktop/packages/nseventforwarder/build.sh
index 53d39c762f..0b72762132 100644
--- a/desktop/packages/nseventforwarder/build.sh
+++ b/desktop/packages/nseventforwarder/build.sh
@@ -38,6 +38,8 @@ case "$TARGET_TRIPLE" in
esac
if [[ "$(uname -s)" == "Darwin" ]]; then
+ # We rely (heavily) on a pre-defined CARGO_TARGET_DIR, so don't let any user override it
+ unset CARGO_TARGET_DIR
npm run cargo-build -- --release --target "$TARGET_TRIPLE"
# Copy the neon library to the correct dists folder, which is what node will
# pick up when loading the library at runtime.