gdk: Keep reference on tools from motion/button events.
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 31 Oct 2017 11:21:29 +0000 (12:21 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 14 Dec 2017 00:05:48 +0000 (01:05 +0100)
gdk/gdkevents.c

index afcf94c2329f8b7cfcd8ee5a0b1a44342f6f6e7a..19bf7e6f53f721b3f73b4e535e6f1ba23f418531 100644 (file)
@@ -623,6 +623,8 @@ gdk_event_copy (const GdkEvent *event)
       if (event->button.axes)
         new_event->button.axes = g_memdup (event->button.axes,
                                            sizeof (gdouble) * gdk_device_get_n_axes (event->any.device));
+      if (event->button.tool)
+        g_object_ref (new_event->button.tool);
       break;
 
     case GDK_TOUCH_BEGIN:
@@ -638,6 +640,8 @@ gdk_event_copy (const GdkEvent *event)
       if (event->motion.axes)
         new_event->motion.axes = g_memdup (event->motion.axes,
                                            sizeof (gdouble) * gdk_device_get_n_axes (event->any.device));
+      if (event->motion.tool)
+        g_object_ref (new_event->motion.tool);
       break;
 
     default:
@@ -2085,9 +2089,9 @@ gdk_event_set_device_tool (GdkEvent      *event,
 {
   if (event->any.type == GDK_BUTTON_PRESS ||
       event->any.type == GDK_BUTTON_RELEASE)
-    event->button.tool = tool;
+    g_set_object (&event->button.tool, tool);
   else if (event->any.type == GDK_MOTION_NOTIFY)
-    event->motion.tool = tool;
+    g_set_object (&event->motion.tool, tool);
 }
 
 void