summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
650c52d)
This will allow the addition of command-line options to set format and
type, and the reuse of this code for the set-{atom,float,int}-prop
paths.
Signed-off-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-set_prop_xi1(Display *dpy, int argc, char **argv, char *n, char *desc)
+do_set_prop_xi1(Display *dpy, Atom type, int format, int argc, char **argv, char *n, char *desc)
{
XDeviceInfo *info;
XDevice *dev;
Atom prop;
{
XDeviceInfo *info;
XDevice *dev;
Atom prop;
char *name;
int i;
Atom float_atom;
char *name;
int i;
Atom float_atom;
- int format, nelements = 0;
+ int old_format, nelements = 0;
unsigned long act_nitems, bytes_after;
char *endptr;
union {
unsigned long act_nitems, bytes_after;
char *endptr;
union {
float_atom = XInternAtom(dpy, "FLOAT", False);
nelements = argc - 2;
float_atom = XInternAtom(dpy, "FLOAT", False);
nelements = argc - 2;
- if (XGetDeviceProperty(dpy, dev, prop, 0, 0, False, AnyPropertyType,
- &type, &format, &act_nitems, &bytes_after, &data.c)
- != Success) {
- fprintf(stderr, "failed to get property type and format for %s\n", name);
- return EXIT_FAILURE;
- }
+ if (type == None || format == 0) {
+ if (XGetDeviceProperty(dpy, dev, prop, 0, 0, False, AnyPropertyType,
+ &old_type, &old_format, &act_nitems,
+ &bytes_after, &data.c) != Success) {
+ fprintf(stderr, "failed to get property type and format for %s\n",
+ name);
+ return EXIT_FAILURE;
+ } else {
+ if (type == None)
+ type = old_type;
+ if (format == 0)
+ format = old_format;
+ }
- fprintf(stderr, "property %s doesn't exist\n", name);
+ fprintf(stderr, "property %s doesn't exist, you need to specify "
+ "its type and format\n", name);
-set_prop_xi2(Display *dpy, int argc, char **argv, char *n, char *desc)
+do_set_prop_xi2(Display *dpy, Atom type, int format, int argc, char **argv, char *n, char *desc)
{
XIDeviceInfo *info;
Atom prop;
{
XIDeviceInfo *info;
Atom prop;
char *name;
int i;
Atom float_atom;
char *name;
int i;
Atom float_atom;
- int format, nelements = 0;
+ int old_format, nelements = 0;
unsigned long act_nitems, bytes_after;
char *endptr;
union {
unsigned long act_nitems, bytes_after;
char *endptr;
union {
float_atom = XInternAtom(dpy, "FLOAT", False);
nelements = argc - 2;
float_atom = XInternAtom(dpy, "FLOAT", False);
nelements = argc - 2;
- if (XIGetProperty(dpy, info->deviceid, prop, 0, 0, False, AnyPropertyType,
- &type, &format, &act_nitems, &bytes_after, &data.c)
- != Success) {
- fprintf(stderr, "failed to get property type and format for %s\n", name);
- return EXIT_FAILURE;
- }
+ if (type == None || format == 0) {
+ if (XIGetProperty(dpy, info->deviceid, prop, 0, 0, False,
+ AnyPropertyType, &old_type, &old_format, &act_nitems,
+ &bytes_after, &data.c) != Success) {
+ fprintf(stderr, "failed to get property type and format for %s\n",
+ name);
+ return EXIT_FAILURE;
+ } else {
+ if (type == None)
+ type = old_type;
+ if (format == 0)
+ format = old_format;
+ }
- fprintf(stderr, "property %s doesn't exist\n", name);
+ fprintf(stderr, "property %s doesn't exist, you need to specify "
+ "its type and format\n", name);
-int set_prop(Display *display, int argc, char *argv[], char *name,
- char *desc)
+static int
+do_set_prop(Display *display, Atom type, int format, int argc, char *argv[], char *name, char *desc)
{
#ifdef HAVE_XI2
if (xinput_version(display) == XI_2_Major)
{
#ifdef HAVE_XI2
if (xinput_version(display) == XI_2_Major)
- return set_prop_xi2(display, argc, argv, name, desc);
+ return do_set_prop_xi2(display, type, format, argc, argv, name, desc);
- return set_prop_xi1(display, argc, argv, name, desc);
+ return do_set_prop_xi1(display, type, format, argc, argv, name, desc);
+}
+
+int set_prop(Display *display, int argc, char *argv[], char *name,
+ char *desc)
+{
+ return do_set_prop(display, None, 0, argc, argv, name, desc);