Both gnome-shell animations paint their own independent static copy of
the desktop background on top of the live wallpaper actor: the
workspace-switch swipe (WorkspaceBackground) and the lock screen
(UnlockDialog, which already applies native blur). Patch both
private _createBackground methods to hide the static clone /
attach a shared-content actor so the live video shows through
instead, gated on the existing apply-to-lock-screen settings
An early seek right after set_state(PLAYING) raced the pipeline's
preroll and GStreamer silently dropped it, so a configured custom
rate only took effect after the first EOS loop-restart. Instead,
flag the pending seek and fire it from the first ASYNC_DONE bus
message, once the pipeline is actually ready to seek.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Throttle the EOS loop-restart seek so a fast-looping clip can't fire
back-to-back blocking flush seeks on gnome-shell's main loop, which
was severe enough to freeze the whole desktop. Also apply the
configured playback rate immediately on start instead of only from
the first loop restart.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Gst.init() has no async variant. If the plugin registry cache is stale
(e.g. right after a system update), it synchronously rescans every
plugin, spawning gst-plugin-scanner per plugin and probing hardware
for codecs. Since gnome-shell is single-threaded and is the
compositor, that can freeze the whole screen for several seconds,
same as the blocking UPower proxy lookup fixed earlier.
Set GST_REGISTRY_UPDATE=no when a cache already exists so Gst.init()
trusts it and returns immediately, then refresh the cache in a
throwaway subprocess afterward so it doesn't go stale forever.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>