backends/native: Move KMS fd management to monitor manager

Move finding, opening and managment of the KMS file descriptor to
MetaMonitorManagerKms. This means that the monitor manager creation can
now fail, both if more than one GPU with connectors is discovered, or
if finding or opening the primary GPU fails.

https://bugzilla.gnome.org/show_bug.cgi?id=785381
This commit is contained in:
Jonas Ådahl
2017-07-06 16:00:56 +08:00
parent 518fb9fb5e
commit 16a6aef5a7
14 changed files with 470 additions and 390 deletions

View File

@ -400,9 +400,10 @@ meta_backend_native_create_idle_monitor (MetaBackend *backend,
}
static MetaMonitorManager *
meta_backend_native_create_monitor_manager (MetaBackend *backend)
meta_backend_native_create_monitor_manager (MetaBackend *backend,
GError **error)
{
return g_object_new (META_TYPE_MONITOR_MANAGER_KMS, NULL);
return g_initable_new (META_TYPE_MONITOR_MANAGER_KMS, NULL, error, NULL);
}
static MetaCursorRenderer *
@ -415,16 +416,13 @@ static MetaRenderer *
meta_backend_native_create_renderer (MetaBackend *backend,
GError **error)
{
MetaBackendNative *native = META_BACKEND_NATIVE (backend);
MetaBackendNativePrivate *priv =
meta_backend_native_get_instance_private (native);
int kms_fd;
const char *kms_file_path;
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
MetaMonitorManagerKms *monitor_manager_kms =
META_MONITOR_MANAGER_KMS (monitor_manager);
MetaRendererNative *renderer_native;
kms_fd = meta_launcher_get_kms_fd (priv->launcher);
kms_file_path = meta_launcher_get_kms_file_path (priv->launcher);
renderer_native = meta_renderer_native_new (kms_fd, kms_file_path, error);
renderer_native = meta_renderer_native_new (monitor_manager_kms, error);
if (!renderer_native)
return NULL;
@ -621,14 +619,23 @@ meta_backend_native_init (MetaBackendNative *native)
native);
}
MetaLauncher *
meta_backend_native_get_launcher (MetaBackendNative *native)
{
MetaBackendNativePrivate *priv =
meta_backend_native_get_instance_private (native);
return priv->launcher;
}
gboolean
meta_activate_vt (int vt, GError **error)
{
MetaBackend *backend = meta_get_backend ();
MetaBackendNative *native = META_BACKEND_NATIVE (backend);
MetaBackendNativePrivate *priv = meta_backend_native_get_instance_private (native);
MetaLauncher *launcher = meta_backend_native_get_launcher (native);
return meta_launcher_activate_vt (priv->launcher, vt, error);
return meta_launcher_activate_vt (launcher, vt, error);
}
MetaBarrierManagerNative *