]> Pileus Git - ~andy/gtk/commitdiff
Use the client pointer for events with no device.
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 28 Oct 2010 21:01:16 +0000 (23:01 +0200)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sat, 30 Oct 2010 08:37:02 +0000 (17:37 +0900)
The core pointer is sort of meaningless in a multidevice environment,
the client pointer is used instead to fake a GdkDevice on events that
don't have one.

gdk/gdkevents.c

index 7d7a7dbd02a4de0ad9ad29112cbc72f8ab85ac42..920245d8cd88b3a3db618ae5eace89667f59c7bf 100644 (file)
@@ -1032,20 +1032,22 @@ gdk_event_get_device (const GdkEvent *event)
     case GDK_KEY_RELEASE:
       {
         GdkDisplay *display;
-        GdkDevice *core_pointer;
+        GdkDeviceManager *device_manager;
+        GdkDevice *client_pointer;
 
         g_warning ("Event with type %d not holding a GdkDevice. "
                    "It is most likely synthesized outside Gdk/GTK+\n",
                    event->type);
 
         display = gdk_window_get_display (event->any.window);
-        core_pointer = gdk_display_get_core_pointer (display);
+        device_manager = gdk_display_get_device_manager (display);
+        client_pointer = gdk_device_manager_get_client_pointer (device_manager);
 
         if (event->type == GDK_KEY_PRESS ||
             event->type == GDK_KEY_RELEASE)
-          return gdk_device_get_associated_device (core_pointer);
+          return gdk_device_get_associated_device (client_pointer);
         else
-          return core_pointer;
+          return client_pointer;
       }
       break;
     default: