mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-09-27 20:11:15 +02:00
refactor: systemTray window logic. Window reference is now dynamic and guarded against destroyed states. Minimize can now put window in the systemTray if option is active
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
const { ipcMain, dialog, shell } = require("electron");
|
const { ipcMain, dialog, shell } = require("electron");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const { logger, logDir } = require("../server/logger");
|
const { logger, logDir } = require("../server/logger");
|
||||||
const { configFeatures, featuresPath } = require("../config");
|
const {configFeatures, featuresPath, devMode} = require("../config");
|
||||||
const { getThemes, reloadThemes } = require("./themeManager");
|
const { getThemes, reloadThemes } = require("./themeManager");
|
||||||
const config = require("../config");
|
const config = require("../config");
|
||||||
const { validateDownloadPath, getDefaultDownloadPath } = require("./pathValidator");
|
const { validateDownloadPath, getDefaultDownloadPath } = require("./pathValidator");
|
||||||
@@ -114,7 +114,16 @@ function registerIpcHandlers(getMainWindow) {
|
|||||||
/**
|
/**
|
||||||
* Window minimize request from renderer.
|
* Window minimize request from renderer.
|
||||||
*/
|
*/
|
||||||
ipcMain.on("window-minimize", () => getMainWindow()?.minimize());
|
ipcMain.on("window-minimize", () => {
|
||||||
|
// Minimize to tray
|
||||||
|
if (configFeatures.systemTray) {
|
||||||
|
getMainWindow()?.hide()
|
||||||
|
} else {
|
||||||
|
// Native minimize
|
||||||
|
getMainWindow()?.minimize()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggles maximize/unmaximize state of main window.
|
* Toggles maximize/unmaximize state of main window.
|
||||||
@@ -223,7 +232,7 @@ function registerIpcHandlers(getMainWindow) {
|
|||||||
if (key === "systemTray") {
|
if (key === "systemTray") {
|
||||||
if (value === true) {
|
if (value === true) {
|
||||||
logger.info("System Tray enabled dynamically.");
|
logger.info("System Tray enabled dynamically.");
|
||||||
createSystemTray(getMainWindow(), config.devMode);
|
createSystemTray(devMode);
|
||||||
} else {
|
} else {
|
||||||
logger.info("System Tray disabled dynamically.");
|
logger.info("System Tray disabled dynamically.");
|
||||||
destroyTray();
|
destroyTray();
|
||||||
|
|||||||
21
app/tray.js
21
app/tray.js
@@ -2,6 +2,7 @@ const {app, Menu, Tray, nativeImage} = require("electron");
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
const {logger} = require("../server/logger"); // Ajuste le chemin si besoin
|
const {logger} = require("../server/logger"); // Ajuste le chemin si besoin
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
|
const {getMainWindow} = require("./windowManager");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Global reference to the Tray instance to prevent garbage collection.
|
* Global reference to the Tray instance to prevent garbage collection.
|
||||||
@@ -17,11 +18,10 @@ let tray = null;
|
|||||||
* - Builds the right-click context menu.
|
* - Builds the right-click context menu.
|
||||||
* - Handles left-click behavior to toggle main window visibility.
|
* - Handles left-click behavior to toggle main window visibility.
|
||||||
*
|
*
|
||||||
* @param {import('electron').BrowserWindow} mainWindow - The main application window.
|
|
||||||
* @param {boolean} devMode - Indicates whether the application is running in development mode.
|
* @param {boolean} devMode - Indicates whether the application is running in development mode.
|
||||||
* @returns {Tray} The created Tray instance.
|
* @returns {Tray} The created Tray instance.
|
||||||
*/
|
*/
|
||||||
function createSystemTray(mainWindow, devMode) {
|
function createSystemTray(devMode) {
|
||||||
// Prevent creating multiple tray instances
|
// Prevent creating multiple tray instances
|
||||||
if (tray) return tray;
|
if (tray) return tray;
|
||||||
|
|
||||||
@@ -58,7 +58,11 @@ function createSystemTray(mainWindow, devMode) {
|
|||||||
{
|
{
|
||||||
label: "Show Freedom Loader",
|
label: "Show Freedom Loader",
|
||||||
click: () => {
|
click: () => {
|
||||||
mainWindow.show();
|
const window = getMainWindow();
|
||||||
|
if (window && !window.isDestroyed()) {
|
||||||
|
window.show();
|
||||||
|
window.focus();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ type: "separator" },
|
{ type: "separator" },
|
||||||
@@ -82,11 +86,14 @@ function createSystemTray(mainWindow, devMode) {
|
|||||||
* but it remains standard practice for Windows and Linux environments.
|
* but it remains standard practice for Windows and Linux environments.
|
||||||
*/
|
*/
|
||||||
tray.on("click", () => {
|
tray.on("click", () => {
|
||||||
if (mainWindow.isVisible()) {
|
const window = getMainWindow();
|
||||||
mainWindow.hide();
|
if (!window || window.isDestroyed()) return;
|
||||||
|
|
||||||
|
if (window.isVisible()) {
|
||||||
|
window.hide();
|
||||||
} else {
|
} else {
|
||||||
mainWindow.show();
|
window.show();
|
||||||
mainWindow.focus();
|
window.focus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,8 @@ async function createMainWindow() {
|
|||||||
* cancels the destruction and hides the window instead.
|
* cancels the destruction and hides the window instead.
|
||||||
*/
|
*/
|
||||||
mainWindow.on('close', (event) => {
|
mainWindow.on('close', (event) => {
|
||||||
if (!app.isQuitting && config.systemTray ) {
|
|
||||||
|
if (!app.isQuitting && config.configFeatures.systemTray) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
mainWindow.hide();
|
mainWindow.hide();
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
2
main.js
2
main.js
@@ -161,7 +161,7 @@ app.whenReady().then(async () => {
|
|||||||
getMainWindow().show();
|
getMainWindow().show();
|
||||||
|
|
||||||
if (configFeatures.systemTray) {
|
if (configFeatures.systemTray) {
|
||||||
createSystemTray(getMainWindow(), configFeatures.devMode);
|
createSystemTray(devMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (configFeatures.discordRPC) startRPC();
|
if (configFeatures.discordRPC) startRPC();
|
||||||
|
|||||||
Reference in New Issue
Block a user