From a98001978c8cdbb4cbd70e3d02a16f29092e6896 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 31 Aug 2020 15:41:07 +0200 Subject: [PATCH] gdk: Keep a reference on the last source device This device may go away, which means we have a pointer to a possibly stale object. Keep a reference here, and let future events bring this accounting up-to-date when the mouse pointer is next updated via other device. Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/855 --- gdk/gdkdisplay.c | 1 + gdk/gdkwindow.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c index 240c99fa43..748f54860c 100644 --- a/gdk/gdkdisplay.c +++ b/gdk/gdkdisplay.c @@ -278,6 +278,7 @@ free_pointer_info (GdkPointerWindowInfo *info) { if (info->toplevel_under_pointer) g_object_unref (info->toplevel_under_pointer); + g_clear_object (&info->last_slave); g_slice_free (GdkPointerWindowInfo, info); } diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 6ae0f86710..18ebfa5714 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -9931,7 +9931,7 @@ _gdk_windowing_got_event (GdkDisplay *display, if (source_device != pointer_info->last_slave && gdk_device_get_device_type (source_device) == GDK_DEVICE_TYPE_SLAVE) - pointer_info->last_slave = source_device; + g_set_object (&pointer_info->last_slave, source_device); else if (pointer_info->last_slave) source_device = pointer_info->last_slave; }