From 7982dfd6fe13c33ef6b57c1a23bdc627bfaf4d29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mar=C3=A7ais?= Date: Tue, 2 Jun 2020 10:01:37 -0400 Subject: [PATCH] Looks for correct key group. Does not show if key group changed during typing password. --- xcb.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/xcb.c b/xcb.c index 1907f4b..287d46b 100644 --- a/xcb.c +++ b/xcb.c @@ -537,6 +537,15 @@ static char * get_atom_name(xcb_connection_t* conn, xcb_atom_t atom) { } +uint8_t xcb_get_key_group_index(xcb_connection_t *conn) { + xcb_xkb_get_state_cookie_t cookie; + xcb_xkb_get_state_reply_t* reply = NULL; + cookie = xcb_xkb_get_state(conn, XCB_XKB_ID_USE_CORE_KBD); + reply = xcb_xkb_get_state_reply(conn, cookie, NULL); + return reply->group; +} + + char* xcb_get_key_group_names(xcb_connection_t *conn) { uint8_t xkb_base_event; uint8_t xkb_base_error; @@ -585,15 +594,17 @@ char* xcb_get_key_group_names(xcb_connection_t *conn) { int length; xcb_atom_t *iter; + uint8_t index; char* answer = NULL; length = xcb_xkb_get_names_value_list_groups_length(reply, &list); iter = xcb_xkb_get_names_value_list_groups(&list); + index = xcb_get_key_group_index(conn); for (int i = 0; i < length; i++) { xcb_atom_t group_name = *iter; char* name = get_atom_name(conn, group_name); DEBUG("group_name %d: %s\n", i, name); - if (i == 0) { + if (i == index) { answer = name; } else { free(name);