]> Pileus Git - ~andy/gtk/commitdiff
gdk: Get the right filter window for XI2 events
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 18 May 2011 19:32:22 +0000 (21:32 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 18 May 2011 20:34:33 +0000 (22:34 +0200)
GdkDeviceManagerXI2 now implements GdkEventTranslator::get_window,
retrieving the right window from the contained XIEvent.

gdk/x11/gdkdevicemanager-xi2.c

index f8d5e7042445a97259c417020cc10ccac608a6b5..64d0f59e7f45238569a3861aed7dd4cf14eaa262 100644 (file)
@@ -91,7 +91,8 @@ static GdkEventMask gdk_x11_device_manager_xi2_get_handled_events   (GdkEventTra
 static void         gdk_x11_device_manager_xi2_select_window_events (GdkEventTranslator *translator,
                                                                      Window              window,
                                                                      GdkEventMask        event_mask);
-
+static GdkWindow *  gdk_x11_device_manager_xi2_get_window           (GdkEventTranslator *translator,
+                                                                     XEvent             *xevent);
 
 enum {
   PROP_0,
@@ -561,6 +562,7 @@ gdk_x11_device_manager_xi2_event_translator_init (GdkEventTranslatorIface *iface
   iface->translate_event = gdk_x11_device_manager_xi2_translate_event;
   iface->get_handled_events = gdk_x11_device_manager_xi2_get_handled_events;
   iface->select_window_events = gdk_x11_device_manager_xi2_select_window_events;
+  iface->get_window = gdk_x11_device_manager_xi2_get_window;
 }
 
 static void
@@ -1348,6 +1350,24 @@ gdk_x11_device_manager_xi2_select_window_events (GdkEventTranslator *translator,
   g_free (event_mask.mask);
 }
 
+static GdkWindow *
+gdk_x11_device_manager_xi2_get_window (GdkEventTranslator *translator,
+                                       XEvent             *xevent)
+{
+  GdkX11DeviceManagerXI2 *device_manager;
+  XIEvent *ev;
+
+  device_manager = (GdkX11DeviceManagerXI2 *) translator;
+
+  if (xevent->type != GenericEvent ||
+      xevent->xcookie.extension != device_manager->opcode)
+    return NULL;
+
+  ev = (XIEvent *) xevent->xcookie.data;
+
+  return get_event_window (translator, ev);
+}
+
 #else /* XINPUT_2 */
 
 static void