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

Fix topbar layout

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2021-12-08 12:48:21 +03:00
parent 3df6e2042c
commit 3a8e75d9c9
3 changed files with 24 additions and 12 deletions

View File

@ -29,7 +29,7 @@ import * as LensExtensionsMainApi from "../extensions/main-api";
import { app, autoUpdater, BrowserWindow, dialog, Menu, 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 { IpcMainWindowEvents, WindowManager } from "./window-manager";
import { ClusterManager } from "./cluster-manager"; import { ClusterManager } from "./cluster-manager";
import { shellSync } from "./shell-sync"; import { shellSync } from "./shell-sync";
import { mangleProxyEnv } from "./proxy-env"; import { mangleProxyEnv } from "./proxy-env";
@ -256,10 +256,10 @@ app.on("ready", async () => {
LensProtocolRouterMain.getInstance().rendererLoaded = true; LensProtocolRouterMain.getInstance().rendererLoaded = true;
}); });
ipcMainOn("show-app-context-menu", (event) => { ipcMainOn(IpcMainWindowEvents.OPEN_CONTEXT_MENU, (event) => {
const menu = Menu.buildFromTemplate(getAppMenu(windowManager)); const menu = Menu.buildFromTemplate(getAppMenu(windowManager));
menu.popup(BrowserWindow.fromWebContents(event.sender) as any); menu.popup(BrowserWindow.fromWebContents(event.sender) as Electron.PopupOptions);
}); });
logger.info("🧩 Initializing extensions"); logger.info("🧩 Initializing extensions");

View File

@ -20,14 +20,12 @@
*/ */
.topBar { .topBar {
display: grid; display: flex;
grid-template-columns: [title] 1fr [controls] auto;
grid-template-rows: var(--main-layout-header);
grid-template-areas: "title controls";
background-color: var(--layoutBackground); background-color: var(--layoutBackground);
z-index: 2; z-index: 2;
width: 100%; width: 100%;
grid-area: topbar; grid-area: topbar;
justify-content: space-between;
} }
.winMenu { .winMenu {
@ -60,6 +58,13 @@
height: 100%; height: 100%;
} }
.winDraggableArea {
-webkit-user-select: none;
-webkit-app-region: drag;
flex-grow: 1;
background-color: aliceblue;
}
.winButtons { .winButtons {
display: flex; display: flex;
margin-left: 1.5rem; margin-left: 1.5rem;

View File

@ -20,7 +20,7 @@
*/ */
import styles from "./topbar.module.css"; import styles from "./topbar.module.css";
import React, { useEffect } from "react"; import React, { useEffect, useRef } from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { TopBarRegistry } from "../../../extensions/registries"; import { TopBarRegistry } from "../../../extensions/registries";
import { Icon } from "../icon"; import { Icon } from "../icon";
@ -48,6 +48,8 @@ ipcRendererOn("history:can-go-forward", (event, state: boolean) => {
}); });
export const TopBar = observer(({ children, ...rest }: Props) => { export const TopBar = observer(({ children, ...rest }: Props) => {
const elem = useRef<HTMLDivElement>();
const renderRegisteredItems = () => { const renderRegisteredItems = () => {
const items = TopBarRegistry.getInstance().getItems(); const items = TopBarRegistry.getInstance().getItems();
@ -88,7 +90,12 @@ export const TopBar = observer(({ children, ...rest }: Props) => {
webContents.getAllWebContents().find((webContent) => webContent.getType() === "window")?.goForward(); webContents.getAllWebContents().find((webContent) => webContent.getType() === "window")?.goForward();
}; };
const windowSizeToggle = () => { const windowSizeToggle = (evt: React.MouseEvent) => {
if (elem.current != evt.target) {
// Skip clicking on child elements
return;
}
const window = getCurrentWindow(); const window = getCurrentWindow();
if (window.isMaximized()) { if (window.isMaximized()) {
@ -105,12 +112,12 @@ export const TopBar = observer(({ children, ...rest }: Props) => {
}, []); }, []);
return ( return (
<div className={styles.topBar} {...rest}> <div className={styles.topBar} onDoubleClick={windowSizeToggle} ref={elem} {...rest}>
<div className={styles.tools} onDoubleClick={windowSizeToggle}> <div className={styles.tools}>
<div className={styles.winMenu}> <div className={styles.winMenu}>
{(isWindows || isLinux) && ( {(isWindows || isLinux) && (
<div onClick={openContextMenu} data-testid="window-menu"> <div onClick={openContextMenu} data-testid="window-menu">
<svg width="12" height="12" viewBox="0 0 12 12"><path fill="currentColor" d="m1 10h10v1h-10z"/><path fill="currentColor" d="m1 5.5h10v1h-10z"/><path fill="currentColor" d="m1 1h10v1h-10z"/></svg> <svg width="12" height="12" viewBox="0 0 12 12" shapeRendering="crispEdges"><path fill="currentColor" d="m1 10h10v1h-10z"/><path fill="currentColor" d="m1 5.5h10v1h-10z"/><path fill="currentColor" d="m1 1h10v1h-10z"/></svg>
</div> </div>
)} )}
</div> </div>