[gtk+] Select for DeviceStateNotify



commit 70bd23537f3cf78f4d17118f5249a4ea93d413a0
Author: Thomas Jaeger <ThJaeger gmail com>
Date:   Tue Sep 29 02:20:40 2009 -0400

    Select for DeviceStateNotify
    
    Signed-off-by: Thomas Jaeger <ThJaeger gmail com>
    
    https://bugzilla.gnome.org/show_bug.cgi?id=588649

 gdk/x11/gdkinput-x11.c    |   21 +++++++++++++++++++++
 gdk/x11/gdkinputprivate.h |    2 +-
 2 files changed, 22 insertions(+), 1 deletions(-)
---
diff --git a/gdk/x11/gdkinput-x11.c b/gdk/x11/gdkinput-x11.c
index d580fdb..93ff40a 100644
--- a/gdk/x11/gdkinput-x11.c
+++ b/gdk/x11/gdkinput-x11.c
@@ -278,6 +278,7 @@ _gdk_input_common_find_events (GdkDevicePrivate *gdkdev,
       DeviceMotionNotify (gdkdev->xdevice, gdkdev->motionnotify_type, class);
       if (class != 0)
 	  classes[i++] = class;
+      DeviceStateNotify (gdkdev->xdevice, gdkdev->devicestatenotify_type, class);
       if (class != 0)
 	  classes[i++] = class;
     }
@@ -699,6 +700,26 @@ _gdk_input_common_other_event (GdkEvent         *event,
       return TRUE;
     }
 
+  if (xevent->type == gdkdev->devicestatenotify_type)
+    {
+      int i;
+      XDeviceStateNotifyEvent *xdse = (XDeviceStateNotifyEvent *)(xevent);
+      XInputClass *input_class = (XInputClass *)xdse->data;
+      for (i=0; i<xdse->num_classes; i++)
+	{
+	  if (input_class->class == ValuatorClass)
+	    gdk_input_update_axes (gdkdev, gdkdev->info.num_axes, 0,
+				   ((XValuatorState *)input_class)->valuators);
+	  input_class = (XInputClass *)(((char *)input_class)+input_class->length);
+	}
+
+      GDK_NOTE (EVENTS,
+	g_print ("device state notify:\t\twindow: %ld  device: %ld\n",
+		 xdse->window,
+		 xdse->deviceid));
+
+      return FALSE;
+    }
   if (xevent->type == gdkdev->proximityin_type ||
       xevent->type == gdkdev->proximityout_type)
     {
diff --git a/gdk/x11/gdkinputprivate.h b/gdk/x11/gdkinputprivate.h
index f67c8a7..1b89230 100644
--- a/gdk/x11/gdkinputprivate.h
+++ b/gdk/x11/gdkinputprivate.h
@@ -83,7 +83,7 @@ struct _GdkDevicePrivate
 
   int buttonpress_type, buttonrelease_type, keypress_type,
       keyrelease_type, motionnotify_type, proximityin_type, 
-      proximityout_type, changenotify_type;
+      proximityout_type, changenotify_type, devicestatenotify_type;
 
   /* true if we need to select a different set of events, but
      can't because this is the core pointer */



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