mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
Add tray (#2325)
* copied tray from old thread * added visibility changer to tray
This commit is contained in:
parent
8996f35cc0
commit
fcc0a80f4e
@ -4,6 +4,7 @@ const {app, globalShortcut} = require('electron');
|
|||||||
const sqlInit = require('./src/services/sql_init');
|
const sqlInit = require('./src/services/sql_init');
|
||||||
const appIconService = require('./src/services/app_icon');
|
const appIconService = require('./src/services/app_icon');
|
||||||
const windowService = require('./src/services/window');
|
const windowService = require('./src/services/window');
|
||||||
|
const tray = require('./src/services/tray');
|
||||||
|
|
||||||
// Adds debug features like hotkeys for triggering dev tools and reload
|
// Adds debug features like hotkeys for triggering dev tools and reload
|
||||||
require('electron-debug')();
|
require('electron-debug')();
|
||||||
@ -35,6 +36,8 @@ app.on('ready', async () => {
|
|||||||
await windowService.createSetupWindow();
|
await windowService.createSetupWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tray.createTray()
|
||||||
|
|
||||||
await windowService.registerGlobalShortcuts();
|
await windowService.registerGlobalShortcuts();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
12
package-lock.json
generated
12
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "trilium",
|
"name": "trilium",
|
||||||
"version": "0.48.4",
|
"version": "0.48.5",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -4623,7 +4623,8 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"cli-truncate": "^1.1.0"
|
"cli-truncate": "^1.1.0",
|
||||||
|
"node-addon-api": "^1.6.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"iconv-lite": {
|
"iconv-lite": {
|
||||||
@ -5811,6 +5812,13 @@
|
|||||||
"semver": "^7.3.5"
|
"semver": "^7.3.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node-addon-api": {
|
||||||
|
"version": "1.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
|
||||||
|
"integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"node-api-version": {
|
"node-api-version": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz",
|
||||||
|
106
src/services/tray.js
Normal file
106
src/services/tray.js
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
const { Menu, Tray } = require('electron');
|
||||||
|
const path = require('path');
|
||||||
|
const windowService = require("./window.js");
|
||||||
|
const {getMainWindow} = require("./window.js");
|
||||||
|
|
||||||
|
const UPDATE_TRAY_EVENTS = [
|
||||||
|
'minimize', 'maximize', 'show', 'hide'
|
||||||
|
]
|
||||||
|
|
||||||
|
let tray = null;
|
||||||
|
// `mainWindow.isVisible` doesn't work with `mainWindow.show` and `mainWindow.hide` - it returns `false` when the window
|
||||||
|
// is minimized
|
||||||
|
let isVisible = true;
|
||||||
|
|
||||||
|
// Inspired by https://github.com/signalapp/Signal-Desktop/blob/dcb5bb672635c4b29a51adec8a5658e3834ec8fc/app/tray_icon.ts#L20
|
||||||
|
const getIconSize = () => {
|
||||||
|
switch (process.platform) {
|
||||||
|
case 'darwin':
|
||||||
|
return 16;
|
||||||
|
case 'win32':
|
||||||
|
return 32;
|
||||||
|
default:
|
||||||
|
return 256;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const getIconPath = () => {
|
||||||
|
const iconSize = getIconSize();
|
||||||
|
|
||||||
|
return path.join(
|
||||||
|
__dirname,
|
||||||
|
"../..",
|
||||||
|
"images",
|
||||||
|
"app-icons",
|
||||||
|
"png",
|
||||||
|
`${iconSize}x${iconSize}.png`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
const registerVisibilityListener = () => {
|
||||||
|
const mainWindow = windowService.getMainWindow();
|
||||||
|
|
||||||
|
// They need to be registered before the tray updater is registered
|
||||||
|
mainWindow.on('show', () => {
|
||||||
|
isVisible = true;
|
||||||
|
});
|
||||||
|
mainWindow.on('hide', () => {
|
||||||
|
isVisible = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
UPDATE_TRAY_EVENTS.forEach(eventName => {
|
||||||
|
mainWindow.on(eventName, updateTrayMenu)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateTrayMenu = () => {
|
||||||
|
const mainWindow = windowService.getMainWindow();
|
||||||
|
|
||||||
|
const contextMenu = Menu.buildFromTemplate([
|
||||||
|
{
|
||||||
|
label: isVisible ? 'Hide' : 'Show',
|
||||||
|
type: 'normal',
|
||||||
|
click: () => {
|
||||||
|
if (isVisible) {
|
||||||
|
mainWindow.hide();
|
||||||
|
} else {
|
||||||
|
mainWindow.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'separator'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Quit',
|
||||||
|
type: 'normal',
|
||||||
|
click: () => {
|
||||||
|
mainWindow.close();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
tray?.setContextMenu(contextMenu);
|
||||||
|
}
|
||||||
|
const changeVisibility = () => {
|
||||||
|
const window = getMainWindow();
|
||||||
|
|
||||||
|
if (isVisible) {
|
||||||
|
window.hide();
|
||||||
|
} else {
|
||||||
|
window.show();
|
||||||
|
window.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createTray() {
|
||||||
|
tray = new Tray(getIconPath());
|
||||||
|
tray.setToolTip('Trilium Notes')
|
||||||
|
// Restore focus
|
||||||
|
tray.on('click', changeVisibility)
|
||||||
|
updateTrayMenu();
|
||||||
|
|
||||||
|
registerVisibilityListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
createTray
|
||||||
|
}
|
@ -165,9 +165,15 @@ async function registerGlobalShortcuts() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMainWindow() {
|
||||||
|
return mainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
createMainWindow,
|
createMainWindow,
|
||||||
createSetupWindow,
|
createSetupWindow,
|
||||||
closeSetupWindow,
|
closeSetupWindow,
|
||||||
registerGlobalShortcuts
|
registerGlobalShortcuts,
|
||||||
|
getMainWindow
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user