1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Add context menu in topbar

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2021-12-03 12:16:18 +03:00
parent 29c9c73a13
commit c4aa839c86
4 changed files with 28 additions and 7 deletions

View File

@ -26,7 +26,7 @@ import { initialize as initializeRemote } from "@electron/remote/main";
import * as Mobx from "mobx"; import * as Mobx from "mobx";
import * as LensExtensionsCommonApi from "../extensions/common-api"; import * as LensExtensionsCommonApi from "../extensions/common-api";
import * as LensExtensionsMainApi from "../extensions/main-api"; import * as LensExtensionsMainApi from "../extensions/main-api";
import { app, autoUpdater, dialog, powerMonitor } from "electron"; import { app, autoUpdater, BrowserWindow, dialog, Menu, powerMonitor } from "electron";
import { appName, isIntegrationTesting, isMac, isWindows, productName } from "../common/vars"; import { appName, isIntegrationTesting, isMac, isWindows, productName } from "../common/vars";
import { LensProxy } from "./lens-proxy"; import { LensProxy } from "./lens-proxy";
import { WindowManager } from "./window-manager"; import { WindowManager } from "./window-manager";
@ -61,7 +61,7 @@ import { FilesystemProvisionerStore } from "./extension-filesystem";
import { SentryInit } from "../common/sentry"; import { SentryInit } from "../common/sentry";
import { ensureDir } from "fs-extra"; import { ensureDir } from "fs-extra";
import { Router } from "./router"; import { Router } from "./router";
import { initMenu } from "./menu"; import { getAppMenu, initMenu } from "./menu";
import { initTray } from "./tray"; import { initTray } from "./tray";
import { kubeApiRequest, shellApiRequest, ShellRequestAuthenticator } from "./proxy-functions"; import { kubeApiRequest, shellApiRequest, ShellRequestAuthenticator } from "./proxy-functions";
import { AppPaths } from "../common/app-paths"; import { AppPaths } from "../common/app-paths";
@ -256,6 +256,12 @@ app.on("ready", async () => {
LensProtocolRouterMain.getInstance().rendererLoaded = true; LensProtocolRouterMain.getInstance().rendererLoaded = true;
}); });
ipcMainOn("show-app-context-menu", (event) => {
const menu = Menu.buildFromTemplate(getAppMenu(windowManager));
menu.popup(BrowserWindow.fromWebContents(event.sender) as any);
});
logger.info("🧩 Initializing extensions"); logger.info("🧩 Initializing extensions");
// call after windowManager to see splash earlier // call after windowManager to see splash earlier

View File

@ -61,7 +61,7 @@ export function showAbout(browserWindow: BrowserWindow) {
}); });
} }
export function buildMenu(windowManager: WindowManager) { export function getAppMenu(windowManager: WindowManager) {
function ignoreIf(check: boolean, menuItems: MenuItemConstructorOptions[]) { function ignoreIf(check: boolean, menuItems: MenuItemConstructorOptions[]) {
return check ? [] : menuItems; return check ? [] : menuItems;
} }
@ -316,5 +316,10 @@ export function buildMenu(windowManager: WindowManager) {
appMenu.delete("mac"); appMenu.delete("mac");
} }
Menu.setApplicationMenu(Menu.buildFromTemplate([...appMenu.values()])); return [...appMenu.values()];
}
export function buildMenu(windowManager: WindowManager) {
Menu.setApplicationMenu(Menu.buildFromTemplate(getAppMenu(windowManager)));
} }

View File

@ -29,7 +29,7 @@ import { delay, iter, Singleton } from "../common/utils";
import { ClusterFrameInfo, clusterFrameMap } from "../common/cluster-frames"; import { ClusterFrameInfo, clusterFrameMap } from "../common/cluster-frames";
import { IpcRendererNavigationEvents } from "../renderer/navigation/events"; import { IpcRendererNavigationEvents } from "../renderer/navigation/events";
import logger from "./logger"; import logger from "./logger";
import { productName } from "../common/vars"; import { isWindows, productName } from "../common/vars";
import { LensProxy } from "./lens-proxy"; import { LensProxy } from "./lens-proxy";
function isHideable(window: BrowserWindow | null): boolean { function isHideable(window: BrowserWindow | null): boolean {
@ -81,7 +81,7 @@ export class WindowManager extends Singleton {
show: false, show: false,
minWidth: 700, // accommodate 800 x 600 display minimum minWidth: 700, // accommodate 800 x 600 display minimum
minHeight: 500, // accommodate 800 x 600 display minimum minHeight: 500, // accommodate 800 x 600 display minimum
titleBarStyle: "hiddenInset", titleBarStyle: isWindows ? "hidden" : "hiddenInset",
backgroundColor: "#1e2124", backgroundColor: "#1e2124",
webPreferences: { webPreferences: {
nodeIntegration: true, nodeIntegration: true,

View File

@ -26,7 +26,7 @@ import { TopBarRegistry } from "../../../extensions/registries";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { webContents, getCurrentWindow } from "@electron/remote"; import { webContents, getCurrentWindow } from "@electron/remote";
import { observable } from "mobx"; import { observable } from "mobx";
import { ipcRendererOn } from "../../../common/ipc"; import { broadcastMessage, ipcRendererOn } from "../../../common/ipc";
import { watchHistoryState } from "../../remote-helpers/history-updater"; import { watchHistoryState } from "../../remote-helpers/history-updater";
import { isActiveRoute, navigate } from "../../navigation"; import { isActiveRoute, navigate } from "../../navigation";
import { catalogRoute, catalogURL } from "../../../common/routes"; import { catalogRoute, catalogURL } from "../../../common/routes";
@ -70,6 +70,10 @@ export const TopBar = observer(({ children, ...rest }: Props) => {
); );
}; };
const openContextMenu = () => {
broadcastMessage("show-app-context-menu");
};
const goHome = () => { const goHome = () => {
navigate(catalogURL()); navigate(catalogURL());
}; };
@ -101,6 +105,12 @@ export const TopBar = observer(({ children, ...rest }: Props) => {
return ( return (
<div className={styles.topBar} {...rest}> <div className={styles.topBar} {...rest}>
<div className={styles.tools} onDoubleClick={windowSizeToggle}> <div className={styles.tools} onDoubleClick={windowSizeToggle}>
<Icon
data-testid="menu-button"
material="menu"
className="ml-4"
onClick={openContextMenu}
/>
<Icon <Icon
data-testid="home-button" data-testid="home-button"
material="home" material="home"