patina-ui 0.1.4

Patina: the window frame, components and design language shared by Photograph, UnAmp and other egui desktop apps
Documentation
# Known issues

Problems seen in Patina apps that aren't fixed yet, with what's known so far.

## Windows stop redrawing on GNOME Shell until minimised

**Seen:** 2026-10-11, GNOME Shell 50.1 on Wayland, NVIDIA (Vulkan), eframe 0.35 / winit 0.30.13.
Photograph 0.4.4 and Notebook froze within half an hour of each other. Both came back after being
minimised and restored.

**What happens:**

- On Wayland, winit sends `RedrawRequested` only after the compositor's frame callback for the
  window's last frame arrives (`FrameCallbackState::Requested` in winit's Wayland backend).
  GNOME Shell stopped sending those callbacks while the windows were still on screen, so no
  redraw ever came.
- Input still arrives, but every repaint it asks for waits behind the missing callback, so the
  window looks frozen.
- **An app that repaints continuously spins** (Photograph: about 90% of a core). eframe's
  `check_redraw_requests` sets `ControlFlow::Poll` and calls `request_redraw` on every pass. Its
  guard for hidden windows doesn't help: winit can't tell that a window is minimised on Wayland.
- **An app that repaints on demand just sleeps** (Notebook).
- Minimising and restoring makes GNOME Shell send frame callbacks again.

**Evidence:**

- `eu-stack` and `perf` of the stuck processes showed the main thread in winit's
  `pump_events`/`loop_dispatch`, with no egui or wgpu frames at all.
- From the same period, GNOME Shell's journal repeatedly logged
  `meta_window_set_stack_position_no_sync: assertion 'window->stack_position >= 0' failed`. A
  window missing from the stack would plausibly be treated as hidden and get no frame callbacks.
  That link is unproven.

**Suspected:** a GNOME Shell bug, possibly set off by moving or raising windows. Patina's custom
title bar hands every drag to the compositor (`StartDrag`). Not reproduced on purpose yet.

**Workaround:** minimise and restore the window.

**To look into:**

1. Run an app with `WAYLAND_DEBUG=client` logging to a file until it freezes. The log will show
   the last `wl_surface.frame` request that never got a `wl_callback.done`. Note the time of
   GNOME Shell's stack assertion.
2. Find what triggers it: dragging by the title bar, maximising, workspaces, screen lock.
3. Report it to GNOME (mutter) with the log.
4. Check whether a newer winit times out a missing frame callback. If it does, decide whether
   Patina should carry a workaround until GNOME is fixed.