diff options
author | Ran Benita <ran234@gmail.com> | 2013-03-04 14:00:44 +0200 |
---|---|---|
committer | Daniel Stone <daniel@fooishbar.org> | 2013-03-18 22:20:05 +0000 |
commit | 2ddb9e4f9835354dc87998e5e74d63f30c02d6a6 (patch) | |
tree | f9c78385f2c8a7db32bd1343ab16d2f307caef27 /src | |
parent | 4bd0610f1370e9716d7b999ade01a0c188390792 (diff) |
types: put all copy-to-keymap code in one function
Signed-off-by: Ran Benita <ran234@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/xkbcomp/types.c | 63 |
1 files changed, 31 insertions, 32 deletions
diff --git a/src/xkbcomp/types.c b/src/xkbcomp/types.c index 737fc1e..c3ba17a 100644 --- a/src/xkbcomp/types.c +++ b/src/xkbcomp/types.c @@ -776,56 +776,55 @@ HandleKeyTypesFile(KeyTypesInfo *info, XkbFile *file, enum merge_mode merge) } } -static void -CopyDefToKeyType(KeyTypeInfo *def, struct xkb_key_type *type) -{ - type->mods.mods = def->mods; - type->num_levels = def->num_levels; - type->map = darray_mem(def->entries, 0); - type->num_entries = darray_size(def->entries); - darray_init(def->entries); - type->name = def->name; - type->level_names = darray_mem(def->level_names, 0); - darray_init(def->level_names); -} +/***====================================================================***/ static bool CopyKeyTypesToKeymap(struct xkb_keymap *keymap, KeyTypesInfo *info) { - unsigned int i; - unsigned int num_types; + keymap->types_section_name = strdup_safe(info->name); - num_types = darray_size(info->types) ? darray_size(info->types) : 1; - keymap->types = calloc(num_types, sizeof(*keymap->types)); - if (!keymap->types) - return false; + keymap->num_types = darray_size(info->types); + if (keymap->num_types == 0) + keymap->num_types = 1; - keymap->num_types = num_types; + keymap->types = calloc(keymap->num_types, sizeof(*keymap->types)); /* * If no types were specified, a default unnamed one-level type is * used for all keys. */ if (darray_empty(info->types)) { - KeyTypeInfo dflt = { - .name = xkb_atom_intern(keymap->ctx, "default"), - .mods = 0, - .num_levels = 1, - .entries = darray_new(), - .level_names = darray_new(), - }; - - CopyDefToKeyType(&dflt, &keymap->types[0]); - } else { - for (i = 0; i < num_types; i++) - CopyDefToKeyType(&darray_item(info->types, i), &keymap->types[i]); + struct xkb_key_type *type = &keymap->types[0]; + + type->mods.mods = 0; + type->num_levels = 1; + type->map = NULL; + type->num_entries = 0; + type->name = xkb_atom_intern(keymap->ctx, "default"); + type->level_names = NULL; + + return true; } - keymap->types_section_name = strdup_safe(info->name); + for (unsigned i = 0; i < keymap->num_types; i++) { + KeyTypeInfo *def = &darray_item(info->types, i); + struct xkb_key_type *type = &keymap->types[i]; + + type->mods.mods = def->mods; + type->num_levels = def->num_levels; + type->map = darray_mem(def->entries, 0); + type->num_entries = darray_size(def->entries); + darray_init(def->entries); + type->name = def->name; + type->level_names = darray_mem(def->level_names, 0); + darray_init(def->level_names); + } return true; } +/***====================================================================***/ + bool CompileKeyTypes(XkbFile *file, struct xkb_keymap *keymap, enum merge_mode merge) |