From 136c0037cc35b4a3e7678e53a0f788a32a7d7a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 27 Mar 2025 23:55:06 +0100 Subject: [PATCH] seat-impl: Split initialization in two steps First instantiate the object, and set the instance pointer in MetaSeatNative, then initialize it. This is needed due to initializing libinput may create virtual input devices used for accessibility features, such as mouse keys, and for this it needs to fetch the MetaSeatImpl from MetaSeatNative. Fixes: 5fc60eac ("seat-impl: Keep track of virtual input devices too") Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3708 Part-of: --- src/backends/native/meta-seat-impl.c | 17 +++++++++++------ src/backends/native/meta-seat-impl.h | 2 ++ src/backends/native/meta-seat-native.c | 1 + 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/backends/native/meta-seat-impl.c b/src/backends/native/meta-seat-impl.c index e430bf790..61548d2f3 100644 --- a/src/backends/native/meta-seat-impl.c +++ b/src/backends/native/meta-seat-impl.c @@ -3985,12 +3985,17 @@ meta_seat_impl_new (MetaSeatNative *seat_native, const char *seat_id, MetaSeatNativeFlag flags) { - return g_initable_new (META_TYPE_SEAT_IMPL, - NULL, NULL, - "seat", seat_native, - "seat-id", seat_id, - "flags", flags, - NULL); + return g_object_new (META_TYPE_SEAT_IMPL, + "seat", seat_native, + "seat-id", seat_id, + "flags", flags, + NULL); +} + +void +meta_seat_impl_setup (MetaSeatImpl *seat_impl) +{ + g_initable_init (G_INITABLE (seat_impl), NULL, NULL); } static gboolean diff --git a/src/backends/native/meta-seat-impl.h b/src/backends/native/meta-seat-impl.h index dced4d1b5..56eb5d228 100644 --- a/src/backends/native/meta-seat-impl.h +++ b/src/backends/native/meta-seat-impl.h @@ -127,6 +127,8 @@ MetaSeatImpl * meta_seat_impl_new (MetaSeatNative *seat_native, const char *seat_id, MetaSeatNativeFlag flags); +void meta_seat_impl_setup (MetaSeatImpl *seat_impl); + void meta_seat_impl_start (MetaSeatImpl *seat_impl); void meta_seat_impl_destroy (MetaSeatImpl *seat_impl); diff --git a/src/backends/native/meta-seat-native.c b/src/backends/native/meta-seat-native.c index ed3842bcf..2b907b699 100644 --- a/src/backends/native/meta-seat-native.c +++ b/src/backends/native/meta-seat-native.c @@ -143,6 +143,7 @@ meta_seat_native_constructed (GObject *object) MetaSeatNative *seat = META_SEAT_NATIVE (object); seat->impl = meta_seat_impl_new (seat, seat->seat_id, seat->flags); + meta_seat_impl_setup (seat->impl); g_signal_connect (seat->impl, "kbd-a11y-flags-changed", G_CALLBACK (proxy_kbd_a11y_flags_changed), seat); g_signal_connect (seat->impl, "kbd-a11y-mods-state-changed",