Repository navigation
windows: menus and dialogs in windows of their own, as Acrylic popups - #238
Merged
Merged
Conversation
foxnne
force-pushed
the
windows/acrylic-menus
branch
from
October 8, 2026 16:03
59108bb to
4051437
Compare
12 tasks
With floats as windows (`FIZZY_POPOUT=1` on Windows), a menu or dialog now leaves the main window as it does on macOS (`viewports.menus`): a borderless window owned by the window it opens from, never activated, dressed by DWM (`win32_titlebar.viewportMenuChrome`) with Acrylic (DWMSBT_TRANSIENTWINDOW, the material of Windows 11's menus and flyouts), DWM's rounded corners and shadow, no border, no system menu and no DWM transitions. The window's base is drawn under the menu at the window opacity, as over the main window's Acrylic. Step 3 of docs/WINDOWS_LINUX_GLASS_PLAN.md. An owned window is not carried when its owner moves, so on Windows a menu's window rides on nothing and is placed each frame (`viewportPlaceRiding`); a dialog of a float that is out is owned by that float's window, for its stacking. DWM draws a never-activated window's backdrop as its solid fallback, so the menu's window is kept looking active to it (`WM_NCACTIVATE`). Checked in the Windows 11 ARM VM (WARP, aarch64-windows-gnu Debug), with real input (`SendInput`) and the window list (`EnumWindows`, DWM attributes): - File and Help menus, and the "Unsaved changes" dialog, each open in a window of their own: owned by the main window, directly above it, `WS_EX_NOACTIVATE`, no `WS_SYSMENU`, backdrop type Acrylic, corner preference round. The main window stays the foreground window. - The first click on an item acts (New File, Open Files), and lands on the menu, not on what is under it: a temporary log showed the press arriving on the menu's window and mapping into the menu's subwindow. - The dialog's window hides with a minimized main window and comes back on restore. Not checked: the look, since the VM's DWM draws every backdrop as its solid fallback; the kept-active trick, for the same reason; a menu over a float's window. Those need a hardware GPU. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
foxnne
force-pushed
the
windows/acrylic-menus
branch
from
October 8, 2026 18:01
4051437 to
8d66910
Compare
foxnne
marked this pull request as ready for review
October 8, 2026 18:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #226 (
docs/NATIVE_WINDOWS_PLAN.md); step 3 ofdocs/WINDOWS_LINUX_GLASS_PLAN.md(#236).What changes
With floats as windows (
FIZZY_POPOUT=1on Windows), menus and dialogs now leave the main window as they do on macOS (viewports.menus). Each one is a borderless window owned by the window it opens from, never activated, and dressed by DWM (win32_titlebar.viewportMenuChrome):DWMSBT_TRANSIENTWINDOW, the material of Windows 11's own menus);DWM draws a never-activated window's backdrop as its solid fallback, so the menu's window is kept looking active (
WM_NCACTIVATE). An owned window isn't carried when its owner moves, so a menu's window rides on nothing and is placed each frame.SDK impact
Verified
Windows 11 ARM VM (
fizzy-win11, WARP, aarch64-windows-gnu Debug), driven with real input (SendInput) and checked against the window list (EnumWindowsplus DWM attributes) and screenshots:WS_EX_NOACTIVATE, noWS_SYSMENU;untitled-1, and Open Files opens the Open dialog. A temporary log showed the press arriving on the menu's window and mapping into the menu's dvui subwindow, not what lies under it.zig build,test,test-integration,check-web,test-sdk-version, and the Windows and Linux cross-builds.WM_NCACTIVATEtrick keeps the Acrylic.viewports.menuswas already on for macOS, and this is the Windows branch).Seen while testing, not caused by this change:
FIZZY_NATIVE_DIALOGS=0).Follow-ups
app/layout/Floats.zig).🤖 Generated with Claude Code