Add an enum for configuration return codes
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 15 May 2014 23:06:41 +0000 (09:06 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 3 Jul 2014 03:48:43 +0000 (13:48 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
src/libinput.c
src/libinput.h
test/misc.c

index 1918b48a2c48aa57a0eae9b60c79db23b958bc66..6ea9e485f9b22a127005c9eb7154cb5876a8a262 100644 (file)
@@ -1255,3 +1255,23 @@ libinput_event_touch_get_base_event(struct libinput_event_touch *event)
 {
        return &event->base;
 }
+
+LIBINPUT_EXPORT const char *
+libinput_config_status_to_str(enum libinput_config_status status)
+{
+       const char *str = NULL;
+
+       switch(status) {
+       case LIBINPUT_CONFIG_STATUS_SUCCESS:
+               str = "Success";
+               break;
+       case LIBINPUT_CONFIG_STATUS_UNSUPPORTED:
+               str = "Unsupported configuration option";
+               break;
+       case LIBINPUT_CONFIG_STATUS_INVALID:
+               str = "Invalid argument range";
+               break;
+       }
+
+       return str;
+}
index 73183da8c3ee42c4f0e09e28eaf7ceac749cceac..ead30646d379dacbffdcbc4efbdadadcb7486be3 100644 (file)
@@ -1402,6 +1402,40 @@ libinput_device_get_size(struct libinput_device *device,
                         double *width,
                         double *height);
 
+
+/**
+ * @defgroup config Device configuration
+ *
+ * Enable, disable, change and/or check for device-specific features. For
+ * all features, libinput assigns a default based on the hardware
+ * configuration. This default can be obtained with the respective
+ * get_default call.
+ *
+ * Some configuration option may be dependent on or mutually exclusive with
+ * with other options. The behavior in those cases is
+ * implementation-defined, the caller must ensure that the options are set
+ * in the right order.
+ */
+
+enum libinput_config_status {
+       LIBINPUT_CONFIG_STATUS_SUCCESS = 0,     /**< Config applied successfully */
+       LIBINPUT_CONFIG_STATUS_UNSUPPORTED,     /**< Configuration not available on
+                                                    this device */
+       LIBINPUT_CONFIG_STATUS_INVALID,         /**< Invalid parameter range */
+};
+
+/**
+ * @ingroup config Device configuration
+ *
+ * Return a string describing the error.
+ *
+ * @param status The status to translate to a string
+ * @return A human-readable string representing the error or NULL for an
+ * invalid status.
+ */
+const char *
+libinput_config_status_to_str(enum libinput_config_status status);
+
 #ifdef __cplusplus
 }
 #endif
index 30b8d452dcffed29b4c96d5ad528a2abc3d9fba8..7e028321d7bff68cdf3e2f21dea69bd22c32f590 100644 (file)
@@ -26,6 +26,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <libinput.h>
+#include <libinput-util.h>
 #include <unistd.h>
 
 #include "litest.h"
@@ -409,6 +410,27 @@ START_TEST(device_ids)
 }
 END_TEST
 
+START_TEST(config_status_string)
+{
+       const char *strs[3];
+       const char *invalid;
+       size_t i, j;
+
+       strs[0] = libinput_config_status_to_str(LIBINPUT_CONFIG_STATUS_SUCCESS);
+       strs[1] = libinput_config_status_to_str(LIBINPUT_CONFIG_STATUS_UNSUPPORTED);
+       strs[2] = libinput_config_status_to_str(LIBINPUT_CONFIG_STATUS_INVALID);
+
+       for (i = 0; i < ARRAY_LENGTH(strs) - 1; i++)
+               for (j = i + 1; j < ARRAY_LENGTH(strs); j++)
+                       ck_assert_str_ne(strs[i], strs[j]);
+
+       invalid = libinput_config_status_to_str(LIBINPUT_CONFIG_STATUS_INVALID + 1);
+       ck_assert(invalid == NULL);
+       invalid = libinput_config_status_to_str(LIBINPUT_CONFIG_STATUS_SUCCESS - 1);
+       ck_assert(invalid == NULL);
+}
+END_TEST
+
 int main (int argc, char **argv) {
        litest_add_no_device("events:conversion", event_conversion_device_notify);
        litest_add_no_device("events:conversion", event_conversion_pointer);
@@ -417,6 +439,7 @@ int main (int argc, char **argv) {
        litest_add_no_device("events:conversion", event_conversion_touch);
        litest_add_no_device("context:refcount", context_ref_counting);
        litest_add("device:id", device_ids, LITEST_ANY, LITEST_ANY);
+       litest_add_no_device("config:status string", config_status_string);
 
        return litest_run(argc, argv);
 }