Found 2026-09-25. Compiz 0.9 (ini backend), XFCE, GTX 760 / NVIDIA 470,
focus-follows-mouse, no autoraise.

SYMPTOM

A GTK4 window is mostly transparent while it is the active window: background,
list bodies and rows are not painted, so the wallpaper and the window behind show
through. Only widgets that damage themselves (buttons, headers) still draw, plus
the WM title bar. The same window renders correctly while inactive. Affects all
GTK4 apps; GTK3 and Qt are unaffected.

Easiest trigger: with another window focused underneath, move the pointer straight
onto a button of the GTK4 window and leave it there.

CAUSE

GTK4 sets _NET_WM_OPAQUE_REGION on its windows. Compiz culls painting against that
region. If the decoration geometry changes when a window becomes active, the
region no longer matches the frame, Compiz skips repainting the window, and
whatever was behind it stays on screen.

THE RULE

The active and inactive decoration shadow must be geometrically IDENTICAL.
Any difference re-triggers the bug - a different radius alone is enough, and a
different offset alone is enough. Both were verified by testing.

SETTINGS (~/.config/compiz-1/compizconfig/Default.ini, section [decor])

    s0_active_shadow_radius   = 13.000000
    s0_inactive_shadow_radius = 13.000000
    s0_active_shadow_x_offset = 5
    s0_inactive_shadow_x_offset = 5
    s0_active_shadow_y_offset = 5
    s0_inactive_shadow_y_offset = 5

13 is the ceiling: compiz caps inactive_shadow_radius at 13.0 while the active one
would allow up to 18.0. Asking for 15/15 silently leaves the inactive side at 13 -
which recreates the asymmetry. The offsets are unconstrained; 5,5 is a free choice,
it only has to be the same on both sides.

Set them live (compiz persists them to Default.ini itself, no restart needed):

   dbus-send --type=method_call --dest=org.freedesktop.compiz \
      /org/freedesktop/compiz/decor/screen0/active_shadow_radius \
      org.freedesktop.compiz.set double:13.0

Same path pattern for the other five; x/y offsets take int32 instead of double.

PITFALLS

  • Decimal separator: compiz writes “13.000000” or “13,000000” depending on the
    locale in use at the time. Both parse here, but after restoring this file under
    a different LC_NUMERIC, check the values - a misparsed radius brings the bug back.
  • Restore Default.ini only while compiz is NOT running. Compiz keeps the whole
    configuration in memory and rewrites the file on exit.
  • Default.ini is machine-specific: s0_outputs holds the monitor layout,
    s0_skydome_image an absolute path.

RULED OUT (do not waste time on these)

GSK_RENDERER (cairo/gl/vulkan - the bug appears with the variable unset too),
workarounds/force_glx_sync, workarounds/force_swap_buffers, opengl/texture_compression,
fade/dim_unresponsive, decor/mipmap, animation focus effects (already “None”).