diff --git a/resources/electron/electron-plugin/dist/server/api/menuBar.js b/resources/electron/electron-plugin/dist/server/api/menuBar.js index ad65389..ab8c74e 100644 --- a/resources/electron/electron-plugin/dist/server/api/menuBar.js +++ b/resources/electron/electron-plugin/dist/server/api/menuBar.js @@ -31,6 +31,11 @@ router.post("/context-menu", (req, res) => { const { contextMenu } = req.body; (_a = state.tray) === null || _a === void 0 ? void 0 : _a.setContextMenu(buildMenu(contextMenu)); }); +router.post("/show-context-menu", (req, res) => { + var _a; + res.sendStatus(200); + (_a = state.tray) === null || _a === void 0 ? void 0 : _a.popUpContextMenu(); +}); router.post("/show", (req, res) => { res.sendStatus(200); state.activeMenuBar.showWindow(); diff --git a/resources/electron/electron-plugin/src/server/api/menuBar.ts b/resources/electron/electron-plugin/src/server/api/menuBar.ts index 770853f..5c5c716 100644 --- a/resources/electron/electron-plugin/src/server/api/menuBar.ts +++ b/resources/electron/electron-plugin/src/server/api/menuBar.ts @@ -42,6 +42,12 @@ router.post("/context-menu", (req, res) => { state.tray?.setContextMenu(buildMenu(contextMenu)); }); +router.post("/show-context-menu", (req, res) => { + res.sendStatus(200); + + state.tray?.popUpContextMenu(); +}); + router.post("/show", (req, res) => { res.sendStatus(200); diff --git a/src/Facades/MenuBar.php b/src/Facades/MenuBar.php index 8bd2da9..162f16e 100644 --- a/src/Facades/MenuBar.php +++ b/src/Facades/MenuBar.php @@ -14,6 +14,7 @@ * @method static void icon(string $icon) * @method static void resize(int $width, int $height) * @method static void contextMenu(Menu $contextMenu) + * @method static void showContextMenu() * @method static void webPreferences(array $preferences) */ class MenuBar extends Facade diff --git a/src/MenuBar/MenuBarManager.php b/src/MenuBar/MenuBarManager.php index f22d264..f327201 100644 --- a/src/MenuBar/MenuBarManager.php +++ b/src/MenuBar/MenuBarManager.php @@ -59,4 +59,9 @@ public function contextMenu(Menu $contextMenu) 'contextMenu' => $contextMenu->toArray()['submenu'], ]); } + + public function showContextMenu() + { + $this->client->post('menu-bar/show-context-menu'); + } } diff --git a/tests/MenuBar/MenuBarTest.php b/tests/MenuBar/MenuBarTest.php index a2dc99d..513af22 100644 --- a/tests/MenuBar/MenuBarTest.php +++ b/tests/MenuBar/MenuBarTest.php @@ -1,5 +1,6 @@ assertEquals('trayCenter', $menuBarArray['windowPosition']); $this->assertIsArray($menuBarArray['contextMenu']); }); + +it('can show context menu programmatically', function () { + Http::fake([ + '*/menu-bar/show-context-menu' => Http::response([], 200), + ]); + + MenuBar::showContextMenu(); + + Http::assertSent(function ($request) { + return str_contains($request->url(), 'menu-bar/show-context-menu'); + }); +});