X-Git-Url: https://diplodocus.org/git/xorg-xinput/blobdiff_plain/a6feac1e18cdeffc42bc992faa8c95eaec420378..86cab0389d9a02901c82e2072e4043a404fb2ebc:/src/hierarchy.c diff --git a/src/hierarchy.c b/src/hierarchy.c index f530192..869c3fd 100644 --- a/src/hierarchy.c +++ b/src/hierarchy.c @@ -41,7 +41,6 @@ int create_master(Display* dpy, int argc, char** argv, char* name, char *desc) { XCreateMasterInfo c; - XCreateMasterInfo* pc = &c; if (argc == 0) { @@ -54,7 +53,7 @@ create_master(Display* dpy, int argc, char** argv, char* name, char *desc) c.sendCore = (argc >= 2) ? atoi(argv[1]) : 1; c.enable = (argc >= 3) ? atoi(argv[2]) : 1; - return XChangeDeviceHierarchy(dpy, 1, (XAnyHierarchyChangeInfo**)&pc); + return XChangeDeviceHierarchy(dpy, (XAnyHierarchyChangeInfo*)&c, 1); } /** @@ -65,8 +64,8 @@ create_master(Display* dpy, int argc, char** argv, char* name, char *desc) int remove_master(Display* dpy, int argc, char** argv, char *name, char *desc) { + XDeviceInfo *info; XRemoveMasterInfo r; - XRemoveMasterInfo* pr = &r; XDevice* master = NULL, *ptr = NULL, *keybd = NULL; int ret; @@ -76,9 +75,16 @@ remove_master(Display* dpy, int argc, char** argv, char *name, char *desc) return EXIT_FAILURE; } - master = XOpenDevice(dpy, atoi(argv[0])); + info = find_device_info(dpy, argv[0], False); + + if (!info) { + fprintf(stderr, "unable to find device %s\n", argv[0]); + return EXIT_FAILURE; + } + + master = XOpenDevice(dpy, info->id); if (!master) - Error(BadValue, "Invalid master device.\n"); + Error(BadValue, "Unable to open device %s.\n", argv[0]); r.type = CH_RemoveMasterDevice; r.device = master; @@ -103,7 +109,7 @@ remove_master(Display* dpy, int argc, char** argv, char *name, char *desc) r.returnKeyboard = keybd; } - ret = XChangeDeviceHierarchy(dpy, 1, (XAnyHierarchyChangeInfo**)&pr); + ret = XChangeDeviceHierarchy(dpy, (XAnyHierarchyChangeInfo*)&r, 1); if (ptr) XCloseDevice(dpy, ptr); if (keybd) @@ -117,8 +123,8 @@ remove_master(Display* dpy, int argc, char** argv, char *name, char *desc) int change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc) { + XDeviceInfo *info_sd, *info_md; XChangeAttachmentInfo c; - XChangeAttachmentInfo* pc = &c; XDevice *slave, *master; int ret; @@ -128,8 +134,21 @@ change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc) return EXIT_FAILURE; } - slave = XOpenDevice(dpy, atoi(argv[0])); - master = XOpenDevice(dpy, atoi(argv[1])); + info_sd = find_device_info(dpy, argv[0], True); + info_md = find_device_info(dpy, argv[1], False); + + if (!info_sd) { + fprintf(stderr, "unable to find device %s\n", argv[0]); + return EXIT_FAILURE; + } + + if (!info_md) { + fprintf(stderr, "unable to find device %s\n", argv[1]); + return EXIT_FAILURE; + } + + slave = XOpenDevice(dpy, info_sd->id); + master = XOpenDevice(dpy, info_md->id); if (!slave) Error(BadValue, "Invalid slave device given %d\n", atoi(argv[0])); @@ -142,7 +161,7 @@ change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc) c.device = slave; c.newMaster = master; - ret = XChangeDeviceHierarchy(dpy, 1, (XAnyHierarchyChangeInfo**)&pc); + ret = XChangeDeviceHierarchy(dpy, (XAnyHierarchyChangeInfo*)&c, 1); XCloseDevice(dpy, slave); XCloseDevice(dpy, master); return ret; @@ -154,8 +173,8 @@ change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc) int float_device(Display* dpy, int argc, char** argv, char* name, char* desc) { + XDeviceInfo *info; XChangeAttachmentInfo c; - XChangeAttachmentInfo* pc = &c; XDevice *slave; int ret; @@ -165,8 +184,14 @@ float_device(Display* dpy, int argc, char** argv, char* name, char* desc) return EXIT_FAILURE; } + info = find_device_info(dpy, argv[0], True); + + if (!info) { + fprintf(stderr, "unable to find device %s\n", argv[0]); + return EXIT_FAILURE; + } - slave = XOpenDevice(dpy, atoi(argv[0])); + slave = XOpenDevice(dpy, info->id); if (!slave) return BadValue; @@ -175,7 +200,7 @@ float_device(Display* dpy, int argc, char** argv, char* name, char* desc) c.changeMode = Floating; c.device = slave; - ret = XChangeDeviceHierarchy(dpy, 1, (XAnyHierarchyChangeInfo**)&pc); + ret = XChangeDeviceHierarchy(dpy, (XAnyHierarchyChangeInfo*)&c, 1); XCloseDevice(dpy, slave); return ret; }