diff options
author | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2009-11-25 23:00:58 +0000 |
---|---|---|
committer | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2009-11-25 23:00:58 +0000 |
commit | 7b479ae8cca5e5d67d2aa87805dcfc77b10a516c (patch) | |
tree | 76abe9506a4da146e9582907f29989f5d51e4359 /app/xtsscale/xtsscale.c | |
parent | 6eec6d46c06ffd5394e7adc2269a53210e748c4a (diff) |
Better error handling during device selection.
Diffstat (limited to 'app/xtsscale/xtsscale.c')
-rw-r--r-- | app/xtsscale/xtsscale.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/app/xtsscale/xtsscale.c b/app/xtsscale/xtsscale.c index 6d2976083..5424cd803 100644 --- a/app/xtsscale/xtsscale.c +++ b/app/xtsscale/xtsscale.c @@ -1,4 +1,4 @@ -/* $OpenBSD: xtsscale.c,v 1.8 2009/11/25 19:43:05 matthieu Exp $ */ +/* $OpenBSD: xtsscale.c,v 1.9 2009/11/25 23:00:57 matthieu Exp $ */ /* * Copyright (c) 2007 Robert Nagy <robert@openbsd.org> * Copyright (c) 2009 Matthieu Herrb <matthieu@herrb.eu> @@ -244,13 +244,18 @@ find_device_info(char *name) { XDeviceInfo *devices; XDeviceInfo *found = NULL; - int i; + int i, max_id; int num_devices, num_found; Bool is_id = True; XID id = (XID)-1; const char *errstr; devices = XListInputDevices(display, &num_devices); + max_id = 0; + for (i = 0; i < num_devices; i++) + if (devices[i].id > max_id) + max_id = devices[i].id; + if (name != NULL) { for(i = 0; i < strlen(name); i++) { @@ -260,7 +265,7 @@ find_device_info(char *name) } } if (is_id) { - id = strtonum(name, 0, num_devices - 1, &errstr); + id = strtonum(name, 0, max_id, &errstr); if (errstr != NULL) { fprintf(stderr, "Invalid device id %s: %s\n", name, errstr); @@ -297,7 +302,7 @@ find_device_info(char *name) static int register_events(XDeviceInfo *info, XDevice *device, - char *dev_name, Bool handle_proximity) + Bool handle_proximity) { int number = 0; /* number of events registered */ XEventClass event_list[7]; @@ -307,11 +312,6 @@ register_events(XDeviceInfo *info, XDevice *device, screen = DefaultScreen(display); - if (!device) { - fprintf(stderr, "unable to open device %s\n", dev_name); - return 0; - } - if (device->num_classes > 0) { for (ip = device->classes, i=0; i<info->num_classes; ip++, i++) { @@ -434,6 +434,7 @@ int main(int argc, char *argv[], char *env[]) { char *display_name = NULL; + char *device_name = NULL; XSetWindowAttributes xswa; int i = 0; double a, a1, a2, b, b1, b2, xerr, yerr; @@ -452,7 +453,9 @@ main(int argc, char *argv[], char *env[]) fprintf(stderr, "usage: %s [device]\n", argv[0]); return 1; } - + if (argc == 2) + device_name = argv[1]; + /* connect to X server */ if ((display = XOpenDisplay(display_name)) == NULL) { fprintf(stderr, "%s: cannot connect to X server %s\n", @@ -472,9 +475,10 @@ main(int argc, char *argv[], char *env[]) exit(1); } XFree(version); - info = find_device_info(argv[1]); + info = find_device_info(device_name); if (info == NULL) { - fprintf(stderr, "Unable to find device %s\n", argv[1]); + fprintf(stderr, "Unable to find the %s device\n", + device_name ? device_name : "default"); exit(1); } if (info->use != IsXPointer && info->use != IsXExtensionPointer) { @@ -520,7 +524,12 @@ main(int argc, char *argv[], char *env[]) XClearWindow(display, win); device = XOpenDevice(display, info->id); - if (!register_events(info, device, argv[1], 0)) + if (!device) { + fprintf(stderr, "unable to open device %s\n", info->name); + return 0; + } + + if (!register_events(info, device, 0)) exit(1); uncalibrate(device); |