static int windows_wminput_init(void) { RAWINPUTDEVICELIST *devlist = NULL; UINT ct = 0; UINT i; available_mice = 0; if (!find_api_symbols()) /* only supported on WinXP and later. */ return -1; pGetRawInputDeviceList(NULL, &ct, sizeof (RAWINPUTDEVICELIST)); if (ct == 0) /* no devices. */ return 0; devlist = (PRAWINPUTDEVICELIST) alloca(sizeof (RAWINPUTDEVICELIST) * ct); pGetRawInputDeviceList(devlist, &ct, sizeof (RAWINPUTDEVICELIST)); for (i = 0; i < ct; i++) init_mouse(&devlist[i]); if (!init_event_queue()) { cleanup_window(); available_mice = 0; } /* if */ return available_mice; } /* windows_wminput_init */
static int x11_xinput2_init_internal(void) { const char *ext = "XInputExtension"; XIDeviceInfo *device_list = NULL; int device_count = 0; int available = 0; int event = 0; int error = 0; int major = 2; int minor = 0; int i = 0; xinput2_cleanup(); /* just in case... */ if (getenv("MANYMOUSE_NO_XINPUT2") != NULL) return -1; if (!find_api_symbols()) return -1; /* couldn't find all needed symbols. */ display = pXOpenDisplay(NULL); if (display == NULL) return -1; /* no X server at all */ Xext_handler = pXSetExtensionErrorHandler(xext_errhandler); available = (pXQueryExtension(display, ext, &xi2_opcode, &event, &error) && (pXIQueryVersion(display, &major, &minor) != BadRequest)); pXSetExtensionErrorHandler(Xext_handler); Xext_handler = NULL; if (!available) return -1; /* no XInput2 support. */ /* * Register for events first, to prevent a race where we unplug a * device between when we queried for the list and when we start * listening for changes. */ if (!register_for_events(display)) return -1; device_list = pXIQueryDevice(display, XIAllDevices, &device_count); for (i = 0; i < device_count; i++) { MouseStruct *mouse = &mice[available_mice]; if (init_mouse(mouse, &device_list[i])) available_mice++; } /* for */ pXIFreeDeviceInfo(device_list); return available_mice; } /* x11_xinput2_init_internal */
static int x11_xinput_init_internal(void) { int i; xinput_cleanup(); /* just in case... */ if (getenv("MANYMOUSE_NO_XINPUT") != NULL) return(-1); if (!find_api_symbols()) return(-1); /* couldn't find all needed symbols. */ display = pXOpenDisplay(NULL); if (display == NULL) return(-1); /* no X server at all */ /* Stop stderr output in case XInput extension is missing... */ Xext_handler = pXSetExtensionErrorHandler(xext_errhandler); extver = pXGetExtensionVersion(display, INAME); pXSetExtensionErrorHandler(Xext_handler); Xext_handler = NULL; if ((extver == NULL) || (extver == (XExtensionVersion *) NoSuchExtension)) return(-1); /* no such extension */ if (extver->present == XI_Absent) return(-1); /* extension not available. */ device_list = pXListInputDevices(display, &device_count); if (device_list == NULL) return(-1); for (i = 0; i < device_count; i++) { MouseStruct *mouse = &mice[available_mice]; if (init_mouse(mouse, &device_list[i])) available_mice++; } /* for */ return(available_mice); } /* x11_xinput_init_internal */