diff options
author | Uli Schlachter <psychon@znc.in> | 2021-03-07 09:24:40 +0100 |
---|---|---|
committer | Ran Benita <ran@unusedvar.com> | 2021-03-09 11:00:13 +0200 |
commit | c033970163bada868361a3cd58cc24ae5d4785a8 (patch) | |
tree | 70ab00292181541cc9d26168d50144dc2d49c2cd /src/x11/keymap.c | |
parent | c8efc3d67da851afc5ae398932bb01f17c38354f (diff) | |
download | xorg-lib-libxkbcommon-c033970163bada868361a3cd58cc24ae5d4785a8.tar.gz |
Save another GetAtomName round trip
Both get_atom_name() and the new atom interner required a round trip. Move
get_atom_name() into the atom interner to save one more round trip. This brings
xkb_x11_keymap_new_from_device() down to two round trips, which is the minimum
possible number.
(Also, I think the new code in keymap.c is more readable than the mess I
previously created)
With this last commit in the series, this definitely:
Fixes: https://github.com/xkbcommon/libxkbcommon/pull/217
Signed-off-by: Uli Schlachter <psychon@znc.in>
Diffstat (limited to 'src/x11/keymap.c')
-rw-r--r-- | src/x11/keymap.c | 33 |
1 files changed, 9 insertions, 24 deletions
diff --git a/src/x11/keymap.c b/src/x11/keymap.c index 6164d83..1e7fc3b 100644 --- a/src/x11/keymap.c +++ b/src/x11/keymap.c @@ -1079,25 +1079,15 @@ get_names(struct xkb_keymap *keymap, struct x11_atom_interner *interner, reply->which, &list); - xcb_get_atom_name_cookie_t cookies[4]; - get_atom_name(conn, list.keycodesName, &cookies[0]); - get_atom_name(conn, list.symbolsName, &cookies[1]); - get_atom_name(conn, list.typesName, &cookies[2]); - get_atom_name(conn, list.compatName, &cookies[3]); - - /* We need to ensure all replies are collected and thus no short-circuit */ - bool atom_success = true; - atom_success &= get_atom_name_reply(conn, list.keycodesName, cookies[0], - &keymap->keycodes_section_name); - atom_success &= get_atom_name_reply(conn, list.symbolsName, cookies[1], - &keymap->symbols_section_name); - atom_success &= get_atom_name_reply(conn, list.typesName, cookies[2], - &keymap->types_section_name); - atom_success &= get_atom_name_reply(conn, list.compatName, cookies[3], - &keymap->compat_section_name); - - if (!atom_success || - !get_type_names(keymap, interner, reply, &list) || + x11_atom_interner_get_escaped_atom_name(interner, list.keycodesName, + &keymap->keycodes_section_name); + x11_atom_interner_get_escaped_atom_name(interner, list.symbolsName, + &keymap->symbols_section_name); + x11_atom_interner_get_escaped_atom_name(interner, list.typesName, + &keymap->types_section_name); + x11_atom_interner_get_escaped_atom_name(interner, list.compatName, + &keymap->compat_section_name); + if (!get_type_names(keymap, interner, reply, &list) || !get_indicator_names(keymap, interner, reply, &list) || !get_vmod_names(keymap, interner, reply, &list) || !get_group_names(keymap, interner, reply, &list) || @@ -1105,11 +1095,6 @@ get_names(struct xkb_keymap *keymap, struct x11_atom_interner *interner, !get_aliases(keymap, conn, reply, &list)) goto fail; - XkbEscapeMapName(keymap->keycodes_section_name); - XkbEscapeMapName(keymap->symbols_section_name); - XkbEscapeMapName(keymap->types_section_name); - XkbEscapeMapName(keymap->compat_section_name); - free(reply); return true; |