summaryrefslogtreecommitdiff
path: root/src/x11/keymap.c
diff options
context:
space:
mode:
authorUli Schlachter <psychon@znc.in>2021-03-07 09:24:40 +0100
committerRan Benita <ran@unusedvar.com>2021-03-09 11:00:13 +0200
commitc033970163bada868361a3cd58cc24ae5d4785a8 (patch)
tree70ab00292181541cc9d26168d50144dc2d49c2cd /src/x11/keymap.c
parentc8efc3d67da851afc5ae398932bb01f17c38354f (diff)
downloadxorg-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.c33
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;