95 lines
2.0 KiB
JavaScript
95 lines
2.0 KiB
JavaScript
|
var electron = require('electron');
|
||
|
var app = electron.app;
|
||
|
|
||
|
var win, tray;
|
||
|
|
||
|
function updateTrayMenu () {
|
||
|
if (!tray) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var menuTemplate = [];
|
||
|
|
||
|
if (win.isVisible()) {
|
||
|
menuTemplate.push({
|
||
|
label: 'Hide to tray',
|
||
|
click: function () { win.hide(); },
|
||
|
});
|
||
|
} else {
|
||
|
menuTemplate.push({
|
||
|
label: 'Electron Demo App',
|
||
|
click: function () { win.show(); },
|
||
|
});
|
||
|
}
|
||
|
|
||
|
menuTemplate.push({
|
||
|
label: 'Quit',
|
||
|
click: function () { app.quit(); },
|
||
|
});
|
||
|
tray.setContextMenu(electron.Menu.buildFromTemplate(menuTemplate));
|
||
|
}
|
||
|
|
||
|
// Check to see if the tray is supported on this system. This code was mostly copied from
|
||
|
// the Webtorrent project.
|
||
|
function checkLinuxTraySupport (cb) {
|
||
|
var cp = require('child_process');
|
||
|
|
||
|
cp.exec('dpkg --get-selections libappindicator1', function (err, stdout) {
|
||
|
// Unfortunately there's no cleaner way, as far as I can tell, to check
|
||
|
// whether a debian package is installed:
|
||
|
if (err) {
|
||
|
cb(err);
|
||
|
} else if (stdout.endsWith('\tinstall\n')) {
|
||
|
cb(null);
|
||
|
} else {
|
||
|
cb(new Error('debian package not installed'));
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function createTray() {
|
||
|
tray = new electron.Tray('./images/daplie-logo.png');
|
||
|
tray.on('click', function () { win.show(); });
|
||
|
updateTrayMenu();
|
||
|
}
|
||
|
|
||
|
|
||
|
function initLinux () {
|
||
|
checkLinuxTraySupport(function (err) {
|
||
|
if (!err) {
|
||
|
createTray();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
function initWin32 () {
|
||
|
createTray();
|
||
|
}
|
||
|
|
||
|
function init(window) {
|
||
|
if (win) {
|
||
|
console.error("can't initialize the tray mulitple times");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
win = window;
|
||
|
win.on('blur', updateTrayMenu);
|
||
|
win.on('focus', updateTrayMenu);
|
||
|
win.on('hide', updateTrayMenu);
|
||
|
win.on('show', updateTrayMenu);
|
||
|
|
||
|
// Mac apps generally do not have menu bar icons
|
||
|
if (process.platform === 'linux') {
|
||
|
initLinux();
|
||
|
}
|
||
|
if (process.platform === 'win32') {
|
||
|
initWin32();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function hasTray() {
|
||
|
return !!tray;
|
||
|
}
|
||
|
|
||
|
module.exports.init = init;
|
||
|
module.exports.hasTray = hasTray;
|