From 4eba4ad6403357ed58ea6a082258953874ba9ea5 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Thu, 24 Oct 2024 03:18:49 +0200 Subject: [PATCH] wayland: Move all GSource handling into gdkeventsource.c --- gdk/wayland/gdkdisplay-wayland.c | 9 ++------- gdk/wayland/gdkeventsource.c | 21 +++++++++++++++------ gdk/wayland/gdkprivate-wayland.h | 3 ++- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index 48a5f0acb7..bdbbb7b087 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -630,7 +630,7 @@ _gdk_wayland_display_open (const char *display_name) display = g_object_new (GDK_TYPE_WAYLAND_DISPLAY, NULL); display_wayland = GDK_WAYLAND_DISPLAY (display); display_wayland->wl_display = wl_display; - display_wayland->event_source = _gdk_wayland_display_event_source_new (display); + gdk_wayland_display_install_gsource (display_wayland); init_settings (display); @@ -731,12 +731,7 @@ gdk_wayland_display_dispose (GObject *object) g_list_free_full (display_wayland->toplevels, destroy_toplevel); - if (display_wayland->event_source) - { - g_source_destroy (display_wayland->event_source); - g_source_unref (display_wayland->event_source); - display_wayland->event_source = NULL; - } + gdk_wayland_display_uninstall_gsource (display_wayland); g_list_free_full (display_wayland->async_roundtrips, (GDestroyNotify) wl_callback_destroy); diff --git a/gdk/wayland/gdkeventsource.c b/gdk/wayland/gdkeventsource.c index f0fa30e422..84a0fcafb3 100644 --- a/gdk/wayland/gdkeventsource.c +++ b/gdk/wayland/gdkeventsource.c @@ -175,23 +175,23 @@ _gdk_wayland_display_deliver_event (GdkDisplay *display, _gdk_display_get_next_serial (display)); } -GSource * -_gdk_wayland_display_event_source_new (GdkDisplay *display) +void +gdk_wayland_display_install_gsource (GdkWaylandDisplay *display_wayland) { + GdkDisplay *display = GDK_DISPLAY (display_wayland); GSource *source; GdkWaylandEventSource *event_source; - GdkWaylandDisplay *display_wayland; char *name; source = g_source_new (&gdk_wayland_event_source_funcs, sizeof (GdkWaylandEventSource)); + display_wayland->event_source = source; + event_source = (GdkWaylandEventSource *) source; name = g_strdup_printf ("GDK Wayland Event source (%s)", gdk_display_get_name (display)); g_source_set_name (source, name); g_free (name); - event_source = (GdkWaylandEventSource *) source; - display_wayland = GDK_WAYLAND_DISPLAY (display); event_source->display = display; event_source->pfd.fd = wl_display_get_fd (display_wayland->wl_display); event_source->pfd.events = G_IO_IN | G_IO_ERR | G_IO_HUP; @@ -200,8 +200,17 @@ _gdk_wayland_display_event_source_new (GdkDisplay *display) g_source_set_priority (source, GDK_PRIORITY_EVENTS); g_source_set_can_recurse (source, TRUE); g_source_attach (source, NULL); +} - return source; +void +gdk_wayland_display_uninstall_gsource (GdkWaylandDisplay *display_wayland) +{ + if (display_wayland->event_source) + { + g_source_destroy (display_wayland->event_source); + g_source_unref (display_wayland->event_source); + display_wayland->event_source = NULL; + } } void diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h index b2549c67a9..fd44d6c33b 100644 --- a/gdk/wayland/gdkprivate-wayland.h +++ b/gdk/wayland/gdkprivate-wayland.h @@ -183,7 +183,8 @@ void gdk_wayland_device_unset_touch_grab (GdkDevice *device, GdkEventSequence *sequence); void _gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event); -GSource *_gdk_wayland_display_event_source_new (GdkDisplay *display); +void gdk_wayland_display_install_gsource (GdkWaylandDisplay *display_wayland); +void gdk_wayland_display_uninstall_gsource (GdkWaylandDisplay *display_wayland); void _gdk_wayland_display_queue_events (GdkDisplay *display); GdkAppLaunchContext *_gdk_wayland_display_get_app_launch_context (GdkDisplay *display);