implemented basic tray
This commit is contained in:
parent
1eb9175f82
commit
7c877e66ff
Binary file not shown.
After Width: | Height: | Size: 39 KiB |
36
index.js
36
index.js
|
@ -12,6 +12,9 @@ function createWindow () {
|
||||||
// Create the browser window.
|
// Create the browser window.
|
||||||
win = new BrowserWindow({width: 800, height: 600});
|
win = new BrowserWindow({width: 800, height: 600});
|
||||||
|
|
||||||
|
var tray = require('./tray');
|
||||||
|
tray.init(win);
|
||||||
|
|
||||||
// and load the index.html of the app.
|
// and load the index.html of the app.
|
||||||
win.loadURL(url.format({
|
win.loadURL(url.format({
|
||||||
pathname: path.join(__dirname, 'index.html'),
|
pathname: path.join(__dirname, 'index.html'),
|
||||||
|
@ -23,11 +26,19 @@ function createWindow () {
|
||||||
win.webContents.openDevTools();
|
win.webContents.openDevTools();
|
||||||
|
|
||||||
// Emitted when the window is closed.
|
// Emitted when the window is closed.
|
||||||
win.on('closed', function () {
|
win.on('close', function (e) {
|
||||||
// Dereference the window object, usually you would store windows
|
if (process.platform !== 'darwin') {
|
||||||
// in an array if your app supports multi windows, this is the time
|
if (!tray.hasTray()) {
|
||||||
// when you should delete the corresponding element.
|
app.quit();
|
||||||
win = null;
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// We are either on Mac with a dock, or a system where we want to minimize to the tray, so
|
||||||
|
// don't actually close, just hide the window.
|
||||||
|
if (!app.isQuitting) {
|
||||||
|
e.preventDefault();
|
||||||
|
win.hide();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,20 +47,17 @@ function createWindow () {
|
||||||
// Some APIs can only be used after this event occurs.
|
// Some APIs can only be used after this event occurs.
|
||||||
app.on('ready', createWindow);
|
app.on('ready', createWindow);
|
||||||
|
|
||||||
// Quit when all windows are closed.
|
// Mark the application as quitting so the logic we have to minimize to the tray on window
|
||||||
app.on('window-all-closed', function () {
|
// close doesn't prevent the proper exitting of the application.
|
||||||
// On macOS it is common for applications and their menu bar
|
app.on('before-quit', function () {
|
||||||
// to stay active until the user quits explicitly with Cmd + Q
|
app.isQuitting = true;
|
||||||
if (process.platform !== 'darwin') {
|
|
||||||
app.quit();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on('activate', function () {
|
app.on('activate', function () {
|
||||||
// On macOS it's common to re-create a window in the app when the
|
// On macOS it's common to re-create a window in the app when the
|
||||||
// dock icon is clicked and there are no other windows open.
|
// dock icon is clicked and there are no other windows open.
|
||||||
if (win === null) {
|
if (win) {
|
||||||
createWindow();
|
win.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "electron-demo",
|
"name": "electron-demo",
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"description": "Demo Electron app to use all the 'sexy' features",
|
"description": "Demo Electron app to use all the 'sexy' features",
|
||||||
"maintainers": [
|
"maintainers": [
|
||||||
"seth.gibelyou@daplie.com"
|
"seth.gibelyou@daplie.com"
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
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;
|
Loading…
Reference in New Issue