diff -ur gtk+-3.22.5.orig/gdk/win32/gdkdevicemanager-win32.c gtk+-3.22.5.windows_multitouch/gdk/win32/gdkdevicemanager-win32.c
--- gtk+-3.22.5.orig/gdk/win32/gdkdevicemanager-win32.c	2016-11-23 16:02:35.000000000 -0800
+++ gtk+-3.22.5.windows_multitouch/gdk/win32/gdkdevicemanager-win32.c	2016-12-28 19:44:39.819131975 -0800
@@ -572,7 +609,7 @@
 
           device = g_object_new (GDK_TYPE_DEVICE_WINTAB,
                                  "name", device_name,
-                                 "type", GDK_DEVICE_TYPE_FLOATING,
+                                 "type", GDK_DEVICE_TYPE_SLAVE,
                                  "input-source", GDK_SOURCE_PEN,
                                  "input-mode", GDK_MODE_SCREEN,
                                  "has-cursor", lc.lcOptions & CXO_SYSTEM,
@@ -583,8 +620,11 @@
 	  device->sends_core = lc.lcOptions & CXO_SYSTEM;
 	  if (device->sends_core)
 	    {
+             GdkSeat *seat = gdk_display_get_default_seat(display);
-	      _gdk_device_set_associated_device (device_manager->system_pointer, GDK_DEVICE (device));
+             _gdk_device_set_associated_device(GDK_DEVICE(device), device_manager->core_pointer);
 	      _gdk_device_add_slave (device_manager->core_pointer, GDK_DEVICE (device));
+             gdk_seat_default_add_slave(GDK_SEAT_DEFAULT(seat), GDK_DEVICE(device));
+
 	    }
 
           g_free (csrname_utf8);
