Add --nested command line argument

As of "core: start as wayland display server when
XDG_SESSION_TYPE=wayland" it is no longer possible to run a nested
mutter Wayland session on top of another Wayland session. This patch
adds a command line argument to make it possible to force mutter to
start as a nested compositor.

https://bugzilla.gnome.org/show_bug.cgi?id=758658
This commit is contained in:
Jonas Ådahl 2015-11-26 15:02:20 +08:00
parent 7fe2873750
commit c22bee19e1

View File

@ -168,6 +168,7 @@ static gboolean opt_disable_sm;
static gboolean opt_sync; static gboolean opt_sync;
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND
static gboolean opt_wayland; static gboolean opt_wayland;
static gboolean opt_nested;
#endif #endif
#ifdef HAVE_NATIVE_BACKEND #ifdef HAVE_NATIVE_BACKEND
static gboolean opt_display_server; static gboolean opt_display_server;
@ -216,6 +217,12 @@ static GOptionEntry meta_options[] = {
N_("Run as a wayland compositor"), N_("Run as a wayland compositor"),
NULL NULL
}, },
{
"nested", 0, 0, G_OPTION_ARG_NONE,
&opt_nested,
N_("Run as a nested compositor"),
NULL
},
#endif #endif
#ifdef HAVE_NATIVE_BACKEND #ifdef HAVE_NATIVE_BACKEND
{ {
@ -366,21 +373,30 @@ check_for_wayland_session_type (void)
static void static void
init_backend (void) init_backend (void)
{ {
gboolean session_type_is_wayland = FALSE; #ifdef HAVE_WAYLAND
gboolean run_as_wayland_compositor = opt_wayland;
#if defined(HAVE_WAYLAND) && defined(HAVE_NATIVE_BACKEND) #ifdef HAVE_NATIVE_BACKEND
session_type_is_wayland = check_for_wayland_session_type (); if (opt_nested && opt_display_server)
#endif {
meta_warning ("Can't run both as nested and as a display server\n");
meta_exit (META_EXIT_ERROR);
}
#if defined(CLUTTER_WINDOWING_EGL) && defined(HAVE_NATIVE_BACKEND) if (!run_as_wayland_compositor)
if (opt_display_server || session_type_is_wayland) run_as_wayland_compositor = check_for_wayland_session_type ();
#ifdef CLUTTER_WINDOWING_EGL
if (opt_display_server || (run_as_wayland_compositor && !opt_nested))
clutter_set_windowing_backend (CLUTTER_WINDOWING_EGL); clutter_set_windowing_backend (CLUTTER_WINDOWING_EGL);
else else
#endif
#endif
#endif #endif
clutter_set_windowing_backend (CLUTTER_WINDOWING_X11); clutter_set_windowing_backend (CLUTTER_WINDOWING_X11);
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND
meta_set_is_wayland_compositor (opt_wayland || session_type_is_wayland); meta_set_is_wayland_compositor (run_as_wayland_compositor);
#endif #endif
} }