[gimp/gtk3-port: 199/227] app: gimp_device_info_get_device_coords(): workaround for XI2 b0rk



commit ae379e953a59f6b1b26b83bae550e63506f5e500
Author: Michael Natterer <mitch gimp org>
Date:   Sun Feb 27 16:06:11 2011 +0100

    app: gimp_device_info_get_device_coords(): workaround for XI2 b0rk
    
    for the time being, use gdk_window_get_device_position() instead of
    gdk_device_get_axis() for X and Y, which gets rid of subpixel
    coordinates, but at least returns values != 0. Also, don't ask
    keyboard devices for coordinates.

 app/widgets/gimpdeviceinfo-coords.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)
---
diff --git a/app/widgets/gimpdeviceinfo-coords.c b/app/widgets/gimpdeviceinfo-coords.c
index f423e6a..7aa566a 100644
--- a/app/widgets/gimpdeviceinfo-coords.c
+++ b/app/widgets/gimpdeviceinfo-coords.c
@@ -120,12 +120,26 @@ gimp_device_info_get_device_coords (GimpDeviceInfo *info,
   if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_SLAVE)
     device = gdk_device_get_associated_device (device);
 
+  if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
+    device = gdk_device_get_associated_device (device);
+
   *coords = default_coords;
 
   gdk_device_get_state (device, window, axes, NULL);
 
+#if 0
   gdk_device_get_axis (device, axes, GDK_AXIS_X, &coords->x);
   gdk_device_get_axis (device, axes, GDK_AXIS_Y, &coords->y);
+#else
+  {
+    gint x, y;
+
+    gdk_window_get_device_position (window, device, &x, &y, NULL);
+
+    coords->x = x;
+    coords->y = y;
+  }
+#endif
 
   if (gdk_device_get_axis (device,
                            axes, GDK_AXIS_PRESSURE, &coords->pressure))


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]