]> diplodocus.org Git - xorg-xinput/commitdiff
Add set-atom-prop to set properties containing other properties.
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 15 Jan 2009 23:53:01 +0000 (09:53 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 15 Jan 2009 23:56:31 +0000 (09:56 +1000)
src/property.c
src/xinput.c
src/xinput.h

index a046a373e9dcd2f14ddb2a8c670366be71e3d0f1..062ede96470cc1cfc019d6a7ffee1d12133768a1 100644 (file)
@@ -404,3 +404,81 @@ int delete_prop(Display *dpy, int argc, char** argv, char* n, char *desc)
     XCloseDevice(dpy, dev);
     return EXIT_SUCCESS;
 }
     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;
+}
+
+
index 6f416191bd68f0f3eb0896d681a2a6b3542bc04a..1207f9d62cdc988786889b332076b5ad86055b8d 100644 (file)
@@ -119,6 +119,10 @@ static entry drivers[] =
       "<device> <property> <val> [<val> ...]",
       set_float_prop
     },
       "<device> <property> <val> [<val> ...]",
       set_float_prop
     },
+    { "set-atom-prop",
+      "<device> <property> <val> [<val> ...]",
+      set_atom_prop
+    },
     { "watch-props",
       "<device>",
       watch_props
     { "watch-props",
       "<device>",
       watch_props
index 654ccba055a16c8e9a13969e6ea65817c46e0925..3c364973fe29f42a623576f26359ecf2439595f8 100644 (file)
@@ -256,6 +256,16 @@ set_float_prop(
 #endif
 );
 
 #endif
 );
 
+int
+set_atom_prop(
+#if NeedFunctionPrototypes
+                Display*       display,
+                int            argc,
+                char           *argv[],
+                char           *prog_name,
+                char           *prog_desc
+#endif
+);
 
 int
 watch_props(
 
 int
 watch_props(