summaryrefslogtreecommitdiff
path: root/src/keymap-priv.c
diff options
context:
space:
mode:
authorRan Benita <ran234@gmail.com>2014-04-22 12:23:36 +0300
committerRan Benita <ran234@gmail.com>2014-04-22 14:56:44 +0300
commit787faf36654ed75672613c560286caddadce3ec5 (patch)
treea3d72f5562234c15141faa3331f6ad1550e0df07 /src/keymap-priv.c
parent6b1cdee107caaf8009037763a3cc3cd51132a1dd (diff)
downloadxorg-lib-libxkbcommon-787faf36654ed75672613c560286caddadce3ec5.tar.gz
keymap: don't use darray in xkb_mod_set
Instead just statically allocate the mods array (of size MAX_MOD_SIZE = 32). The limit is not going anywhere, and static allocations are nicer (nicer code, no OOM, etc.). It's also small and dense enough. Signed-off-by: Ran Benita <ran234@gmail.com>
Diffstat (limited to 'src/keymap-priv.c')
-rw-r--r--src/keymap-priv.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/keymap-priv.c b/src/keymap-priv.c
index f391336..d21dda7 100644
--- a/src/keymap-priv.c
+++ b/src/keymap-priv.c
@@ -29,24 +29,25 @@
static void
update_builtin_keymap_fields(struct xkb_keymap *keymap)
{
- struct xkb_context *ctx = keymap->ctx;
- const struct xkb_mod builtin_mods[] = {
- { .name = xkb_atom_intern_literal(ctx, "Shift"), .type = MOD_REAL },
- { .name = xkb_atom_intern_literal(ctx, "Lock"), .type = MOD_REAL },
- { .name = xkb_atom_intern_literal(ctx, "Control"), .type = MOD_REAL },
- { .name = xkb_atom_intern_literal(ctx, "Mod1"), .type = MOD_REAL },
- { .name = xkb_atom_intern_literal(ctx, "Mod2"), .type = MOD_REAL },
- { .name = xkb_atom_intern_literal(ctx, "Mod3"), .type = MOD_REAL },
- { .name = xkb_atom_intern_literal(ctx, "Mod4"), .type = MOD_REAL },
- { .name = xkb_atom_intern_literal(ctx, "Mod5"), .type = MOD_REAL },
+ /* Predefined (AKA real, core, X11) modifiers. The order is important! */
+ static const char *const builtin_mods[] = {
+ [0] = "Shift",
+ [1] = "Lock",
+ [2] = "Control",
+ [3] = "Mod1",
+ [4] = "Mod2",
+ [5] = "Mod3",
+ [6] = "Mod4",
+ [7] = "Mod5"
};
- /*
- * Add predefined (AKA real, core, X11) modifiers.
- * The order is important!
- */
- darray_append_items(keymap->mods.mods,
- builtin_mods, ARRAY_SIZE(builtin_mods));
+ for (unsigned i = 0; i < ARRAY_SIZE(builtin_mods); i++) {
+ keymap->mods.mods[i].name = xkb_atom_intern(keymap->ctx,
+ builtin_mods[i],
+ strlen(builtin_mods[i]));
+ keymap->mods.mods[i].type = MOD_REAL;
+ }
+ keymap->mods.num_mods = ARRAY_SIZE(builtin_mods);
}
struct xkb_keymap *