int main(int, char **) { // need XGenericEventCookie for XInput2 to work Display *dpy = 0; XEvent xevent; if (XGetEventData(dpy, &xevent.xcookie)) { XFreeEventData(dpy, &xevent.xcookie); } XIEvent *xievent; xievent = 0; XIDeviceEvent *xideviceevent; xideviceevent = 0; XIHierarchyEvent *xihierarchyevent; xihierarchyevent = 0; int deviceid = 0; int len = 0; Atom *atoms = XIListProperties(dpy, deviceid, &len); if (atoms) XFree(atoms); return 0; }
XlibTouchpad* XlibBackend::findTouchpad() { int nDevices = 0; QScopedPointer<XDeviceInfo, DeviceListDeleter> deviceInfo(XListInputDevices(m_display.data(), &nDevices)); for (XDeviceInfo *info = deviceInfo.data(); info < deviceInfo.data() + nDevices; info++) { // Make sure device is touchpad if (info->type != m_touchpadAtom.atom()) { continue; } int nProperties = 0; QSharedPointer<Atom> properties( XIListProperties(m_display.data(), info->id, &nProperties), XDeleter); Atom *atom = properties.data(), *atomEnd = properties.data() + nProperties; for (; atom != atomEnd; atom++) { if (*atom == m_libinputIdentifierAtom.atom()) { return new LibinputTouchpad(m_display.data(), info->id); } else if (*atom == m_synapticsIdentifierAtom.atom()) { return new SynapticsTouchpad(m_display.data(), info->id); } } } return nullptr; }
static int list_props_xi2(Display *dpy, int argc, char** argv, char* name, char *desc) { XIDeviceInfo *info; int i; int nprops; Atom *props; if (argc == 0) { fprintf(stderr, "Usage: xinput %s %s\n", name, desc); return EXIT_FAILURE; } for (i = 0; i < argc; i++) { info = xi2_find_device_info(dpy, argv[i]); if (!info) { fprintf(stderr, "unable to find device %s\n", argv[i]); continue; } props = XIListProperties(dpy, info->deviceid, &nprops); if (!nprops) { printf("Device '%s' does not report any properties.\n", info->name); continue; } printf("Device '%s':\n", info->name); while(nprops--) { print_property_xi2(dpy, info->deviceid, props[nprops]); } XFree(props); } return EXIT_SUCCESS; }