udev: Create udev in MetaBackend

So we can use it for backlight control in both the native and X11
backends.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
This commit is contained in:
Sebastian Wick 2024-09-10 21:27:40 +02:00
parent 387a6e82e5
commit e68728f151
9 changed files with 54 additions and 33 deletions

View File

@ -165,6 +165,11 @@ MetaColorManager * meta_backend_get_color_manager (MetaBackend *backend);
META_EXPORT_TEST
MetaLauncher * meta_backend_get_launcher (MetaBackend *backend);
#ifdef HAVE_LIBGUDEV
META_EXPORT_TEST
MetaUdev * meta_backend_get_udev (MetaBackend *backend);
#endif
MetaCursorRenderer * meta_backend_get_cursor_renderer_for_device (MetaBackend *backend,
ClutterInputDevice *device);
META_EXPORT_TEST

View File

@ -97,3 +97,4 @@ typedef struct _MetaEis MetaEis;
typedef struct _MetaEisClient MetaEisClient;
typedef struct _MetaLauncher MetaLauncher;
typedef struct _MetaUdev MetaUdev;

View File

@ -95,6 +95,10 @@
#include "wayland/meta-wayland.h"
#endif
#ifdef HAVE_LIBGUDEV
#include "backends/meta-udev.h"
#endif
enum
{
PROP_0,
@ -146,6 +150,9 @@ struct _MetaBackendPrivate
MetaRenderer *renderer;
MetaColorManager *color_manager;
MetaLauncher *launcher;
#ifdef HAVE_LIBGUDEV
MetaUdev *udev;
#endif
#ifdef HAVE_EGL
MetaEgl *egl;
#endif
@ -260,6 +267,10 @@ meta_backend_finalize (GObject *object)
g_clear_object (&priv->launcher);
#ifdef HAVE_LIBGUDEV
g_clear_object (&priv->udev);
#endif
if (priv->sleep_signal_id)
{
g_dbus_connection_signal_unsubscribe (priv->system_bus, priv->sleep_signal_id);
@ -636,6 +647,9 @@ meta_backend_real_pause (MetaBackend *backend)
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
meta_renderer_pause (priv->renderer);
#ifdef HAVE_LIBGUDEV
meta_udev_pause (priv->udev);
#endif
}
static void
@ -644,6 +658,9 @@ meta_backend_real_resume (MetaBackend *backend)
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
#ifdef HAVE_LIBGUDEV
meta_udev_resume (priv->udev);
#endif
meta_renderer_resume (priv->renderer);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
}
@ -1312,6 +1329,10 @@ meta_backend_initable_init (GInitable *initable,
if (!meta_backend_create_launcher (backend, &priv->launcher, error))
return FALSE;
#ifdef HAVE_LIBGUDEV
priv->udev = meta_udev_new (backend);
#endif
priv->settings = meta_settings_new (backend);
priv->dnd = meta_dnd_new (backend);
@ -1523,6 +1544,16 @@ meta_backend_get_launcher (MetaBackend *backend)
return priv->launcher;
}
#ifdef HAVE_LIBGUDEV
MetaUdev *
meta_backend_get_udev (MetaBackend *backend)
{
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
return priv->udev;
}
#endif
/**
* meta_backend_get_orientation_manager:
*

View File

@ -84,7 +84,6 @@ typedef struct _MetaBackendNativePrivate
MetaBackend parent;
MetaDevicePool *device_pool;
MetaUdev *udev;
MetaKms *kms;
GHashTable *startup_render_devices;
@ -115,7 +114,6 @@ meta_backend_native_dispose (GObject *object)
g_clear_pointer (&priv->startup_render_devices, g_hash_table_unref);
g_clear_object (&priv->kms);
g_clear_object (&priv->udev);
g_clear_object (&priv->device_pool);
}
@ -643,7 +641,7 @@ init_gpus (MetaBackendNative *native,
MetaBackendNativePrivate *priv =
meta_backend_native_get_instance_private (native);
MetaBackend *backend = META_BACKEND (native);
MetaUdev *udev = meta_backend_native_get_udev (native);
MetaUdev *udev = meta_backend_get_udev (backend);
MetaKms *kms = meta_backend_native_get_kms (native);
g_autoptr (GError) local_error = NULL;
MetaUdevDeviceType device_type = 0;
@ -719,9 +717,10 @@ init_gpus (MetaBackendNative *native,
return FALSE;
}
g_signal_connect_object (priv->udev, "device-added",
G_CALLBACK (on_udev_device_added), native,
0);
g_signal_connect_object (udev, "device-added",
G_CALLBACK (on_udev_device_added),
native,
G_CONNECT_DEFAULT);
return TRUE;
}
@ -803,7 +802,6 @@ meta_backend_native_init_basic (MetaBackend *backend,
g_free, g_object_unref);
priv->device_pool = meta_device_pool_new (native);
priv->udev = meta_udev_new (backend);
kms_flags = META_KMS_FLAG_NONE;
if (meta_backend_is_headless (backend))
@ -913,15 +911,6 @@ meta_backend_native_get_device_pool (MetaBackendNative *backend_native)
return priv->device_pool;
}
MetaUdev *
meta_backend_native_get_udev (MetaBackendNative *backend_native)
{
MetaBackendNativePrivate *priv =
meta_backend_native_get_instance_private (backend_native);
return priv->udev;
}
MetaKms *
meta_backend_native_get_kms (MetaBackendNative *backend_native)
{
@ -959,9 +948,6 @@ meta_backend_native_activate_vt (MetaBackendNative *backend_native,
static void
meta_backend_native_pause (MetaBackend *backend)
{
MetaBackendNative *native = META_BACKEND_NATIVE (backend);
MetaBackendNativePrivate *priv =
meta_backend_native_get_instance_private (native);
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
MetaMonitorManagerNative *monitor_manager_native =
@ -971,7 +957,6 @@ meta_backend_native_pause (MetaBackend *backend)
META_SEAT_NATIVE (clutter_backend_get_default_seat (clutter_backend));
meta_seat_native_release_devices (seat);
meta_udev_pause (priv->udev);
meta_monitor_manager_native_pause (monitor_manager_native);
META_BACKEND_CLASS (meta_backend_native_parent_class)->pause (backend);
@ -996,7 +981,6 @@ meta_backend_native_resume (MetaBackend *backend)
META_BACKEND_CLASS (meta_backend_native_parent_class)->resume (backend);
meta_monitor_manager_native_resume (monitor_manager_native);
meta_udev_resume (priv->udev);
meta_kms_resume (priv->kms);
meta_seat_native_reclaim_devices (seat);

View File

@ -43,9 +43,6 @@ gboolean meta_backend_native_activate_vt (MetaBackendNative *backend_native,
MetaLauncher * meta_backend_native_get_launcher (MetaBackendNative *native);
META_EXPORT_TEST
MetaUdev * meta_backend_native_get_udev (MetaBackendNative *native);
META_EXPORT_TEST
MetaKms * meta_backend_native_get_kms (MetaBackendNative *native);

View File

@ -378,8 +378,7 @@ meta_kms_new (MetaBackend *backend,
MetaKmsFlags flags,
GError **error)
{
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
MetaUdev *udev = meta_backend_native_get_udev (backend_native);
MetaUdev *udev = meta_backend_get_udev (backend);
MetaKms *kms;
const char *thread_type_string;
const char *preferred_scheduling_priority_string;
@ -473,8 +472,7 @@ meta_kms_finalize (GObject *object)
{
MetaKms *kms = META_KMS (object);
MetaBackend *backend = meta_thread_get_backend (META_THREAD (kms));
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
MetaUdev *udev = meta_backend_native_get_udev (backend_native);
MetaUdev *udev = meta_backend_get_udev (backend);
g_list_free_full (kms->devices, g_object_unref);

View File

@ -279,8 +279,6 @@ mutter_sources = [
'backends/meta-stage-private.h',
'backends/meta-stage-view.c',
'backends/meta-stage-view-private.h',
'backends/meta-udev.c',
'backends/meta-udev.h',
'backends/meta-viewport-info.c',
'backends/meta-viewport-info.h',
'backends/meta-virtual-monitor.c',
@ -913,6 +911,13 @@ if have_wayland_eglstream
]
endif
if have_libgudev
mutter_sources += [
'backends/meta-udev.c',
'backends/meta-udev.h',
]
endif
mutter_private_enum_sources = [
'core/window-private.h',
]

View File

@ -72,7 +72,7 @@ static void
meta_test_headless_monitor_connect (void)
{
MetaBackend *backend = meta_context_get_backend (test_context);
MetaUdev *udev = meta_backend_native_get_udev (META_BACKEND_NATIVE (backend));
MetaUdev *udev = meta_backend_get_udev (backend);
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
g_autolist (GObject) udev_devices = NULL;

View File

@ -136,7 +136,7 @@ meta_test_disconnect_connect (void)
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
ClutterActor *stage = meta_backend_get_stage (backend);
MetaUdev *udev = meta_backend_native_get_udev (META_BACKEND_NATIVE (backend));
MetaUdev *udev = meta_backend_get_udev (backend);
g_autolist (GObject) udev_devices = NULL;
GUdevDevice *udev_device;
GList *logical_monitors;
@ -371,7 +371,7 @@ static void
emulate_hotplug (void)
{
MetaBackend *backend = meta_context_get_backend (test_context);
MetaUdev *udev = meta_backend_native_get_udev (META_BACKEND_NATIVE (backend));
MetaUdev *udev = meta_backend_get_udev (backend);
g_autoptr (GError) error = NULL;
g_autolist (GObject) udev_devices = NULL;
GUdevDevice *udev_device;