Merge pull request #4355 from vector-im/t3chguy/electron/windows_icon_instability
explicit convert to nativeImage to stabilise trayIcon on Windows [Electron]
This commit is contained in:
commit
7d3f75ef87
|
@ -54,33 +54,38 @@ exports.create = function(win, config) {
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
trayIcon = new Tray(config.icon_path);
|
const defaultIcon = nativeImage.createFromPath(config.icon_path);
|
||||||
|
|
||||||
|
trayIcon = new Tray(defaultIcon);
|
||||||
trayIcon.setToolTip(config.brand);
|
trayIcon.setToolTip(config.brand);
|
||||||
trayIcon.setContextMenu(contextMenu);
|
trayIcon.setContextMenu(contextMenu);
|
||||||
trayIcon.on('click', toggleWin);
|
trayIcon.on('click', toggleWin);
|
||||||
|
|
||||||
let lastFavicon = null;
|
let lastFavicon = null;
|
||||||
win.webContents.on('page-favicon-updated', async function(ev, favicons) {
|
win.webContents.on('page-favicon-updated', async function(ev, favicons) {
|
||||||
let newFavicon = config.icon_path;
|
if (!favicons || favicons.length <= 0 || !favicons[0].startsWith('data:')) {
|
||||||
if (favicons && favicons.length > 0 && favicons[0].startsWith('data:')) {
|
if (lastFavicon !== null) {
|
||||||
newFavicon = favicons[0];
|
win.setIcon(defaultIcon);
|
||||||
|
trayIcon.setImage(defaultIcon);
|
||||||
|
lastFavicon = null;
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No need to change, shortcut
|
// No need to change, shortcut
|
||||||
if (newFavicon === lastFavicon) return;
|
if (favicons[0] === lastFavicon) return;
|
||||||
lastFavicon = newFavicon;
|
lastFavicon = favicons[0];
|
||||||
|
|
||||||
// if its not default we have to construct into nativeImage
|
let newFavicon = nativeImage.createFromDataURL(favicons[0]);
|
||||||
if (newFavicon !== config.icon_path) {
|
|
||||||
newFavicon = nativeImage.createFromDataURL(favicons[0]);
|
|
||||||
|
|
||||||
|
// Windows likes ico's too much.
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
try {
|
try {
|
||||||
const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico')
|
const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico');
|
||||||
const icoBuf = await pngToIco(newFavicon.toPNG());
|
fs.writeFileSync(icoPath, await pngToIco(newFavicon.toPNG()));
|
||||||
fs.writeFileSync(icoPath, icoBuf);
|
newFavicon = nativeImage.createFromPath(icoPath);
|
||||||
newFavicon = icoPath;
|
} catch (e) {
|
||||||
} catch (e) {console.error(e);}
|
console.error("Failed to make win32 ico", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue