diff --git a/src-web/components/SettingsDialog.tsx b/src-web/components/SettingsDialog.tsx
index 883c8493..3faff84f 100644
--- a/src-web/components/SettingsDialog.tsx
+++ b/src-web/components/SettingsDialog.tsx
@@ -40,7 +40,12 @@ export const SettingsDialog = () => {
- Workspace ({workspace.name})
+
+ Workspace{' '}
+
+ {workspace.name}
+
+
{
function HeaderSize({ className, ...props }: HeaderSizeProps) {
const platform = useOsInfo();
+ const fullscreen = useIsFullscreen();
+ const stoplightsVisible = platform?.osType === 'Darwin' && !fullscreen;
return (
diff --git a/src-web/hooks/useIsFullscreen.ts b/src-web/hooks/useIsFullscreen.ts
new file mode 100644
index 00000000..1937e4ea
--- /dev/null
+++ b/src-web/hooks/useIsFullscreen.ts
@@ -0,0 +1,26 @@
+import { appWindow } from '@tauri-apps/api/window';
+import { useEffect, useState } from 'react';
+import { useWindowSize } from 'react-use';
+
+export function useIsFullscreen() {
+ const [isFullscreen, setIsFullscreen] = useState(false);
+ const windowSize = useWindowSize();
+
+ useEffect(() => {
+ (async function () {
+ // Fullscreen state isn't updated right after resize event on Mac (needs to wait for animation) so
+ // we'll poll for 10 seconds to see if it changes. Hopefully Tauri eventually adds a way to listen
+ // for this.
+ for (let i = 0; i < 100; i++) {
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ const newIsFullscreen = await appWindow.isFullscreen();
+ if (newIsFullscreen !== isFullscreen) {
+ setIsFullscreen(newIsFullscreen);
+ break;
+ }
+ }
+ })();
+ }, [windowSize, isFullscreen]);
+
+ return isFullscreen;
+}