]> diplodocus.org Git - xorg-xinput/commitdiff
Use find_device_info instead of requireing device ids on the cmdline.
authorPeter Hutterer <peter@cs.unisa.edu.au>
Tue, 27 May 2008 00:46:08 +0000 (10:16 +0930)
committerPeter Hutterer <peter@cs.unisa.edu.au>
Tue, 27 May 2008 00:46:08 +0000 (10:16 +0930)
src/hierarchy.c
src/setcp.c

index 7eab564cf67e49af6c3b2966bc834d5c64d53875..869c3fd8e41ea39781877aebff43d701716c1c2c 100644 (file)
@@ -64,6 +64,7 @@ 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;
     XDevice* master = NULL, *ptr = NULL, *keybd = NULL;
     int ret;
@@ -74,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;
@@ -115,6 +123,7 @@ 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;
     XDevice *slave, *master;
     int ret;
@@ -125,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]));
@@ -151,6 +173,7 @@ 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;
     XDevice *slave;
     int ret;
@@ -161,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;
index 582d978c001f5d53ae17723fbbf597aa8ff164c1..e44bb00fabeb1d13bfbc253ec1e4ce72e100d932 100644 (file)
@@ -32,8 +32,8 @@
 int
 set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc)
 {
+    XDeviceInfo* info;
     XID window;
-    XID deviceid;
     XDevice* dev = NULL;
     char* id;
     char* dummy;
@@ -49,13 +49,19 @@ set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc)
     while(*id == '0') id++;
 
     window = strtol(argv[0], &dummy, (*id == 'x') ? 16 : 10);
-    deviceid = atol(argv[1]);
 
-    dev = XOpenDevice(dpy, deviceid);
+    info = find_device_info(dpy, argv[1], False);
+
+    if (!info) {
+       fprintf(stderr, "unable to find device %s\n", argv[1]);
+       return EXIT_FAILURE;
+    }
+
+    dev = XOpenDevice(dpy, info->id);
 
     if (!dev)
     {
-        fprintf(stderr, "Cannot open device %ld.\n", deviceid);
+        fprintf(stderr, "Cannot open device %s.\n", argv[1]);
     } else
         XSetClientPointer(dpy, window, dev);
     return 0;