Skip to content

Commit

Permalink
Add option to create context-menu only menubar apps
Browse files Browse the repository at this point in the history
  • Loading branch information
mpociot committed Jul 25, 2023
1 parent 390e2c2 commit 13ef865
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 68 deletions.
86 changes: 54 additions & 32 deletions dist/server/api/menuBar.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,29 +25,46 @@ router.post("/hide", (req, res) => {
});
router.post("/create", (req, res) => {
res.sendStatus(200);
const { width, height, url, label, alwaysOnTop, vibrancy, backgroundColor, transparency, icon, showDockIcon, contextMenu } = req.body;
state_1.default.activeMenuBar = (0, menubar_1.menubar)({
icon: icon || state_1.default.icon.replace("icon.png", "IconTemplate.png"),
index: url,
showDockIcon,
showOnAllWorkspaces: false,
browserWindow: {
width,
height,
alwaysOnTop,
vibrancy,
backgroundColor,
transparent: transparency,
webPreferences: {
nodeIntegration: true,
sandbox: false,
contextIsolation: false
const { width, height, url, label, alwaysOnTop, vibrancy, backgroundColor, transparency, icon, showDockIcon, onlyShowContextWindow, contextMenu } = req.body;
if (onlyShowContextWindow === true) {
const tray = new electron_1.Tray(icon || state_1.default.icon.replace("icon.png", "IconTemplate.png"));
tray.setContextMenu(buildMenu(contextMenu));
state_1.default.activeMenuBar = (0, menubar_1.menubar)({
tray,
index: false,
showDockIcon,
showOnAllWorkspaces: false,
browserWindow: {
show: false,
width: 0,
height: 0,
}
}
});
state_1.default.activeMenuBar.on("after-create-window", () => {
require("@electron/remote/main").enable(state_1.default.activeMenuBar.window.webContents);
});
});
}
else {
state_1.default.activeMenuBar = (0, menubar_1.menubar)({
icon: icon || state_1.default.icon.replace("icon.png", "IconTemplate.png"),
index: url,
showDockIcon,
showOnAllWorkspaces: false,
browserWindow: {
width,
height,
alwaysOnTop,
vibrancy,
backgroundColor,
transparent: transparency,
webPreferences: {
nodeIntegration: true,
sandbox: false,
contextIsolation: false
}
}
});
state_1.default.activeMenuBar.on("after-create-window", () => {
require("@electron/remote/main").enable(state_1.default.activeMenuBar.window.webContents);
});
}
state_1.default.activeMenuBar.on("ready", () => {
state_1.default.activeMenuBar.tray.setTitle(label);
state_1.default.activeMenuBar.on("hide", () => {
Expand All @@ -60,17 +77,22 @@ router.post("/create", (req, res) => {
event: "\\Native\\Laravel\\Events\\MenuBar\\MenuBarShown"
});
});
state_1.default.activeMenuBar.tray.on("right-click", () => {
(0, utils_1.notifyLaravel)("events", {
event: "\\Native\\Laravel\\Events\\MenuBar\\MenuBarContextMenuOpened"
if (onlyShowContextWindow !== true) {
state_1.default.activeMenuBar.tray.on("right-click", () => {
(0, utils_1.notifyLaravel)("events", {
event: "\\Native\\Laravel\\Events\\MenuBar\\MenuBarContextMenuOpened"
});
state_1.default.activeMenuBar.tray.popUpContextMenu(buildMenu(contextMenu));
});
let menu = electron_1.Menu.buildFromTemplate([{ role: "quit" }]);
if (contextMenu) {
const menuEntries = contextMenu.map(helper_1.mapMenu);
menu = electron_1.Menu.buildFromTemplate(menuEntries);
}
state_1.default.activeMenuBar.tray.popUpContextMenu(menu);
});
}
});
});
function buildMenu(contextMenu) {
let menu = electron_1.Menu.buildFromTemplate([{ role: "quit" }]);
if (contextMenu) {
const menuEntries = contextMenu.map(helper_1.mapMenu);
menu = electron_1.Menu.buildFromTemplate(menuEntries);
}
return menu;
}
exports.default = router;
96 changes: 60 additions & 36 deletions src/server/api/menuBar.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import express from "express";
import { Menu, nativeImage } from "electron";
import { Menu, Tray } from "electron";
import { mapMenu } from "./helper";
import state from "../state";
import { menubar } from "menubar";
Expand Down Expand Up @@ -42,33 +42,50 @@ router.post("/create", (req, res) => {
transparency,
icon,
showDockIcon,
onlyShowContextWindow,
contextMenu
} = req.body;

state.activeMenuBar = menubar({
icon: icon || state.icon.replace("icon.png", "IconTemplate.png"),
index: url,
showDockIcon,
showOnAllWorkspaces: false,
browserWindow: {
width,
height,
alwaysOnTop,
vibrancy,
backgroundColor,
transparent: transparency,
webPreferences: {
nodeIntegration: true,
sandbox: false,
contextIsolation: false
if (onlyShowContextWindow === true) {
const tray = new Tray(icon || state.icon.replace("icon.png", "IconTemplate.png"));
tray.setContextMenu(buildMenu(contextMenu));

state.activeMenuBar = menubar({
tray,
index: false,
showDockIcon,
showOnAllWorkspaces: false,
browserWindow: {
show: false,
width: 0,
height: 0,
}
}
});

});

state.activeMenuBar.on("after-create-window", () => {
require("@electron/remote/main").enable(state.activeMenuBar.window.webContents);
});
} else {
state.activeMenuBar = menubar({
icon: icon || state.icon.replace("icon.png", "IconTemplate.png"),
index: url,
showDockIcon,
showOnAllWorkspaces: false,
browserWindow: {
width,
height,
alwaysOnTop,
vibrancy,
backgroundColor,
transparent: transparency,
webPreferences: {
nodeIntegration: true,
sandbox: false,
contextIsolation: false
}
}
});
state.activeMenuBar.on("after-create-window", () => {
require("@electron/remote/main").enable(state.activeMenuBar.window.webContents);
});
}

state.activeMenuBar.on("ready", () => {
state.activeMenuBar.tray.setTitle(label);
Expand All @@ -78,27 +95,34 @@ router.post("/create", (req, res) => {
event: "\\Native\\Laravel\\Events\\MenuBar\\MenuBarHidden"
});
});

state.activeMenuBar.on("show", () => {
notifyLaravel("events", {
event: "\\Native\\Laravel\\Events\\MenuBar\\MenuBarShown"
});
});

state.activeMenuBar.tray.on("right-click", () => {
notifyLaravel("events", {
event: "\\Native\\Laravel\\Events\\MenuBar\\MenuBarContextMenuOpened"
})

let menu = Menu.buildFromTemplate([{ role: "quit" }]);
if (onlyShowContextWindow !== true) {
state.activeMenuBar.tray.on("right-click", () => {
notifyLaravel("events", {
event: "\\Native\\Laravel\\Events\\MenuBar\\MenuBarContextMenuOpened"
});

if (contextMenu) {
const menuEntries = contextMenu.map(mapMenu);
menu = Menu.buildFromTemplate(menuEntries);
}

state.activeMenuBar.tray.popUpContextMenu(menu);
});
state.activeMenuBar.tray.popUpContextMenu(buildMenu(contextMenu));
});
}
});
});

function buildMenu(contextMenu) {
let menu = Menu.buildFromTemplate([{ role: "quit" }]);

if (contextMenu) {
const menuEntries = contextMenu.map(mapMenu);
menu = Menu.buildFromTemplate(menuEntries);
}

return menu;
}

export default router;

0 comments on commit 13ef865

Please sign in to comment.