The Preferences window's availability probe (added to surface missing GStreamer deps in-UI) reused loadGstreamerModules(), which also checks for Cogl. Cogl is Mutter's private library — its typelib is only reachable from inside the actual gnome-shell process (which gets a private GI search path), never from the separate, plain-GTK4 Preferences process. So the check always failed there with "Requiring Cogl ... not found" even when live wallpapers were working correctly in the real shell process, as confirmed by a user report where the extension's own log showed live wallpaper playback starting cleanly while Preferences simultaneously claimed GStreamer was missing. Split into loadGstreamerModules() (Gst+GstApp+Cogl, used only by liveWallpaper.js in the shell process) and a new lighter checkGstreamerBaseAvailable() (Gst+GstApp only) for prefs.js, with a note in the UI that a clean check there isn't a full guarantee since the private half can't be verified from that process. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RDqbdjsiisSU7CbQke4g8
53 lines
2.3 KiB
JavaScript
53 lines
2.3 KiB
JavaScript
/**
|
||
* Loads the GObject-Introspection bindings the live wallpaper feature needs
|
||
* (Gst, GstApp for the appsink signals, Cogl for uploading decoded frames)
|
||
* and initializes GStreamer. Used by liveWallpaper.js, which only ever runs
|
||
* inside the gnome-shell process itself.
|
||
*
|
||
* Cogl is Mutter's *private* library: its typelib is only reachable from
|
||
* gnome-shell's own process (which gets a private search path), never from
|
||
* an ordinary GTK application. Do NOT reuse this for a diagnostic check in
|
||
* prefs.js — that runs in a separate, plain GTK4 process where importing
|
||
* Cogl will *always* fail regardless of whether live wallpapers actually
|
||
* work, producing a false "not found" report. Use
|
||
* checkGstreamerBaseAvailable() there instead.
|
||
*/
|
||
export async function loadGstreamerModules() {
|
||
const [{default: Gst}, , {default: Cogl}] = await Promise.all([
|
||
import('gi://Gst?version=1.0'),
|
||
import('gi://GstApp?version=1.0'),
|
||
import('gi://Cogl'),
|
||
]);
|
||
|
||
if (!Gst.is_initialized())
|
||
Gst.init(null);
|
||
|
||
return {Gst, Cogl};
|
||
}
|
||
|
||
/**
|
||
* Lighter check for prefs.js: confirms the system-wide GStreamer packages
|
||
* (Gst core + the "app" plugin providing GstApp) are installed, without
|
||
* touching Cogl. This can't fully confirm live wallpapers will work (that
|
||
* also needs Cogl, only checkable from inside gnome-shell itself), but a
|
||
* failure here is a genuine, actionable problem, unlike a Cogl probe.
|
||
*/
|
||
export async function checkGstreamerBaseAvailable() {
|
||
const [{default: Gst}] = await Promise.all([
|
||
import('gi://Gst?version=1.0'),
|
||
import('gi://GstApp?version=1.0'),
|
||
]);
|
||
|
||
if (!Gst.is_initialized())
|
||
Gst.init(null);
|
||
}
|
||
|
||
export const GSTREAMER_INSTALL_HINT =
|
||
'Install GStreamer’s "base" and "good" plugin sets (with their GObject-Introspection data), ' +
|
||
'which provide playback and GIF decoding:\n' +
|
||
'• Arch: sudo pacman -S gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav\n' +
|
||
'• Debian/Ubuntu: sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good ' +
|
||
'gir1.2-gst-plugins-base-1.0\n' +
|
||
'• Fedora: sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good gobject-introspection\n' +
|
||
'Then restart GNOME Shell (log out and back in on Wayland).';
|