From 54c9d6e35dbcb73f5c4eae96a9507ae17493cb8e Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Wed, 15 Jun 2011 12:26:57 +0900 Subject: [PATCH] Use XkbChangeMap to reduce traffic between X server. --- src/client.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/client.c b/src/client.c index 52dce88c..8caa27dd 100644 --- a/src/client.c +++ b/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;