This way we leak the XIDeviceInfo array, but then again it doesn't matter
since we exit after the command anyway.
And with the XIDeviceInfo around, we can actually print the name and
whatnot.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
remove_master(Display* dpy, int argc, char** argv, char *name, char *desc)
{
XIRemoveMasterInfo r;
remove_master(Display* dpy, int argc, char** argv, char *name, char *desc)
{
XIRemoveMasterInfo r;
+ XIDeviceInfo *info;
+ int ret;
- id = xi2_find_device_id(dpy, argv[0]);
+ info = xi2_find_device_info(dpy, argv[0]);
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
r.type = CH_RemoveMasterDevice;
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
r.type = CH_RemoveMasterDevice;
+ r.device = info->deviceid;
if (argc >= 2)
{
if (!strcmp(argv[1], "Floating"))
if (argc >= 2)
{
if (!strcmp(argv[1], "Floating"))
int
change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc)
{
int
change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc)
{
+ XIDeviceInfo *sd_info, *md_info;
XIAttachSlaveInfo c;
int ret;
XIAttachSlaveInfo c;
int ret;
- sd_id = xi2_find_device_id(dpy, argv[0]);
- md_id = xi2_find_device_id(dpy, argv[1]);
+ sd_info = xi2_find_device_info(dpy, argv[0]);
+ md_info= xi2_find_device_info(dpy, argv[1]);
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
fprintf(stderr, "unable to find device %s\n", argv[1]);
return EXIT_FAILURE;
}
c.type = CH_AttachSlave;
fprintf(stderr, "unable to find device %s\n", argv[1]);
return EXIT_FAILURE;
}
c.type = CH_AttachSlave;
- c.device = sd_id;
- c.newMaster = md_id;
+ c.device = sd_info->deviceid;
+ c.newMaster = md_info->deviceid;
ret = XIChangeDeviceHierarchy(dpy, (XIAnyHierarchyChangeInfo*)&c, 1);
return ret;
ret = XIChangeDeviceHierarchy(dpy, (XIAnyHierarchyChangeInfo*)&c, 1);
return ret;
int
float_device(Display* dpy, int argc, char** argv, char* name, char* desc)
{
int
float_device(Display* dpy, int argc, char** argv, char* name, char* desc)
{
XIDetachSlaveInfo c;
int ret;
XIDetachSlaveInfo c;
int ret;
- id = xi2_find_device_id(dpy, argv[0]);
+ info = xi2_find_device_info(dpy, argv[0]);
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
c.type = CH_DetachSlave;
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
c.type = CH_DetachSlave;
+ c.device = info->deviceid;
ret = XIChangeDeviceHierarchy(dpy, (XIAnyHierarchyChangeInfo*)&c, 1);
return ret;
ret = XIChangeDeviceHierarchy(dpy, (XIAnyHierarchyChangeInfo*)&c, 1);
return ret;
int
set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc)
{
int
set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc)
{
XID window;
char* id;
char* dummy;
XID window;
char* id;
char* dummy;
window = strtol(argv[0], &dummy, (*id == 'x') ? 16 : 10);
window = strtol(argv[0], &dummy, (*id == 'x') ? 16 : 10);
- deviceid = xi2_find_device_id(dpy, argv[1]);
+ info = xi2_find_device_info(dpy, argv[1]);
fprintf(stderr, "unable to find device %s\n", argv[1]);
return EXIT_FAILURE;
}
fprintf(stderr, "unable to find device %s\n", argv[1]);
return EXIT_FAILURE;
}
- XISetClientPointer(dpy, window, deviceid);
+ XISetClientPointer(dpy, window, info->deviceid);
-int
-xi2_find_device_id(Display *display, char *name)
+XIDeviceInfo*
+xi2_find_device_info(Display *display, char *name)
{
XIDeviceInfo *info;
int ndevices;
{
XIDeviceInfo *info;
int ndevices;
if (is_id) {
id = atoi(name);
if (is_id) {
id = atoi(name);
+ }
+
+ info = XIQueryDevice(display, AllDevices, &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;
- }
-
- XIFreeDeviceInfo(info);
+
+ XIFreeDeviceInfo(info);
+ return NULL;
XDeviceInfo* find_device_info( Display *display, char *name, Bool only_extended);
XDeviceInfo* find_device_info( Display *display, char *name, Bool only_extended);
-int xi2_find_device_id(Display *display, char *name);
+#if HAVE_XI2
+XIDeviceInfo* xi2_find_device_info(Display *display, char *name);
int xinput_version(Display* display);
int xinput_version(Display* display);
int get_feedbacks( Display* display, int argc, char *argv[], char *prog_name, char *prog_desc);
int set_ptr_feedback( Display* display, int argc, char *argv[], char *prog_name, char *prog_desc);
int get_feedbacks( Display* display, int argc, char *argv[], char *prog_name, char *prog_desc);
int set_ptr_feedback( Display* display, int argc, char *argv[], char *prog_name, char *prog_desc);