+#ifdef _F_SUPPORT_XTEST_TOUCH_EVENT_
+int
+AllocXTestHWKeyTouchDevice(ClientPtr client, const char *name,
+ DeviceIntPtr *ptr, DeviceIntPtr *keybd,
+ DeviceIntPtr master_ptr, DeviceIntPtr master_keybd)
+{
+ int retval;
+ char *xtestname;
+ char dummy = 1;
+
+ if (asprintf(&xtestname, "%s XTEST", name) == -1)
+ return BadAlloc;
+
+ retval =
+ AllocHWKeyTouchDevicePair(client, xtestname, ptr, keybd, CoreTouchProc,
+ CoreKeyboardProc, FALSE);
+ if (retval == Success) {
+ (*ptr)->xtest_master_id = master_ptr->id;
+ (*keybd)->xtest_master_id = master_keybd->id;
+
+ XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
+ XA_INTEGER, 8, PropModeReplace, 1, &dummy,
+ FALSE);
+ XISetDevicePropertyDeletable(*ptr,
+ XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
+ FALSE);
+ XIRegisterPropertyHandler(*ptr, DeviceSetXTestProperty, NULL, NULL);
+ XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
+ XA_INTEGER, 8, PropModeReplace, 1, &dummy,
+ FALSE);
+ XISetDevicePropertyDeletable(*keybd,
+ XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
+ FALSE);
+ XIRegisterPropertyHandler(*keybd, DeviceSetXTestProperty, NULL, NULL);
+ }
+
+ free(xtestname);
+
+ return retval;
+}
+#endif //_F_SUPPORT_XTEST_TOUCH_EVENT_
+