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:
parent
29c9c73a13
commit
c4aa839c86
@ -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
|
||||||
|
|||||||
@ -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)));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user