summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-01-16 09:53:01 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-01-16 09:56:31 +1000
commitaabe69b44c14c443df1dfb25d23e1c180a6a029d (patch)
treeae80ef65f6b53334944b98f6344cb94be7179643
parent9870cb4120961f15d3e372a1ba49b5d32013e819 (diff)
Add set-atom-prop to set properties containing other properties.
-rw-r--r--src/property.c78
-rw-r--r--src/xinput.c4
-rw-r--r--src/xinput.h10
3 files changed, 92 insertions, 0 deletions
diff --git a/src/property.c b/src/property.c
index a046a37..062ede9 100644
--- a/src/property.c
+++ b/src/property.c
@@ -404,3 +404,81 @@ int delete_prop(Display *dpy, int argc, char** argv, char* n, char *desc)
XCloseDevice(dpy, dev);
return EXIT_SUCCESS;
}
+
+int
+set_atom_prop(Display *dpy, int argc, char** argv, char* n, char *desc)
+{
+ XDeviceInfo *info;
+ XDevice *dev;
+ Atom prop;
+ char *name;
+ int i, j;
+ Bool is_atom = True;
+ Atom *data;
+ int nelements = 0;
+
+ if (argc < 3)
+ {
+ fprintf(stderr, "Usage: xinput %s %s\n", n, desc);
+ return EXIT_FAILURE;
+ }
+
+ info = find_device_info(dpy, argv[0], False);
+ if (!info)
+ {
+ fprintf(stderr, "unable to find device %s\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ dev = XOpenDevice(dpy, info->id);
+ if (!dev)
+ {
+ fprintf(stderr, "unable to open device %s\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ name = argv[1];
+
+ for(i = 0; i < strlen(name); i++) {
+ if (!isdigit(name[i])) {
+ is_atom = False;
+ break;
+ }
+ }
+
+ if (!is_atom)
+ prop = XInternAtom(dpy, name, False);
+ else
+ prop = atoi(name);
+
+ nelements = argc - 2;
+ data = calloc(nelements, sizeof(Atom));
+ for (i = 0; i < nelements; i++)
+ {
+ is_atom = True;
+ name = argv[2 + i];
+ for(j = 0; j < strlen(name); j++) {
+ if (!isdigit(name[j])) {
+ is_atom = False;
+ break;
+ }
+ }
+
+ if (!is_atom)
+ data[i] = XInternAtom(dpy, name, False);
+ else
+ {
+ data[i] = atoi(name);
+ XFree(XGetAtomName(dpy, data[i]));
+ }
+ }
+
+ XChangeDeviceProperty(dpy, dev, prop, XA_ATOM, 32, PropModeReplace,
+ (unsigned char*)data, nelements);
+
+ free(data);
+ XCloseDevice(dpy, dev);
+ return EXIT_SUCCESS;
+}
+
+
diff --git a/src/xinput.c b/src/xinput.c
index 6f41619..1207f9d 100644
--- a/src/xinput.c
+++ b/src/xinput.c
@@ -119,6 +119,10 @@ static entry drivers[] =
"<device> <property> <val> [<val> ...]",
set_float_prop
},
+ { "set-atom-prop",
+ "<device> <property> <val> [<val> ...]",
+ set_atom_prop
+ },
{ "watch-props",
"<device>",
watch_props
diff --git a/src/xinput.h b/src/xinput.h
index 654ccba..3c36497 100644
--- a/src/xinput.h
+++ b/src/xinput.h
@@ -256,6 +256,16 @@ set_float_prop(
#endif
);
+int
+set_atom_prop(
+#if NeedFunctionPrototypes
+ Display* display,
+ int argc,
+ char *argv[],
+ char *prog_name,
+ char *prog_desc
+#endif
+);
int
watch_props(