Add API to restrict the windowing backend to load

In situations when the default backend would fail (for example
when compiled with X11 support but run without DISPLAY), or
when the application is using backend specific code, it makes
sense to let the application choose the backend explicitly.

https://bugzilla.gnome.org/show_bug.cgi?id=707869
This commit is contained in:
Giovanni Campagna
2013-09-10 18:29:28 +02:00
parent 5c035f2107
commit da3e6988ad
5 changed files with 83 additions and 50 deletions

View File

@ -1390,53 +1390,6 @@ _clutter_context_is_initialized (void)
return ClutterCntx->is_initialized;
}
static ClutterBackend *
clutter_create_backend (void)
{
const char *backend = g_getenv ("CLUTTER_BACKEND");
ClutterBackend *retval = NULL;
if (backend != NULL)
backend = g_intern_string (backend);
#ifdef CLUTTER_WINDOWING_OSX
if (backend == NULL || backend == I_(CLUTTER_WINDOWING_OSX))
retval = g_object_new (CLUTTER_TYPE_BACKEND_OSX, NULL);
else
#endif
#ifdef CLUTTER_WINDOWING_WIN32
if (backend == NULL || backend == I_(CLUTTER_WINDOWING_WIN32))
retval = g_object_new (CLUTTER_TYPE_BACKEND_WIN32, NULL);
else
#endif
#ifdef CLUTTER_WINDOWING_X11
if (backend == NULL || backend == I_(CLUTTER_WINDOWING_X11))
retval = g_object_new (CLUTTER_TYPE_BACKEND_X11, NULL);
else
#endif
#ifdef CLUTTER_WINDOWING_WAYLAND
if (backend == NULL || backend == I_(CLUTTER_WINDOWING_WAYLAND))
retval = g_object_new (CLUTTER_TYPE_BACKEND_WAYLAND, NULL);
else
#endif
#ifdef CLUTTER_WINDOWING_EGL
if (backend == NULL || backend == I_(CLUTTER_WINDOWING_EGL))
retval = g_object_new (CLUTTER_TYPE_BACKEND_EGL_NATIVE, NULL);
else
#endif
#ifdef CLUTTER_WINDOWING_GDK
if (backend == NULL || backend == I_(CLUTTER_WINDOWING_GDK))
retval = g_object_new (CLUTTER_TYPE_BACKEND_GDK, NULL);
else
#endif
if (backend == NULL)
g_error ("No default Clutter backend found.");
else
g_error ("Unsupported Clutter backend: '%s'", backend);
return retval;
}
static ClutterMainContext *
clutter_context_get_default_unlocked (void)
{
@ -1449,7 +1402,7 @@ clutter_context_get_default_unlocked (void)
ctx->is_initialized = FALSE;
/* create the windowing system backend */
ctx->backend = clutter_create_backend ();
ctx->backend = _clutter_create_backend ();
/* create the default settings object, and store a back pointer to
* the backend singleton