Use XkbChangeMap to reduce traffic between X server.
This commit is contained in:
12
src/client.c
12
src/client.c
@ -972,6 +972,8 @@ get_keycode_for_keysym_replace (EekboardClient *client,
|
||||
{
|
||||
Display *display = GDK_DISPLAY_XDISPLAY (client->display);
|
||||
guint offset;
|
||||
XkbMapChangesRec changes;
|
||||
|
||||
if (client->reserved_keycode == 0) {
|
||||
client->reserved_keycode = get_reserved_keycode (client);
|
||||
client->reserved_keysym =
|
||||
@ -983,9 +985,13 @@ get_keycode_for_keysym_replace (EekboardClient *client,
|
||||
|
||||
offset = client->xkb->map->key_sym_map[client->reserved_keycode].offset;
|
||||
client->xkb->map->syms[offset] = keysym;
|
||||
XkbSetMap (display,
|
||||
XkbAllMapComponentsMask,
|
||||
client->xkb);
|
||||
|
||||
memset (&changes, 0, sizeof changes);
|
||||
changes.changed = XkbKeySymsMask;
|
||||
changes.first_key_sym = client->reserved_keycode;
|
||||
changes.num_key_syms = 1;
|
||||
|
||||
XkbChangeMap (display, client->xkb, &changes);
|
||||
XFlush (display);
|
||||
|
||||
*keycode = client->reserved_keycode;
|
||||
|
||||
Reference in New Issue
Block a user