diff --git a/src/constants/settings.js b/src/constants/settings.js index f8ec0f0..fe6de8c 100644 --- a/src/constants/settings.js +++ b/src/constants/settings.js @@ -26,6 +26,7 @@ const settings = { width: "windowBounds.width", height: "windowBounds.height", }, + minimizeOnClose: "minimizeOnClose", }; module.exports = settings; diff --git a/src/main.js b/src/main.js index 39e9ba9..73bb075 100644 --- a/src/main.js +++ b/src/main.js @@ -56,6 +56,14 @@ function createWindow(options = {}) { // run stuff after first load mainWindow.webContents.once("did-finish-load", () => {}); + mainWindow.on("close", function (event) { + if (!app.isQuiting && store.get(settings.minimizeOnClose)) { + event.preventDefault(); + mainWindow.hide(); + refreshTray(mainWindow); + } + return false; + }); // Emitted when the window is closed. mainWindow.on("closed", function () { closeSettingsWindow(); diff --git a/src/pages/settings/preload.js b/src/pages/settings/preload.js index 1a00065..4d1d5b3 100644 --- a/src/pages/settings/preload.js +++ b/src/pages/settings/preload.js @@ -21,6 +21,7 @@ function refreshSettings() { mpris.checked = store.get(settings.mpris); enableCustomHotkeys.checked = store.get(settings.enableCustomHotkeys); enableDiscord.checked = store.get(settings.enableDiscord); + minimizeOnClose.checked = store.get(settings.minimizeOnClose); } /** @@ -80,6 +81,7 @@ window.addEventListener("DOMContentLoaded", () => { port = get("port"); menuBar = get("menuBar"); trayIcon = get("trayIcon"); + minimizeOnClose = get("minimizeOnClose"); mpris = get("mprisCheckbox"); enableCustomHotkeys = get("enableCustomHotkeys"); enableDiscord = get("enableDiscord"); @@ -95,4 +97,5 @@ window.addEventListener("DOMContentLoaded", () => { addInputListener(mpris, settings.mpris); addInputListener(enableCustomHotkeys, settings.enableCustomHotkeys); addInputListener(enableDiscord, settings.enableDiscord); + addInputListener(minimizeOnClose, settings.minimizeOnClose); }); diff --git a/src/pages/settings/settings.html b/src/pages/settings/settings.html index 124675a..35272d8 100644 --- a/src/pages/settings/settings.html +++ b/src/pages/settings/settings.html @@ -80,6 +80,16 @@ +
+ Minimize window on close instead
+
diff --git a/src/scripts/settings.js b/src/scripts/settings.js index d706810..28c86d0 100644 --- a/src/scripts/settings.js +++ b/src/scripts/settings.js @@ -15,6 +15,7 @@ const store = new Store({ port: 47836, }, trayIcon: true, + minimizeOnClose : false, mpris: false, enableCustomHotkeys: false, enableDiscord: false, diff --git a/src/scripts/tray.js b/src/scripts/tray.js index 88b7344..bd6a0e9 100644 --- a/src/scripts/tray.js +++ b/src/scripts/tray.js @@ -1,5 +1,7 @@ -const { Tray } = require("electron"); -const { getMenu } = require("./menu"); +const { Tray, app } = require("electron"); +const { Menu } = require("electron"); +const { getMenu, mainMenu } = require("./menu"); +const { store, settings } = require("./settings"); const trayModule = {}; let tray; @@ -7,16 +9,41 @@ trayModule.addTray = function (options = { icon: "" }) { tray = new Tray(options.icon); }; -trayModule.refreshTray = function () { +trayModule.refreshTray = function (mainWindow) { if (!tray) { trayModule.addTray(); } + tray.on("click", function (e) { - // do nothing on click + if (mainWindow) { + mainWindow.show(); + } }); tray.setToolTip("Tidal-hifi"); - tray.setContextMenu(getMenu()); + + if (mainWindow && store.get(settings.minimizeOnClose)) { + tray.setContextMenu( + Menu.buildFromTemplate([ + { + label: "Toggle Window", + click: function () { + mainWindow.isVisible() ? mainWindow.hide() : mainWindow.show(); + }, + }, + { + label: "Quit", + click: function () { + mainWindow.destroy(); + app.quit(); + }, + }, + ...mainMenu, //we add menu items from the other context + ]) + ); + } else { + tray.setContextMenu(getMenu()); + } }; module.exports = trayModule;