#include <ctype.h>
#include <string.h>
-typedef int (*prog)(
-#if NeedFunctionPrototypes
- Display* display, int argc, char *argv[],
- char *prog_name, char *prog_desc
-#endif
-);
+int xi_opcode;
+
+typedef int (*prog)(Display* display, int argc, char *argv[],
+ char *prog_name, char *prog_desc);
typedef struct
{
},
#if HAVE_XI2
{ "create-master",
- "<id> [sendCore (dflt:1)] [enable (dflt:1)]",
+ "<id> [<sendCore (dflt:1)>] [<enable (dflt:1)>]",
create_master
},
{ "remove-master",
- "<id> [returnMode (dflt:Floating)] [returnPointer] [returnKeyboard]",
+ "<id> [Floating|AttachToMaster (dflt:Floating)] [<returnPointer>] [<returnKeyboard>]",
remove_master
},
{ "reattach",
"<device> <property>",
delete_prop
},
+ { "set-prop",
+ "<device> <property> <val> [<val> ...]",
+ set_prop
+ },
{NULL, NULL, NULL
}
};
"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 NULL;
} else {
found = &devices[loop];
}
}
#ifdef HAVE_XI2
-int
-xi2_find_device_id(Display *display, char *name)
+XIDeviceInfo*
+xi2_find_device_info(Display *display, char *name)
{
XIDeviceInfo *info;
int ndevices;
if (is_id) {
id = atoi(name);
- } else
+ }
+
+ info = XIQueryDevice(display, XIAllDevices, &ndevices);
+ for(i = 0; i < ndevices; i++)
{
- info = XIQueryDevice(display, AllDevices, &ndevices);
- for(i = 0; i < ndevices; i++)
+ if ((is_id && info[i].deviceid == id) ||
+ (!is_id && strcmp(info[i].name, name) == 0))
{
- if ((is_id && info[i].deviceid == id) ||
- (!is_id && strcmp(info[i].name, name) == 0))
- {
- id = info[i].deviceid;
- break;
- }
+ return &info[i];
}
-
- XIFreeDeviceInfo(info);
}
- return id;;
+
+ XIFreeDeviceInfo(info);
+ return NULL;
}
#endif
Display *display;
entry *driver = drivers;
char *func;
+ int event, error;
if (argc < 2) {
usage();
return EXIT_FAILURE;
}
+ if (!XQueryExtension(display, "XInputExtension", &xi_opcode, &event, &error)) {
+ printf("X Input extension not available.\n");
+ return EXIT_FAILURE;
+ }
+
func = argv[1];
while((*func) == '-') func++;
int r = (*driver->func)(display, argc-2, argv+2,
driver->func_name, driver->arg_desc);
XSync(display, False);
+ XCloseDisplay(display);
return r;
}
driver++;