diff options
author | fujiwarat <takao.fujiwara1@gmail.com> | 2021-09-06 20:25:52 +0900 |
---|---|---|
committer | fujiwarat <takao.fujiwara1@gmail.com> | 2021-09-06 20:25:52 +0900 |
commit | 4957d1468db4fc5ed30c3ae1f2afac9e51b329d6 (patch) | |
tree | f0fc66703ace3bfd92a814609eb4ad7d9d06cc83 | |
parent | 5487a6baa4b22605ba8197ca1a0fa43c91d57786 (diff) | |
download | ibus-4957d1468db4fc5ed30c3ae1f2afac9e51b329d6.tar.gz |
client/gtk2/ibusimcontext: Calculate keycode from keysym in GTK3 forward-key-event
IBus GTK3 mode also calculates keycode from keysym if keycode == 0
with forward-key-event signal to follow GTK4.
-rw-r--r-- | client/gtk2/ibusimcontext.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c index e12be45d..b1424e87 100644 --- a/client/gtk2/ibusimcontext.c +++ b/client/gtk2/ibusimcontext.c @@ -1939,13 +1939,16 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext, int group = 0; g_return_if_fail (GTK_IS_IM_CONTEXT (ibusimcontext)); if (keycode == 0 && ibusimcontext->client_window) { - GdkDisplay *display = gtk_widget_get_display (ibusimcontext->client_window); + GdkDisplay *display = + gtk_widget_get_display (ibusimcontext->client_window); GdkKeymapKey *keys = NULL; gint n_keys = 0; - if (!gdk_display_map_keyval (display, keyval, &keys, &n_keys)) + if (gdk_display_map_keyval (display, keyval, &keys, &n_keys)) { + keycode = keys->keycode; + group = keys->group; + } else { g_warning ("Failed to parse keycode from keyval %x", keyval); - keycode = keys->keycode; - group = keys->group; + } } gtk_im_context_filter_key ( GTK_IM_CONTEXT (ibusimcontext), @@ -1957,6 +1960,17 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext, (GdkModifierType)state, group); #else + if (keycode == 0 && ibusimcontext->client_window) { + GdkDisplay *display = + gdk_window_get_display (ibusimcontext->client_window); + GdkKeymap *keymap = gdk_keymap_get_for_display (display); + GdkKeymapKey *keys = NULL; + gint n_keys = 0; + if (gdk_keymap_get_entries_for_keyval (keymap, keyval, &keys, &n_keys)) + keycode = keys->keycode; + else + g_warning ("Failed to parse keycode from keyval %x", keyval); + } GdkEventKey *event = _create_gdk_event (ibusimcontext, keyval, keycode, state); gdk_event_put ((GdkEvent *)event); gdk_event_free ((GdkEvent *)event); |