diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c index 27a98730e..76cd5b53b 100644 --- a/src/backends/meta-backend.c +++ b/src/backends/meta-backend.c @@ -761,45 +761,6 @@ upower_vanished (GDBusConnection *connection, g_clear_object (&priv->upower_proxy); } -static void -meta_backend_constructed (GObject *object) -{ - MetaBackend *backend = META_BACKEND (object); - MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); - MetaBackendClass *backend_class = - META_BACKEND_GET_CLASS (backend); - - g_assert (priv->context); - - priv->settings = meta_settings_new (backend); - -#ifdef HAVE_LIBWACOM - priv->wacom_db = libwacom_database_new (); - if (!priv->wacom_db) - { - g_warning ("Could not create database of Wacom devices, " - "expect tablets to misbehave"); - } -#endif - - if (backend_class->is_lid_closed == meta_backend_real_is_lid_closed) - { - priv->upower_watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM, - "org.freedesktop.UPower", - G_BUS_NAME_WATCHER_FLAGS_NONE, - upower_appeared, - upower_vanished, - backend, - NULL); - } - -#ifdef HAVE_EGL - priv->egl = g_object_new (META_TYPE_EGL, NULL); -#endif - - G_OBJECT_CLASS (meta_backend_parent_class)->constructed (object); -} - static void meta_backend_set_property (GObject *object, guint prop_id, @@ -849,7 +810,6 @@ meta_backend_class_init (MetaBackendClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = meta_backend_dispose; - object_class->constructed = meta_backend_constructed; object_class->set_property = meta_backend_set_property; object_class->get_property = meta_backend_get_property; @@ -1181,6 +1141,35 @@ meta_backend_initable_init (GInitable *initable, priv->in_init = TRUE; + g_assert (priv->context); + + priv->settings = meta_settings_new (backend); + +#ifdef HAVE_LIBWACOM + priv->wacom_db = libwacom_database_new (); + if (!priv->wacom_db) + { + g_warning ("Could not create database of Wacom devices, " + "expect tablets to misbehave"); + } +#endif + + if (META_BACKEND_GET_CLASS (backend)->is_lid_closed == + meta_backend_real_is_lid_closed) + { + priv->upower_watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM, + "org.freedesktop.UPower", + G_BUS_NAME_WATCHER_FLAGS_NONE, + upower_appeared, + upower_vanished, + backend, + NULL); + } + +#ifdef HAVE_EGL + priv->egl = g_object_new (META_TYPE_EGL, NULL); +#endif + if (META_BACKEND_GET_CLASS (backend)->init_basic && !META_BACKEND_GET_CLASS (backend)->init_basic (backend, error)) return FALSE; diff --git a/src/backends/x11/cm/meta-backend-x11-cm.c b/src/backends/x11/cm/meta-backend-x11-cm.c index c9a67fdeb..5b5da8766 100644 --- a/src/backends/x11/cm/meta-backend-x11-cm.c +++ b/src/backends/x11/cm/meta-backend-x11-cm.c @@ -97,6 +97,29 @@ on_device_added (ClutterSeat *seat, apply_keymap (x11); } +static gboolean +meta_backend_x11_cm_init_basic (MetaBackend *backend, + GError **error) +{ + MetaBackendClass *parent_backend_class = + META_BACKEND_CLASS (meta_backend_x11_cm_parent_class); + MetaBackendX11Cm *x11_cm = META_BACKEND_X11_CM (backend); + MetaGpuXrandr *gpu_xrandr; + + if (x11_cm->display_name) + g_setenv ("DISPLAY", x11_cm->display_name, TRUE); + + /* + * The X server deals with multiple GPUs for us, so we just see what the X + * server gives us as one single GPU, even though it may actually be backed + * by multiple. + */ + gpu_xrandr = meta_gpu_xrandr_new (META_BACKEND_X11 (x11_cm)); + meta_backend_add_gpu (backend, META_GPU (gpu_xrandr)); + + return parent_backend_class->init_basic (backend, error); +} + static gboolean meta_backend_x11_cm_init_render (MetaBackend *backend, GError **error) @@ -508,30 +531,9 @@ meta_backend_x11_cm_finalize (GObject *object) G_OBJECT_CLASS (meta_backend_x11_cm_parent_class)->finalize (object); } -static void -meta_backend_x11_cm_constructed (GObject *object) -{ - MetaBackendX11Cm *x11_cm = META_BACKEND_X11_CM (object); - - if (x11_cm->display_name) - g_setenv ("DISPLAY", x11_cm->display_name, TRUE); - - G_OBJECT_CLASS (meta_backend_x11_cm_parent_class)->constructed (object); -} - static void meta_backend_x11_cm_init (MetaBackendX11Cm *backend_x11_cm) { - MetaGpuXrandr *gpu_xrandr; - - /* - * The X server deals with multiple GPUs for us, so we just see what the X - * server gives us as one single GPU, even though it may actually be backed - * by multiple. - */ - gpu_xrandr = meta_gpu_xrandr_new (META_BACKEND_X11 (backend_x11_cm)); - meta_backend_add_gpu (META_BACKEND (backend_x11_cm), - META_GPU (gpu_xrandr)); } static void @@ -543,8 +545,8 @@ meta_backend_x11_cm_class_init (MetaBackendX11CmClass *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->init_basic = meta_backend_x11_cm_init_basic; backend_class->init_render = meta_backend_x11_cm_init_render; backend_class->get_capabilities = meta_backend_x11_cm_get_capabilities; backend_class->create_renderer = meta_backend_x11_cm_create_renderer; diff --git a/src/backends/x11/nested/meta-backend-x11-nested.c b/src/backends/x11/nested/meta-backend-x11-nested.c index 96dc7d34f..0733fb3df 100644 --- a/src/backends/x11/nested/meta-backend-x11-nested.c +++ b/src/backends/x11/nested/meta-backend-x11-nested.c @@ -247,16 +247,20 @@ meta_backend_x11_nested_get_capabilities (MetaBackend *backend) return META_BACKEND_CAPABILITY_NONE; } -static void -meta_backend_x11_nested_constructed (GObject *object) +static gboolean +meta_backend_x11_nested_init_basic (MetaBackend *backend, + GError **error) { - MetaBackendX11Nested *backend_x11_nested = META_BACKEND_X11_NESTED (object); - GObjectClass *parent_class = - G_OBJECT_CLASS (meta_backend_x11_nested_parent_class); + MetaBackendX11Nested *backend_x11_nested = META_BACKEND_X11_NESTED (backend); + MetaBackendClass *parent_backend_class = + META_BACKEND_CLASS (meta_backend_x11_nested_parent_class); - parent_class->constructed (object); + if (!parent_backend_class->init_basic (backend, error)) + return FALSE; init_gpus (backend_x11_nested); + + return TRUE; } static void @@ -284,9 +288,9 @@ meta_backend_x11_nested_class_init (MetaBackendX11NestedClass *klass) MetaBackendClass *backend_class = META_BACKEND_CLASS (klass); MetaBackendX11Class *backend_x11_class = META_BACKEND_X11_CLASS (klass); - object_class->constructed = meta_backend_x11_nested_constructed; object_class->dispose = meta_backend_x11_nested_dispose; + backend_class->init_basic = meta_backend_x11_nested_init_basic; backend_class->get_capabilities = meta_backend_x11_nested_get_capabilities; backend_class->create_renderer = meta_backend_x11_nested_create_renderer; backend_class->create_monitor_manager = meta_backend_x11_nested_create_monitor_manager;