Reviewed-by: Ping Cheng <[email protected]> Ping
On Sun, May 23, 2010 at 4:24 PM, Peter Hutterer <[email protected]> wrote: > Custom get_funcs that do not have a property name skip this part and go > straight to the get_func, all others get the property tested. > > Signed-off-by: Peter Hutterer <[email protected]> > --- > > Changes to v1: > - apply to all set/get calls now (at least those that have a property) > > > tools/xsetwacom.c | 66 > ++++++++++++++++++++++++++++++++++++++++------------- > 1 files changed, 50 insertions(+), 16 deletions(-) > > diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c > index 065d925..874f42f 100644 > --- a/tools/xsetwacom.c > +++ b/tools/xsetwacom.c > @@ -968,6 +968,32 @@ static XDevice* find_device(Display *display, char *name) > return dev; > } > > +/* Return True if the given device has the property, or False otherwise */ > +static Bool test_property(Display *dpy, XDevice* dev, Atom prop) > +{ > + int nprops_return; > + Atom *properties; > + int found = False; > + > + /* if no property is required, return success */ > + if (prop == None) > + return True; > + > + properties = XListDeviceProperties(dpy, dev, &nprops_return); > + > + while(nprops_return--) > + { > + if (properties[nprops_return] == prop) > + { > + found = True; > + break; > + } > + } > + > + XFree(properties); > + return found; > +} > + > static void list_one_device(Display *dpy, XDeviceInfo *info) > { > static int wacom_prop = 0; > @@ -1651,7 +1677,7 @@ static void set(Display *dpy, int argc, char **argv) > { > param_t *param; > XDevice *dev = NULL; > - Atom prop, type; > + Atom prop = None, type; > int format; > unsigned char* data = NULL; > unsigned long nitems, bytes_after; > @@ -1686,17 +1712,22 @@ static void set(Display *dpy, int argc, char **argv) > { > printf("'%s' is a read-only option.\n", argv[1]); > goto out; > - } else if (param->set_func) > + } > + > + if (param->prop_name) > { > - param->set_func(dpy, dev, param, argc - 2, &argv[2]); > - goto out; > + prop = XInternAtom(dpy, param->prop_name, True); > + if (!prop || !test_property(dpy, dev, prop)) > + { > + printf("Property '%s' does not exist on device.\n", > + param->prop_name); > + goto out; > + } > } > > - prop = XInternAtom(dpy, param->prop_name, True); > - if (!prop) > + if (param->set_func) > { > - fprintf(stderr, "Property for '%s' not available.\n", > - param->name); > + param->set_func(dpy, dev, param, argc - 2, &argv[2]); > goto out; > } > > @@ -1994,22 +2025,25 @@ static void get(Display *dpy, enum printformat > printformat, int argc, char **arg > > static void get_param(Display *dpy, XDevice *dev, param_t *param, int argc, > char **argv) > { > - Atom prop, type; > + Atom prop = None, type; > int format; > unsigned char* data; > unsigned long nitems, bytes_after; > > - if (param->get_func) > + if (param->prop_name) > { > - param->get_func(dpy, dev, param, argc, argv); > - return; > + prop = XInternAtom(dpy, param->prop_name, True); > + if (!prop || !test_property(dpy, dev, prop)) > + { > + printf("Property '%s' does not exist on device.\n", > + param->prop_name); > + return; > + } > } > > - prop = XInternAtom(dpy, param->prop_name, True); > - if (!prop) > + if (param->get_func) > { > - fprintf(stderr, "Property for '%s' not available.\n", > - param->name); > + param->get_func(dpy, dev, param, argc, argv); > return; > } > > -- > 1.7.0.1 > ------------------------------------------------------------------------------ _______________________________________________ Linuxwacom-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
