[gtk/wip/carlosg/last-device-refcount] gdk: Keep a reference on the last source device
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/carlosg/last-device-refcount] gdk: Keep a reference on the last source device
- Date: Mon, 31 Aug 2020 14:11:51 +0000 (UTC)
commit a98001978c8cdbb4cbd70e3d02a16f29092e6896
Author: Carlos Garnacho <carlosg gnome org>
Date: Mon Aug 31 15:41:07 2020 +0200
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;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]