Closes https://github.com/zed-industries/zed/issues/60595 cc Anthony-Eid since you did an initial pass on this. # Objective Currenly on macOs there is no way right now after the following regression to use window management short keys to move them around. This worked before, but was regressed initially in https://github.com/zed-industries/zed/pull/59836 that tried fixing a macos 27 clicking delay issue on the titlebar. That accidentally set the `native_window.setMovable_(is_movable as BOOL)` to false. Because of this mocos detects this and disables the window managements actions because it thinks the window can/should not be able to move. ## Solution The macOS 27 click delay actually comes from AppKit's native titlebar dragging, not from `NSWindow.isMovable`. The problem is that `is_movable` is also what enables the Window menu's tiling options, and #59836 used it to turn off dragging, which disabled the tiling menu as a side effect. To fix this, I restored `is_movable` to its real meaning so the tiling menu works again, and added a separate `WindowOptions::app_owns_titlebar_drag` flag for windows that draw their own titlebar and handle dragging via `Window::start_window_move`. On macOS this tells AppKit to stop owning titlebar drags (removing the click delay) without affecting `is_movable`. Zed's main window now sets both `is_movable: true` and `app_owns_titlebar_drag: true`, so the tiling menu stays enabled, the click delay is gone. I also added a `window_movable` gpui example to make this behavior easy to test manually. ## Testing I added a gpui test example that helps testing this bug. You can run the newly added gpui example with 4 different window configurations that should confirm that this change is the right one for all of the window types that we have. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase **After** (note this now shows the window managements entries as they were greyed out.) https://github.com/user-attachments/assets/192cc0e1-15d8-486f-b788-a92bb51fb7d1 **GPUI** (test examples with different window configurations.) https://github.com/user-attachments/assets/c9e0f4d3-606b-4cd7-b4d8-a5bb16508164 --- Release Notes: - Fix macos window management controlls were grayed out/not working
GPUI Examples
Examples can be run from the Zed repository root:
cargo run -p gpui --example hello_world
Where to start
hello_worldshows the basic shape of a GPUI application: create anApplication, open a window, create a root view, and render adiv.inputdemonstrates text input, focus, selections, clipboard actions, and keyboard bindings.uniform_listshows how to render a simple virtualized list.testingdemonstrates#[gpui::test],TestAppContext, actions, focus, and window-based tests.
Layout and styling
grid_layoutdemonstrates CSS-grid-style layout.opacitydemonstrates opacity styling.patternshows patterned backgrounds.shadowdemonstrates box shadows.textshows styled text rendering.text_layoutdemonstrates text alignment, decoration, weights, and wrapping.text_wrappershows wrapping text content.
Interaction
anchordemonstrates anchored positioning.data_tablecombines virtualized list rendering with table-style rows and a custom scrollbar.drag_dropshows draggable elements and drop targets.focus_visibledemonstrates keyboard-visible focus styling.mouse_pressuredemonstrates pressure-sensitive pointer input where supported.popovershows floating layers withdeferredandanchored.scrollabledemonstrates scrollable content.tab_stopshows keyboard tab navigation.
Images, drawing, and animation
animationdemonstrates GPUI animations and animated SVG transforms.gif_viewershows GIF rendering.gradientdemonstrates linear gradients and color spaces.imageshows local and remote image loading, image sizing, and asset setup.image_gallerydemonstrates image caching and loading remote images.image_loadingshows image loading states and asset loading.paintingdemonstrates custom drawing with paths and canvas.svgshows SVG rendering.
Windows and application behavior
move_entity_between_windowsshows moving an entity between windows.on_window_close_quitdemonstrates quitting when a window closes.set_menusshows application menu setup.windowdemonstrates creating normal, dialog, popup, and floating windows.window_positioningdemonstrates window bounds and placement.window_shadowdemonstrates window shadow styling.
Specialized examples
These examples are useful when working on GPUI itself, but they may not be the best starting point for new applications:
active_state_bugis a focused active-state reproduction.layer_shelldemonstrates Linux layer-shell windows.list_exampledemonstrates bottom-aligned list state and scrollbar behavior.ownership_postsupports the ownership and data-flow documentation.paths_benchis a path rendering benchmark.treerenders a deep tree of nested elements.