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

Reply via email to