wayland: Move all GSource handling into gdkeventsource.c

This commit is contained in:
Benjamin Otte
2024-10-24 03:18:49 +02:00
parent 0722ede806
commit 4eba4ad640
3 changed files with 19 additions and 14 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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);