Replace click callback by override in custom menu

This commit is contained in:
TC
2021-04-02 21:20:50 +02:00
parent c09de43154
commit 77393c5324
2 changed files with 22 additions and 20 deletions

18
menu.js
View File

@ -20,12 +20,7 @@ const pluginEnabledMenu = (plugin, label = "") => ({
},
});
const mainMenuTemplate = (
win,
withRoles = true,
isTray = false,
clickCb = () => {}
) => [
const mainMenuTemplate = (win, withRoles = true, isTray = false) => [
{
label: "Plugins",
submenu: [
@ -69,7 +64,6 @@ const mainMenuTemplate = (
checked: config.get("options.autoUpdates"),
click: (item) => {
config.set("options.autoUpdates", item.checked);
clickCb(item);
},
},
{
@ -78,7 +72,6 @@ const mainMenuTemplate = (
checked: config.get("options.disableHardwareAcceleration"),
click: (item) => {
config.set("options.disableHardwareAcceleration", item.checked);
clickCb(item);
},
},
{
@ -87,7 +80,6 @@ const mainMenuTemplate = (
checked: config.get("options.restartOnConfigChanges"),
click: (item) => {
config.set("options.restartOnConfigChanges", item.checked);
clickCb(item);
},
},
{
@ -96,7 +88,6 @@ const mainMenuTemplate = (
checked: config.get("options.autoResetAppCache"),
click: (item) => {
config.set("options.autoResetAppCache", item.checked);
clickCb(item);
},
},
{
@ -105,7 +96,6 @@ const mainMenuTemplate = (
checked: config.get("options.resumeOnStart"),
click: (item) => {
config.set("options.resumeOnStart", item.checked);
clickCb(item);
},
},
...(is.windows() || is.linux()
@ -116,7 +106,6 @@ const mainMenuTemplate = (
checked: config.get("options.hideMenu"),
click: (item) => {
config.set("options.hideMenu", item.checked);
clickCb(item);
},
},
]
@ -131,7 +120,6 @@ const mainMenuTemplate = (
checked: config.get("options.startAtLogin"),
click: (item) => {
config.set("options.startAtLogin", item.checked);
clickCb(item);
},
},
]
@ -146,7 +134,6 @@ const mainMenuTemplate = (
click: () => {
config.set("options.tray", false);
config.set("options.appVisible", true);
clickCb(item);
},
},
{
@ -157,7 +144,6 @@ const mainMenuTemplate = (
click: () => {
config.set("options.tray", true);
config.set("options.appVisible", true);
clickCb(item);
},
},
{
@ -168,7 +154,6 @@ const mainMenuTemplate = (
click: () => {
config.set("options.tray", true);
config.set("options.appVisible", false);
clickCb(item);
},
},
{ type: "separator" },
@ -178,7 +163,6 @@ const mainMenuTemplate = (
checked: config.get("options.trayClickPlayPause"),
click: (item) => {
config.set("options.trayClickPlayPause", item.checked);
clickCb(item);
},
},
],

View File

@ -20,9 +20,8 @@ module.exports = (win) => {
return;
}
done = true;
let template = mainMenuTemplate(win, false, false, (item) => {
checkCheckbox(win, item);
});
let template = mainMenuTemplate(win, false, false);
updateCheckboxesAndRadioButtons(win, template);
let menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
@ -48,3 +47,22 @@ function checkCheckbox(win, item) {
//update menu (closes it)
win.webContents.send("updateMenu", true);
}
// Update checkboxes/radio buttons
function updateCheckboxesAndRadioButtons(win, template) {
for (let index in template) {
let item = template[index];
// Apply function on submenu
if (item.submenu != null) {
updateCheckboxesAndRadioButtons(win, item.submenu);
}
// Change onClick of checkbox+radio
else if (item.type === "checkbox" || item.type === "radio") {
let originalOnclick = item.click;
item.click = (itemClicked) => {
originalOnclick(itemClicked);
checkCheckbox(win, itemClicked);
};
}
}
}