wayland: Add setting/api to check the policy to set up the X11 display
This replaces meta_should_autostart_x11_display(). The "on-demand" policy is not honored yet. https://gitlab.gnome.org/GNOME/mutter/merge_requests/709
This commit is contained in:
parent
e8949292c1
commit
7ef32f747b
7 changed files with 33 additions and 9 deletions
|
@ -124,6 +124,8 @@
|
||||||
real-time scheduling. The executable
|
real-time scheduling. The executable
|
||||||
or user must have CAP_SYS_NICE.
|
or user must have CAP_SYS_NICE.
|
||||||
Requires a restart.
|
Requires a restart.
|
||||||
|
• “autostart-xwayland” — initializes Xwayland lazily if there are
|
||||||
|
X11 clients. Requires restart.
|
||||||
</description>
|
</description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ typedef enum _MetaExperimentalFeature
|
||||||
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER = (1 << 0),
|
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER = (1 << 0),
|
||||||
META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS = (1 << 1),
|
META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS = (1 << 1),
|
||||||
META_EXPERIMENTAL_FEATURE_RT_SCHEDULER = (1 << 2),
|
META_EXPERIMENTAL_FEATURE_RT_SCHEDULER = (1 << 2),
|
||||||
|
META_EXPERIMENTAL_FEATURE_AUTOSTART_XWAYLAND = (1 << 3),
|
||||||
} MetaExperimentalFeature;
|
} MetaExperimentalFeature;
|
||||||
|
|
||||||
#define META_TYPE_SETTINGS (meta_settings_get_type ())
|
#define META_TYPE_SETTINGS (meta_settings_get_type ())
|
||||||
|
|
|
@ -266,6 +266,8 @@ experimental_features_handler (GVariant *features_variant,
|
||||||
features |= META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS;
|
features |= META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS;
|
||||||
else if (g_str_equal (feature, "rt-scheduler"))
|
else if (g_str_equal (feature, "rt-scheduler"))
|
||||||
features |= META_EXPERIMENTAL_FEATURE_RT_SCHEDULER;
|
features |= META_EXPERIMENTAL_FEATURE_RT_SCHEDULER;
|
||||||
|
else if (g_str_equal (feature, "autostart-xwayland"))
|
||||||
|
features |= META_EXPERIMENTAL_FEATURE_AUTOSTART_XWAYLAND;
|
||||||
else
|
else
|
||||||
g_info ("Unknown experimental feature '%s'\n", feature);
|
g_info ("Unknown experimental feature '%s'\n", feature);
|
||||||
}
|
}
|
||||||
|
|
|
@ -760,7 +760,7 @@ meta_display_open (void)
|
||||||
display->selection = meta_selection_new (display);
|
display->selection = meta_selection_new (display);
|
||||||
meta_clipboard_manager_init (display);
|
meta_clipboard_manager_init (display);
|
||||||
|
|
||||||
if (meta_should_autostart_x11_display ())
|
if (meta_get_x11_display_policy () == META_DISPLAY_POLICY_MANDATORY)
|
||||||
{
|
{
|
||||||
if (!meta_display_init_x11 (display, &error))
|
if (!meta_display_init_x11 (display, &error))
|
||||||
g_error ("Failed to start Xwayland: %s", error->message);
|
g_error ("Failed to start Xwayland: %s", error->message);
|
||||||
|
|
|
@ -30,10 +30,17 @@ typedef enum _MetaCompositorType
|
||||||
META_COMPOSITOR_TYPE_X11,
|
META_COMPOSITOR_TYPE_X11,
|
||||||
} MetaCompositorType;
|
} MetaCompositorType;
|
||||||
|
|
||||||
|
typedef enum _MetaDisplayPolicy
|
||||||
|
{
|
||||||
|
META_DISPLAY_POLICY_MANDATORY,
|
||||||
|
META_DISPLAY_POLICY_ON_DEMAND,
|
||||||
|
META_DISPLAY_POLICY_DISABLED,
|
||||||
|
} MetaDisplayPolicy;
|
||||||
|
|
||||||
META_EXPORT_TEST
|
META_EXPORT_TEST
|
||||||
void meta_override_compositor_configuration (MetaCompositorType compositor_type,
|
void meta_override_compositor_configuration (MetaCompositorType compositor_type,
|
||||||
GType backend_gtype);
|
GType backend_gtype);
|
||||||
|
|
||||||
gboolean meta_should_autostart_x11_display (void);
|
MetaDisplayPolicy meta_get_x11_display_policy (void);
|
||||||
|
|
||||||
#endif /* META_MAIN_PRIVATE_H */
|
#endif /* META_MAIN_PRIVATE_H */
|
||||||
|
|
|
@ -717,15 +717,27 @@ prefs_changed_callback (MetaPreference pref,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
MetaDisplayPolicy
|
||||||
meta_should_autostart_x11_display (void)
|
meta_get_x11_display_policy (void)
|
||||||
{
|
{
|
||||||
MetaBackend *backend = meta_get_backend ();
|
MetaBackend *backend = meta_get_backend ();
|
||||||
gboolean wants_x11 = TRUE;
|
|
||||||
|
if (META_IS_BACKEND_X11_CM (backend))
|
||||||
|
return META_DISPLAY_POLICY_MANDATORY;
|
||||||
|
|
||||||
#ifdef HAVE_WAYLAND
|
#ifdef HAVE_WAYLAND
|
||||||
wants_x11 = !opt_no_x11;
|
if (meta_is_wayland_compositor ())
|
||||||
|
{
|
||||||
|
MetaSettings *settings = meta_backend_get_settings (backend);
|
||||||
|
|
||||||
|
if (opt_no_x11)
|
||||||
|
return META_DISPLAY_POLICY_DISABLED;
|
||||||
|
|
||||||
|
if (meta_settings_is_experimental_feature_enabled (settings,
|
||||||
|
META_EXPERIMENTAL_FEATURE_AUTOSTART_XWAYLAND))
|
||||||
|
return META_DISPLAY_POLICY_ON_DEMAND;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return META_IS_BACKEND_X11_CM (backend) || wants_x11;
|
return META_DISPLAY_POLICY_MANDATORY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -418,7 +418,7 @@ meta_wayland_init (void)
|
||||||
meta_wayland_eglstream_controller_init (compositor);
|
meta_wayland_eglstream_controller_init (compositor);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (meta_should_autostart_x11_display ())
|
if (meta_get_x11_display_policy () != META_DISPLAY_POLICY_DISABLED)
|
||||||
{
|
{
|
||||||
if (!meta_xwayland_init (&compositor->xwayland_manager, compositor->wayland_display))
|
if (!meta_xwayland_init (&compositor->xwayland_manager, compositor->wayland_display))
|
||||||
g_error ("Failed to start X Wayland");
|
g_error ("Failed to start X Wayland");
|
||||||
|
@ -443,7 +443,7 @@ meta_wayland_init (void)
|
||||||
compositor->display_name = g_strdup (display_name);
|
compositor->display_name = g_strdup (display_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (meta_should_autostart_x11_display ())
|
if (meta_get_x11_display_policy () != META_DISPLAY_POLICY_DISABLED)
|
||||||
{
|
{
|
||||||
set_gnome_env ("DISPLAY", meta_wayland_get_xwayland_display_name (compositor));
|
set_gnome_env ("DISPLAY", meta_wayland_get_xwayland_display_name (compositor));
|
||||||
set_gnome_env ("XAUTHORITY", meta_wayland_get_xwayland_auth_file (compositor));
|
set_gnome_env ("XAUTHORITY", meta_wayland_get_xwayland_auth_file (compositor));
|
||||||
|
|
Loading…
Reference in a new issue