summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfujiwarat <takao.fujiwara1@gmail.com>2021-09-06 20:25:52 +0900
committerfujiwarat <takao.fujiwara1@gmail.com>2021-09-06 20:25:52 +0900
commit4957d1468db4fc5ed30c3ae1f2afac9e51b329d6 (patch)
treef0fc66703ace3bfd92a814609eb4ad7d9d06cc83
parent5487a6baa4b22605ba8197ca1a0fa43c91d57786 (diff)
downloadibus-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.c22
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);