]> Pileus Git - ~andy/gtk/commitdiff
Keep track of axis values
authorThomas Jaeger <ThJaeger@gmail.com>
Tue, 29 Sep 2009 15:57:50 +0000 (11:57 -0400)
committerAlexander Larsson <alexl@redhat.com>
Wed, 30 Sep 2009 07:21:10 +0000 (09:21 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=588649

gdk/x11/gdkinput-x11.c
gdk/x11/gdkinput.c
gdk/x11/gdkinputprivate.h

index 37841b11830c89ac56ece029fd397a0f9262674c..d580fdb38ddd2036a2d558cabe5fdcd2e14e8c8b 100644 (file)
@@ -44,6 +44,10 @@ static void              gdk_input_translate_coordinates (GdkDevicePrivate *gdkd
                                                          gdouble          *axis_out,
                                                          gdouble          *x_out,
                                                          gdouble          *y_out);
+static void              gdk_input_update_axes           (GdkDevicePrivate *gdkdev,
+                                                         gint             axes_count,
+                                                         gint             first_axis,
+                                                         gint             *axis_data);
 static guint             gdk_input_translate_state       (guint             state,
                                                          guint             device_state);
 
@@ -175,6 +179,7 @@ gdk_input_device_new (GdkDisplay  *display,
          XValuatorInfo *xvi = (XValuatorInfo *)class;
          gdkdev->info.num_axes = xvi->num_axes;
          gdkdev->axes = g_new (GdkAxisInfo, xvi->num_axes);
+         gdkdev->axis_data = g_new0 (gint, xvi->num_axes);
          gdkdev->info.axes = g_new0 (GdkDeviceAxis, xvi->num_axes);
          for (j=0;j<xvi->num_axes;j++)
            {
@@ -376,6 +381,19 @@ _gdk_input_common_init (GdkDisplay *display,
   return TRUE;
 }
 
+static void
+gdk_input_update_axes (GdkDevicePrivate *gdkdev,
+                      gint             axes_count,
+                      gint             first_axis,
+                      gint             *axis_data)
+{
+  int i;
+  g_return_if_fail (first_axis >= 0 && first_axis + axes_count <= gdkdev->info.num_axes);
+
+  for (i = 0; i < axes_count; i++)
+    gdkdev->axis_data[first_axis + i] = axis_data[i];
+}
+
 static void
 gdk_input_translate_coordinates (GdkDevicePrivate *gdkdev,
                                 GdkWindow        *window,
@@ -545,7 +563,9 @@ _gdk_input_common_other_event (GdkEvent         *event,
       event->button.time = xdbe->time;
 
       event->button.axes = g_new (gdouble, gdkdev->info.num_axes);
-      gdk_input_translate_coordinates (gdkdev, window, xdbe->axis_data,
+      gdk_input_update_axes (gdkdev, xdbe->axes_count, xdbe->first_axis,
+                            xdbe->axis_data);
+      gdk_input_translate_coordinates (gdkdev, window, gdkdev->axis_data,
                                       event->button.axes,
                                       &event->button.x, &event->button.y);
       event->button.x_root = event->button.x + priv->abs_x + input_window->root_x;
@@ -647,7 +667,8 @@ _gdk_input_common_other_event (GdkEvent         *event,
       event->motion.device = &gdkdev->info;
 
       event->motion.axes = g_new (gdouble, gdkdev->info.num_axes);
-      gdk_input_translate_coordinates(gdkdev,window,xdme->axis_data,
+      gdk_input_update_axes (gdkdev, xdme->axes_count, xdme->first_axis, xdme->axis_data);
+      gdk_input_translate_coordinates(gdkdev, window, gdkdev->axis_data,
                                      event->motion.axes,
                                      &event->motion.x,&event->motion.y);
       event->motion.x_root = event->motion.x + priv->abs_x + input_window->root_x;
index 6c3cdbb0ea55c4a8041be9c00bacebc16eaf20d6..25f93dc28d995b231797008865178905e6dcf7db 100644 (file)
@@ -120,7 +120,9 @@ gdk_device_dispose (GObject *object)
          gdkdev->xdevice = NULL;
        }
       g_free (gdkdev->axes);
+      g_free (gdkdev->axis_data);
       gdkdev->axes = NULL;
+      gdkdev->axis_data = NULL;
 #endif /* !XINPUT_NONE */
 
       g_free (gdkdev->info.name);
index 51233c77b59ec2d7141e7cb0b3a12173ff0d774d..f67c8a78e0f3ee6426041e481bcd9d76997f3dfa 100644 (file)
@@ -73,6 +73,7 @@ struct _GdkDevicePrivate
 #ifndef XINPUT_NONE
   /* information about the axes */
   GdkAxisInfo *axes;
+  gint *axis_data;
 
   /* Information about XInput device */
   XDevice       *xdevice;