aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-client/src/main.js
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-08-25 13:05:18 +0200
committerChristophe Besson <cbesson@gmail.com>2026-08-25 13:05:18 +0200
commitc52e85b984bffc78125aff744513bc5d33ad72b3 (patch)
tree2b3227b2483fb0feb981fd790d44089971c77be4 /packages/meshbay-client/src/main.js
parent9e66c11b15b7103e963dcecf88fb152ed1e74253 (diff)
downloadmeshbay-c52e85b984bffc78125aff744513bc5d33ad72b3.tar.gz
feat(client): add app icon based on the MeshBay logo
Adds build/icon.png (1024x1024, cropped/upscaled from QE/meshbay-logo-v2.jpg) at electron-builder's default buildResources path, so packaged .deb/.rpm builds get a real icon instead of Electron's stock one. The generic `build/` gitignore rule (Python artifacts) was swallowing this legitimate source directory, so it gets an explicit exception. BrowserWindow now points at the same file for its own icon, and the process runs with --class=MeshBay so a dev run's WM_CLASS matches the StartupWMClass electron-builder derives from productName for the packaged app — kept consistent, even though the launcher/dash icon match itself only resolves once a .desktop file exists (i.e. after packaging, not in dev).
Diffstat (limited to 'packages/meshbay-client/src/main.js')
-rw-r--r--packages/meshbay-client/src/main.js11
1 files changed, 11 insertions, 0 deletions
diff --git a/packages/meshbay-client/src/main.js b/packages/meshbay-client/src/main.js
index 0517eba..91fc4fa 100644
--- a/packages/meshbay-client/src/main.js
+++ b/packages/meshbay-client/src/main.js
@@ -30,6 +30,16 @@ const os = require('node:os');
const path = require('node:path');
const { pathToFileURL } = require('node:url');
+// Linux window managers/desktop shells (GNOME's dash included) group and
+// icon-match a running window by its WM_CLASS, resolved against an installed
+// .desktop file's StartupWMClass — not against BrowserWindow's `icon` option,
+// which only sets the window's own icon (titlebar/alt-tab). Unpackaged, the
+// class defaults to "electron" and nothing matches it, so the shell falls
+// back to the generic Electron icon. A packaged build gets a correct
+// StartupWMClass from electron-builder automatically; this switch keeps dev
+// runs (`electron .`) consistent with it.
+app.commandLine.appendSwitch('class', 'MeshBay');
+
const UI_DIR = path.join(__dirname, '..', 'ui');
const SCHEME = 'app';
@@ -280,6 +290,7 @@ function createWindow() {
...bounds,
minWidth: 320,
show: false,
+ icon: path.join(__dirname, '..', 'build', 'icon.png'),
webPreferences: {
// The three that matter. `sandbox` keeps the Chromium renderer sandbox —
// the strongest one available, and the reason Electron is not the