diff --git a/src/renderer/components/layout/top-bar/top-bar.tsx b/src/renderer/components/layout/top-bar/top-bar.tsx index 28c953baad..11f3bfb3c0 100644 --- a/src/renderer/components/layout/top-bar/top-bar.tsx +++ b/src/renderer/components/layout/top-bar/top-bar.tsx @@ -20,6 +20,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import type { TopBarRegistration } from "./top-bar-registration"; import { emitOpenAppMenuAsContextMenu, requestWindowAction } from "../../../ipc"; import { WindowAction } from "../../../../common/ipc/window"; +import { useToggle } from "../../../hooks"; interface Props extends React.HTMLAttributes {} @@ -39,10 +40,15 @@ ipcRendererOn("history:can-go-forward", (event, state: boolean) => { }); const NonInjectedTopBar = (({ items, children, ...rest }: Props & Dependencies) => { + const [isAppContextMenuOpen, toggleIsAppContextMenuOpen] = useToggle(false); const elem = useRef(); - const openContextMenu = () => { - emitOpenAppMenuAsContextMenu(); + const toggleAppContextMenu = () => { + toggleIsAppContextMenuOpen(); + + if (isAppContextMenuOpen) { + emitOpenAppMenuAsContextMenu(); + } }; const goHome = () => { @@ -85,7 +91,7 @@ const NonInjectedTopBar = (({ items, children, ...rest }: Props & Dependencies)
{(isWindows || isLinux) && (
-
+
@@ -153,7 +159,6 @@ const renderRegisteredItems = (items: TopBarRegistration[]) => ( export const TopBar = withInjectables(observer(NonInjectedTopBar), { getProps: (di, props) => ({ items: di.inject(topBarItemsInjectable), - ...props, }), }); diff --git a/src/renderer/hooks/index.ts b/src/renderer/hooks/index.ts index 2e5281076b..d790ddf145 100644 --- a/src/renderer/hooks/index.ts +++ b/src/renderer/hooks/index.ts @@ -8,3 +8,4 @@ export * from "./useOnUnmount"; export * from "./useInterval"; export * from "./useMutationObserver"; +export * from "./use-toggle"; diff --git a/src/renderer/hooks/use-toggle.ts b/src/renderer/hooks/use-toggle.ts new file mode 100644 index 0000000000..123c7d55d7 --- /dev/null +++ b/src/renderer/hooks/use-toggle.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { useState } from "react"; + +export function useToggle(initial: boolean): [value: boolean, toggle: () => void] { + const [val, setVal] = useState(initial); + + return [val, () => setVal(!val)]; +}