fix: load the linux tray icon reliably and log tray failures (#1332)

This commit is contained in:
LukeGus committed 2026-09-30 12:15:35 -05:00
1 parent da588f8fa1
commit 71bbec7084
1 file changed
+38 -4
+38 -4
View File
@@ -1310,7 +1310,16 @@ function createTray() {
} else if (process.platform === "win32") { } else if (process.platform === "win32") {
trayIcon = path.join(publicRoot, "icon.ico"); trayIcon = path.join(publicRoot, "icon.ico");
} else { } else {
trayIcon = path.join(publicRoot, "icons", "32x32.png"); trayIcon = loadLinuxTrayIcon(nativeImage, publicRoot);
if (!trayIcon) {
logToFile("Tray icon not found, skipping the system tray");
return;
}
if (/gnome/i.test(process.env.XDG_CURRENT_DESKTOP || "")) {
logToFile(
"GNOME shows tray icons only with the AppIndicator extension installed",
);
}
} }
tray = new Tray(trayIcon); tray = new Tray(trayIcon);
@@ -1348,12 +1357,29 @@ function createTray() {
} }
}); });
console.log("System tray created successfully"); logToFile("System tray created");
} catch (err) { } catch (err) {
console.error("Failed to create system tray:", err); tray = null;
logToFile("Failed to create system tray:", err?.message || String(err));
} }
} }
function loadLinuxTrayIcon(nativeImage, publicRoot) {
const roots = [
publicRoot,
path.join(process.resourcesPath || "", "app.asar.unpacked", "public"),
];
for (const root of roots) {
for (const size of ["32x32", "24x24", "48x48"]) {
const image = nativeImage.createFromPath(
path.join(root, "icons", `${size}.png`),
);
if (!image.isEmpty()) return image;
}
}
return null;
}
function createWindow() { function createWindow() {
const appVersion = app.getVersion(); const appVersion = app.getVersion();
const electronVersion = process.versions.electron; const electronVersion = process.versions.electron;
@@ -1555,7 +1581,15 @@ function createWindow() {
mainWindow.on("close", (event) => { mainWindow.on("close", (event) => {
if (!isQuitting && tray && !tray.isDestroyed()) { if (!isQuitting && tray && !tray.isDestroyed()) {
event.preventDefault(); event.preventDefault();
mainWindow.hide(); // Stock GNOME has no tray to bring a hidden window back from.
if (
process.platform === "linux" &&
/gnome/i.test(process.env.XDG_CURRENT_DESKTOP || "")
) {
mainWindow.minimize();
} else {
mainWindow.hide();
}
} }
}); });