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:
David Baker 2017-06-21 15:04:36 +01:00 committed by GitHub
commit 7d3f75ef87
1 changed files with 21 additions and 16 deletions

View File

@ -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);
} }
} }