Utilize new string decoding feature in GTK native input
authorPo Lu <luangruo@yahoo.com>
Sat, 19 Feb 2022 01:18:27 +0000 (09:18 +0800)
committerPo Lu <luangruo@yahoo.com>
Sat, 19 Feb 2022 01:18:27 +0000 (09:18 +0800)
* src/gtkutil.c (xg_im_context_commit): Don't decode strings
manually using g_utf8_to_ucs4 but pass unibyte string as the
keystroke event arg instead.

src/gtkutil.c

index 5e41863c0aeb5c8920cf51da235234487420b7f2..bed983c77e3523f4fd2eb3810001c3db9f1846c3 100644 (file)
@@ -6095,29 +6095,15 @@ xg_im_context_commit (GtkIMContext *imc, gchar *str,
 {
   struct frame *f = user_data;
   struct input_event ie;
-  gunichar *ucs4_str;
 
-  ucs4_str = g_utf8_to_ucs4_fast (str, -1, NULL);
+  EVENT_INIT (ie);
+  ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
+  ie.arg = build_unibyte_string (str);
+  XSETFRAME (ie.frame_or_window, f);
+  ie.modifiers = 0;
+  ie.timestamp = 0;
 
-  if (!ucs4_str)
-    return;
-
-  for (gunichar *c = ucs4_str; *c; c++)
-    {
-      EVENT_INIT (ie);
-      ie.kind = (SINGLE_BYTE_CHAR_P (*c)
-                ? ASCII_KEYSTROKE_EVENT
-                : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
-      ie.arg = Qnil;
-      ie.code = *c;
-      XSETFRAME (ie.frame_or_window, f);
-      ie.modifiers = 0;
-      ie.timestamp = 0;
-
-      kbd_buffer_store_event (&ie);
-    }
-
-  g_free (ucs4_str);
+  kbd_buffer_store_event (&ie);
 }
 
 static void