Switching decorations, fullscreen and compositor bypass on and off breaks screen refresh
(Tested with mutter 3.32.2)
Attached is a minimal program that reproduces the issue. It can be built with gcc -o mutter-refresh-repro mutter-refresh-repro.c -lX11 -lm -lcairo
.
The problem occurs when the window is already in undecorated + fullscreen + uncomposited state, and then quickly requesting windowed + decorated + composited mode then right away undecorated + fullscreen + uncomposited makes the screen stops refreshing.
The program let you do that by pressing 'f' to get the undecorated + fullscreen + uncomposited window, then 'g' to quickly switch modes and trigger the issue. Pressing any other key should change the displayed number and background color, but this will stop doing anything after the issue triggers. Pressing Alt-Tab, even without switching application is enough to get the rendering working again.