set_clientpointer
},
{ "test-xi2",
- "<device>",
+ "[--root] <device>",
test_xi2,
},
- { "map-to-crtc",
- "<device> <crtc name>",
- map_to_crtc,
+ { "map-to-output",
+ "<device> <output name>",
+ map_to_output,
},
#endif
{ "list-props",
"<device> [--type=atom|float|int] [--format=8|16|32] <property> <val> [<val> ...]",
set_prop
},
+ {
+ "disable",
+ "<device>",
+ disable,
+ },
+ {
+ "enable",
+ "<device>",
+ enable,
+ },
{NULL, NULL, NULL
}
};
static const char version_id[] = VERSION;
-int
-print_version()
+static int
+print_version(void)
{
XExtensionVersion *version;
Display *display;
/* Announce our supported version so the server treats us correctly. */
if (vers >= XI_2_Major)
{
+ const char *forced_version;
int maj = 2,
min = 0;
-#if HAVE_XI21
+#if HAVE_XI22
+ min = 2;
+#elif HAVE_XI21
min = 1;
#endif
+ forced_version = getenv("XINPUT_XI2_VERSION");
+ if (forced_version) {
+ if (sscanf(forced_version, "%d.%d", &maj, &min) != 2) {
+ fprintf(stderr, "Invalid format of XINPUT_XI2_VERSION "
+ "environment variable. Need major.minor\n");
+ exit(1);
+ }
+ printf("Overriding XI2 version to: %d.%d\n", maj, min);
+ }
+
XIQueryVersion(display, &maj, &min);
}
#endif
(is_id && devices[loop].id == id))) {
if (found) {
fprintf(stderr,
- "Warning: There are multiple devices named \"%s\".\n"
+ "Warning: There are multiple devices named '%s'.\n"
"To ensure the correct one is selected, please use "
"the device ID instead.\n\n", name);
return NULL;
return found;
}
-#ifdef HAVE_XI2
+#if HAVE_XI2
Bool is_pointer(int use)
{
return use == XIMasterPointer || use == XISlavePointer;
}
}
+static Bool
+is_xwayland(Display *dpy)
+{
+ XDeviceInfo *devices;
+ int n;
+ Bool is_xwayland = False;
+
+ devices = XListInputDevices(dpy, &n);
+ while (n-- > 0) {
+ if (strncmp(devices[n].name, "xwayland-", 9) == 0) {
+ is_xwayland = True;
+ break;
+ }
+ }
+
+ XFreeDeviceList(devices);
+
+ return is_xwayland;
+}
+
int
main(int argc, char * argv[])
{
}
if (strcmp("version", func) == 0) {
- return print_version(argv[0]);
+ return print_version();
}
if (strcmp("help", func) == 0) {
if (display == NULL) {
fprintf(stderr, "Unable to connect to X server\n");
- return EXIT_FAILURE;
+ goto out;
}
if (!XQueryExtension(display, "XInputExtension", &xi_opcode, &event, &error)) {
printf("X Input extension not available.\n");
- return EXIT_FAILURE;
+ goto out;
}
if (!xinput_version(display)) {
fprintf(stderr, "%s extension not available\n", INAME);
- return EXIT_FAILURE;
+ goto out;
}
+ if (is_xwayland(display))
+ fprintf(stderr, "WARNING: running xinput against an Xwayland server. See the xinput man page for details.\n");
+
while(driver->func_name) {
if (strcmp(driver->func_name, func) == 0) {
int r = (*driver->func)(display, argc-2, argv+2,
usage();
+out:
+ if (display)
+ XCloseDisplay(display);
return EXIT_FAILURE;
}