Allow NULL rmlvo for xkb_keymap_new_from_names
authorDaniel Stone <daniel@fooishbar.org>
Sat, 2 Mar 2013 07:47:59 +0000 (23:47 -0800)
committerDaniel Stone <daniel@fooishbar.org>
Tue, 19 Mar 2013 10:54:23 +0000 (10:54 +0000)
Previously we allowed you to pass a names struct with five NULL members,
but not just pass NULL for the struct itself.  This was pretty dumb. :(

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
test/common.c
xkbcommon/xkbcommon.h

index 2ed23cf..2ea2e5b 100644 (file)
@@ -259,14 +259,18 @@ test_compile_rules(struct xkb_context *context, const char *rules,
 {
     struct xkb_keymap *keymap;
     struct xkb_rule_names rmlvo = {
-        .rules = rules,
-        .model = model,
-        .layout = layout,
-        .variant = variant,
-        .options = options
+        .rules = isempty(rules) ? NULL : rules,
+        .model = isempty(model) ? NULL : model,
+        .layout = isempty(layout) ? NULL : layout,
+        .variant = isempty(variant) ? NULL : variant,
+        .options = isempty(options) ? NULL : options
     };
 
-    keymap = xkb_keymap_new_from_names(context, &rmlvo, 0);
+    if (!rules && !model && !layout && !variant && !options)
+        keymap = xkb_keymap_new_from_names(context, NULL, 0);
+    else
+        keymap = xkb_keymap_new_from_names(context, &rmlvo, 0);
+
     if (!keymap) {
         fprintf(stderr,
                 "Failed to compile RMLVO: '%s', '%s', '%s', '%s', '%s'\n",
index cdc021b..ad758b8 100644 (file)
@@ -681,7 +681,9 @@ enum xkb_keymap_compile_flags {
  * keymaps.
  *
  * @param context The context in which to create the keymap.
- * @param names   The RMLVO names to use.
+ * @param names   The RMLVO names to use.  In xkbcommon versions prior
+ *                to 0.2.1, this field must be non-NULL.  In later
+ *                versions, passing NULL will use the default keymap.
  * @param flags   Optional flags for the keymap, or 0.
  *
  * @returns A keymap compiled according to the RMLVO names, or NULL if