Skip to content

feat(desktop): add Linux native window frames - #5398

Open
Act0r1 wants to merge 1 commit into
pingdotgg:mainfrom
Act0r1:feat/linux-native-window-frame
Open

feat(desktop): add Linux native window frames#5398
Act0r1 wants to merge 1 commit into
pingdotgg:mainfrom
Act0r1:feat/linux-native-window-frame

Conversation

@Act0r1

@Act0r1 Act0r1 commented Aug 5, 2026

Copy link
Copy Markdown

What Changed

Adds a Linux-only Use native window frame switch under Settings → Appearance. The preference is stored in desktop settings and selects the native BrowserWindow frame on the next full launch; Windows and macOS keep their existing title bar behavior.

The IPC bridge reports the setting as unsupported outside Linux, and the user documentation explains the restart requirement.

Why

T3 Code always used its custom Electron window-controls overlay. Linux users running compositors such as Hyprland had no way to hand window decorations back to the window manager, unlike apps that expose a native-frame option.

UI Changes

Before: custom Electron frame After: native Hyprland frame
Custom Electron frame Native Hyprland frame

Verification

  • pnpm exec vp test run apps/desktop/src/settings/DesktopAppSettings.test.ts apps/desktop/src/window/DesktopWindow.test.ts apps/desktop/src/ipc/methods/window.test.ts — 47 tests passed
  • Desktop, web, and contracts package typechecks passed
  • Targeted lint and formatting checks passed
  • Manually toggled the setting and restarted the desktop app under Wayland + Hyprland

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI change
  • No animation or timing change requires a video

Implemented with GPT-5 Codex in the Codex harness.


Note

Low Risk
Scoped to Linux window chrome and desktop settings persistence; non-Linux platforms are unchanged and coverage is added for IPC, settings, and title-bar resolution.

Overview
Linux desktop users can turn on Use native window frame in Settings → Appearance. The choice is stored as linuxNativeWindowFrame in desktop settings (default off) and exposed through new IPC/preload bridge methods that return null / no-op on Windows and macOS.

On the next launch, DesktopWindow applies the preference via resolveWindowTitleBarOptions: enabled on Linux uses frame: true; otherwise behavior is unchanged (hidden title bar / overlay on Linux and Windows, hidden inset on macOS). Theme sync skips setTitleBarOverlay for windows without an overlay.

The contracts DesktopBridge type and install docs describe the Linux-only option and restart requirement.

Reviewed by Cursor Bugbot for commit 97d20dc. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add Linux native window frame setting to the Appearance panel

  • Adds a linuxNativeWindowFrame boolean to DesktopAppSettings, persisted to disk and defaulting to false.
  • Exposes getLinuxNativeWindowFrame and setLinuxNativeWindowFrame IPC handlers in window.ts; both return null/false on non-Linux platforms.
  • resolveWindowTitleBarOptions in DesktopWindow.ts uses the persisted preference at window creation to choose between native frame ({ frame: true }) and the existing title bar overlay.
  • A LinuxNativeWindowFrameSetting toggle is added to the Appearance settings panel in SettingsPanels.tsx; it is hidden on Windows and macOS.
  • Behavioral Change: theme sync (syncWindowAppearance) now skips setTitleBarOverlay for windows created with a native frame; the setting takes effect only after a full restart.

Macroscope summarized 97d20dc.

@github-actions github-actions Bot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 5, 2026
@macroscopeapp

macroscopeapp Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature (Linux native window frame setting) with new UI components, IPC channels, and window rendering logic. New features introducing user-facing behavior warrant human review regardless of how well-scoped they are.

You can customize Macroscope's approvability policy. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant