mirror of
https://github.com/brl/mutter.git
synced 2025-04-16 07:09:38 +00:00
main: Let the X11 CM backend deal with selecting the display
It's specific to that backend, so do it there. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1833>
This commit is contained in:
parent
89053cc6f7
commit
6558d43cd5
@ -37,10 +37,23 @@
|
|||||||
#include "compositor/meta-compositor-x11.h"
|
#include "compositor/meta-compositor-x11.h"
|
||||||
#include "core/display-private.h"
|
#include "core/display-private.h"
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROP_0,
|
||||||
|
|
||||||
|
PROP_DISPLAY_NAME,
|
||||||
|
|
||||||
|
N_PROPS
|
||||||
|
};
|
||||||
|
|
||||||
|
static GParamSpec *obj_props[N_PROPS];
|
||||||
|
|
||||||
struct _MetaBackendX11Cm
|
struct _MetaBackendX11Cm
|
||||||
{
|
{
|
||||||
MetaBackendX11 parent;
|
MetaBackendX11 parent;
|
||||||
|
|
||||||
|
char *display_name;
|
||||||
|
|
||||||
MetaCursorRenderer *cursor_renderer;
|
MetaCursorRenderer *cursor_renderer;
|
||||||
char *keymap_layouts;
|
char *keymap_layouts;
|
||||||
char *keymap_variants;
|
char *keymap_variants;
|
||||||
@ -437,6 +450,50 @@ meta_backend_x11_cm_translate_crossing_event (MetaBackendX11 *x11,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_backend_x11_cm_set_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
const GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
MetaBackendX11Cm *backend_x11_cm = META_BACKEND_X11_CM (object);
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_DISPLAY_NAME:
|
||||||
|
backend_x11_cm->display_name = g_value_dup_string (value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_backend_x11_cm_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
MetaBackendX11Cm *x11_cm = META_BACKEND_X11_CM (object);
|
||||||
|
|
||||||
|
g_clear_pointer (&x11_cm->display_name, g_free);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_backend_x11_cm_constructed (GObject *object)
|
||||||
|
{
|
||||||
|
MetaBackendX11Cm *x11_cm = META_BACKEND_X11_CM (object);
|
||||||
|
const char *display_name;
|
||||||
|
|
||||||
|
if (x11_cm->display_name)
|
||||||
|
display_name = (const char *) x11_cm->display_name;
|
||||||
|
else
|
||||||
|
display_name = g_getenv ("MUTTER_DISPLAY");
|
||||||
|
|
||||||
|
if (display_name)
|
||||||
|
g_setenv ("DISPLAY", display_name, TRUE);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (meta_backend_x11_cm_parent_class)->constructed (object);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_backend_x11_cm_init (MetaBackendX11Cm *backend_x11_cm)
|
meta_backend_x11_cm_init (MetaBackendX11Cm *backend_x11_cm)
|
||||||
{
|
{
|
||||||
@ -455,9 +512,14 @@ meta_backend_x11_cm_init (MetaBackendX11Cm *backend_x11_cm)
|
|||||||
static void
|
static void
|
||||||
meta_backend_x11_cm_class_init (MetaBackendX11CmClass *klass)
|
meta_backend_x11_cm_class_init (MetaBackendX11CmClass *klass)
|
||||||
{
|
{
|
||||||
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
MetaBackendClass *backend_class = META_BACKEND_CLASS (klass);
|
MetaBackendClass *backend_class = META_BACKEND_CLASS (klass);
|
||||||
MetaBackendX11Class *backend_x11_class = META_BACKEND_X11_CLASS (klass);
|
MetaBackendX11Class *backend_x11_class = META_BACKEND_X11_CLASS (klass);
|
||||||
|
|
||||||
|
object_class->set_property = meta_backend_x11_cm_set_property;
|
||||||
|
object_class->finalize = meta_backend_x11_cm_finalize;
|
||||||
|
object_class->constructed = meta_backend_x11_cm_constructed;
|
||||||
|
|
||||||
backend_class->post_init = meta_backend_x11_cm_post_init;
|
backend_class->post_init = meta_backend_x11_cm_post_init;
|
||||||
backend_class->create_renderer = meta_backend_x11_cm_create_renderer;
|
backend_class->create_renderer = meta_backend_x11_cm_create_renderer;
|
||||||
backend_class->create_monitor_manager = meta_backend_x11_cm_create_monitor_manager;
|
backend_class->create_monitor_manager = meta_backend_x11_cm_create_monitor_manager;
|
||||||
@ -472,5 +534,15 @@ meta_backend_x11_cm_class_init (MetaBackendX11CmClass *klass)
|
|||||||
backend_x11_class->handle_host_xevent = meta_backend_x11_cm_handle_host_xevent;
|
backend_x11_class->handle_host_xevent = meta_backend_x11_cm_handle_host_xevent;
|
||||||
backend_x11_class->translate_device_event = meta_backend_x11_cm_translate_device_event;
|
backend_x11_class->translate_device_event = meta_backend_x11_cm_translate_device_event;
|
||||||
backend_x11_class->translate_crossing_event = meta_backend_x11_cm_translate_crossing_event;
|
backend_x11_class->translate_crossing_event = meta_backend_x11_cm_translate_crossing_event;
|
||||||
|
|
||||||
|
obj_props[PROP_DISPLAY_NAME] =
|
||||||
|
g_param_spec_string ("display-name",
|
||||||
|
"display name",
|
||||||
|
"X11 display name",
|
||||||
|
NULL,
|
||||||
|
G_PARAM_WRITABLE |
|
||||||
|
G_PARAM_CONSTRUCT_ONLY |
|
||||||
|
G_PARAM_STATIC_STRINGS);
|
||||||
|
g_object_class_install_properties (object_class, N_PROPS, obj_props);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,28 +303,6 @@ meta_get_option_context (void)
|
|||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* meta_select_display:
|
|
||||||
*
|
|
||||||
* Selects which display Mutter should use. It first tries to use
|
|
||||||
* @display_name as the display. If @display_name is %NULL then
|
|
||||||
* try to use the environment variable MUTTER_DISPLAY. If that
|
|
||||||
* also is %NULL, use the default - :0.0
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
meta_select_display (char *display_arg)
|
|
||||||
{
|
|
||||||
const char *display_name;
|
|
||||||
|
|
||||||
if (display_arg)
|
|
||||||
display_name = (const char *) display_arg;
|
|
||||||
else
|
|
||||||
display_name = g_getenv ("MUTTER_DISPLAY");
|
|
||||||
|
|
||||||
if (display_name)
|
|
||||||
g_setenv ("DISPLAY", display_name, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_finalize (void)
|
meta_finalize (void)
|
||||||
{
|
{
|
||||||
@ -653,6 +631,19 @@ calculate_compositor_configuration (MetaCompositorType *compositor_type,
|
|||||||
else
|
else
|
||||||
#endif /* HAVE_WAYLAND */
|
#endif /* HAVE_WAYLAND */
|
||||||
{
|
{
|
||||||
|
static const char *display_name_prop_names[] = {
|
||||||
|
"display-name",
|
||||||
|
};
|
||||||
|
static GValue display_name_prop_values[] = {
|
||||||
|
G_VALUE_INIT,
|
||||||
|
};
|
||||||
|
|
||||||
|
g_value_init (&display_name_prop_values[0], G_TYPE_STRING);
|
||||||
|
g_value_set_string (&display_name_prop_values[0], opt_display_name);
|
||||||
|
|
||||||
|
*n_properties = G_N_ELEMENTS (display_name_prop_values);
|
||||||
|
*prop_names = display_name_prop_names;
|
||||||
|
*prop_values = display_name_prop_values;
|
||||||
*backend_gtype = META_TYPE_BACKEND_X11_CM;
|
*backend_gtype = META_TYPE_BACKEND_X11_CM;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -793,11 +784,6 @@ meta_init (void)
|
|||||||
g_irepository_prepend_search_path (MUTTER_PKGLIBDIR);
|
g_irepository_prepend_search_path (MUTTER_PKGLIBDIR);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* NB: When running as a hybrid wayland compositor we run our own headless X
|
|
||||||
* server so the user can't control the X display to connect too. */
|
|
||||||
if (!meta_is_wayland_compositor ())
|
|
||||||
meta_select_display (opt_display_name);
|
|
||||||
|
|
||||||
meta_init_backend (backend_gtype, n_properties, prop_names, prop_values);
|
meta_init_backend (backend_gtype, n_properties, prop_names, prop_values);
|
||||||
|
|
||||||
for (i = 0; i < n_properties; i++)
|
for (i = 0; i < n_properties; i++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user