]> diplodocus.org Git - xorg-xinput/blobdiff - src/xinput.c
xinput 1.4.0
[xorg-xinput] / src / xinput.c
index 0fe88789c816b39e84ee40ecb7740c6aa79b9844..1207f9d62cdc988786889b332076b5ad86055b8d 100644 (file)
@@ -5,15 +5,15 @@
  * documentation for any purpose is  hereby granted without fee, provided that
  * the  above copyright   notice appear  in   all  copies and  that both  that
  * copyright  notice   and   this  permission   notice  appear  in  supporting
- * documentation, and that   the  name of  Frederic   Lepied not  be  used  in
+ * documentation, and that   the  name of  the authors  not  be  used  in
  * advertising or publicity pertaining to distribution of the software without
- * specific,  written      prior  permission.     Frederic  Lepied   makes  no
+ * specific,  written      prior  permission.     The authors  make  no
  * representations about the suitability of this software for any purpose.  It
  * is provided "as is" without express or implied warranty.
  *
- * FREDERIC  LEPIED DISCLAIMS ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
+ * THE AUTHORS DISCLAIM ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
  * INCLUDING ALL IMPLIED   WARRANTIES OF MERCHANTABILITY  AND   FITNESS, IN NO
- * EVENT  SHALL FREDERIC  LEPIED BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
+ * EVENT  SHALL THE AUTHORS  BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  * DATA  OR PROFITS, WHETHER  IN  AN ACTION OF  CONTRACT,  NEGLIGENCE OR OTHER
  * TORTIOUS  ACTION, ARISING    OUT OF OR   IN  CONNECTION  WITH THE USE    OR
@@ -53,6 +53,10 @@ static entry drivers[] =
      "<device name> <feedback id> <value>",
      set_integer_feedback
     },
+    {"get-button-map",
+     "<device name>",
+     get_button_map
+    },
     {"set-button-map",
      "<device name> <map button 1> [<map button 2> [...]]",
      set_button_map
@@ -81,6 +85,7 @@ static entry drivers[] =
      "",
      version
     },
+#if HAVE_XI2
     { "create-master",
       "<id> [sendCore (dflt:1)] [enable (dflt:1)]",
       create_master
@@ -101,6 +106,31 @@ static entry drivers[] =
       "<window> <device>",
       set_clientpointer
     },
+#endif
+    { "list-props",
+      "<device> [<device> ...]",
+      list_props
+    },
+    { "set-int-prop",
+      "<device> <property> <format (8, 16, 32)> <val> [<val> ...]",
+      set_int_prop
+    },
+    { "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
+    },
+    { "delete-prop",
+      "<device> <property>",
+      delete_prop
+    },
     {0, 0, 0
     }
 };
@@ -111,7 +141,11 @@ is_xinput_present(Display  *display)
     XExtensionVersion  *version;
     Bool               present;
 
+#if HAVE_XI2
+    version = XQueryInputVersion(display, XI_2_Major, XI_2_Minor);
+#else
     version = XGetExtensionVersion(display, INAME);
+#endif
 
     if (version && (version != (XExtensionVersion*) NoSuchExtension)) {
        present = version->present;
@@ -128,6 +162,7 @@ find_device_info(Display    *display,
                 Bool           only_extended)
 {
     XDeviceInfo        *devices;
+    XDeviceInfo *found = NULL;
     int                loop;
     int                num_devices;
     int                len = strlen(name);
@@ -151,14 +186,21 @@ find_device_info(Display  *display,
        if ((!only_extended || (devices[loop].use >= IsXExtensionDevice)) &&
            ((!is_id && strcmp(devices[loop].name, name) == 0) ||
             (is_id && devices[loop].id == id))) {
-           return &devices[loop];
+           if (found) {
+               fprintf(stderr,
+                       "Warning: There are multiple devices named \"%s\".\n"
+                       "To ensure the correct one is selected, please use "
+                       "the device ID instead.\n\n", name);
+           } else {
+               found = &devices[loop];
+           }
        }
     }
-    return NULL;
+    return found;
 }
 
 static void
-usage()
+usage(void)
 {
     entry      *pdriver = drivers;
 
@@ -202,7 +244,7 @@ main(int argc, char * argv[])
        if (strcmp(driver->func_name, func) == 0) {
            int r = (*driver->func)(display, argc-2, argv+2,
                                    driver->func_name, driver->arg_desc);
-           XFlush(display);
+           XSync(display, False);
            return r;
        }
        driver++;