diff options
| author | Po Lu | 2022-01-11 18:06:37 +0800 |
|---|---|---|
| committer | Po Lu | 2022-01-11 18:06:37 +0800 |
| commit | 73e4335c58ad8a475381dd4e585c55f4615e4d19 (patch) | |
| tree | 2cd24ce43f16601f9be9e05b62d454a2b01cc675 /src | |
| parent | 0b0a8dab6817a974eb8d7baf18efe9fb5dc99c2b (diff) | |
| download | emacs-73e4335c58ad8a475381dd4e585c55f4615e4d19.tar.gz emacs-73e4335c58ad8a475381dd4e585c55f4615e4d19.zip | |
Stop decoding GTK event strings when using native input
* src/gtkutil.c (xg_widget_key_press_event_cb): Stop decoding
event strings.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gtkutil.c | 42 |
1 files changed, 9 insertions, 33 deletions
diff --git a/src/gtkutil.c b/src/gtkutil.c index 8eab6ee723d..3550a56e299 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c | |||
| @@ -6123,9 +6123,6 @@ xg_widget_key_press_event_cb (GtkWidget *widget, GdkEvent *event, | |||
| 6123 | union buffered_input_event inev; | 6123 | union buffered_input_event inev; |
| 6124 | guint keysym = event->key.keyval; | 6124 | guint keysym = event->key.keyval; |
| 6125 | unsigned int xstate; | 6125 | unsigned int xstate; |
| 6126 | gunichar *cb; | ||
| 6127 | ptrdiff_t i; | ||
| 6128 | glong len; | ||
| 6129 | gunichar uc; | 6126 | gunichar uc; |
| 6130 | 6127 | ||
| 6131 | FOR_EACH_FRAME (tail, tem) | 6128 | FOR_EACH_FRAME (tail, tem) |
| @@ -6235,40 +6232,19 @@ xg_widget_key_press_event_cb (GtkWidget *widget, GdkEvent *event, | |||
| 6235 | goto done; | 6232 | goto done; |
| 6236 | } | 6233 | } |
| 6237 | 6234 | ||
| 6238 | if (event->key.string) | 6235 | uc = gdk_keyval_to_unicode (keysym); |
| 6239 | { | ||
| 6240 | cb = g_utf8_to_ucs4_fast (event->key.string, -1, &len); | ||
| 6241 | |||
| 6242 | for (i = 0; i < len; ++i) | ||
| 6243 | { | ||
| 6244 | inev.ie.kind = (SINGLE_BYTE_CHAR_P (cb[i]) | ||
| 6245 | ? ASCII_KEYSTROKE_EVENT | ||
| 6246 | : MULTIBYTE_CHAR_KEYSTROKE_EVENT); | ||
| 6247 | inev.ie.code = cb[i]; | ||
| 6248 | |||
| 6249 | kbd_buffer_store_buffered_event (&inev, &xg_pending_quit_event); | ||
| 6250 | } | ||
| 6251 | |||
| 6252 | g_free (cb); | ||
| 6253 | 6236 | ||
| 6254 | inev.ie.kind = NO_EVENT; | 6237 | if (uc) |
| 6238 | { | ||
| 6239 | inev.ie.kind = (SINGLE_BYTE_CHAR_P (uc) | ||
| 6240 | ? ASCII_KEYSTROKE_EVENT | ||
| 6241 | : MULTIBYTE_CHAR_KEYSTROKE_EVENT); | ||
| 6242 | inev.ie.code = uc; | ||
| 6255 | } | 6243 | } |
| 6256 | else | 6244 | else |
| 6257 | { | 6245 | { |
| 6258 | uc = gdk_keyval_to_unicode (keysym); | 6246 | inev.ie.kind = NON_ASCII_KEYSTROKE_EVENT; |
| 6259 | 6247 | inev.ie.code = keysym; | |
| 6260 | if (uc) | ||
| 6261 | { | ||
| 6262 | inev.ie.kind = (SINGLE_BYTE_CHAR_P (uc) | ||
| 6263 | ? ASCII_KEYSTROKE_EVENT | ||
| 6264 | : MULTIBYTE_CHAR_KEYSTROKE_EVENT); | ||
| 6265 | inev.ie.code = uc; | ||
| 6266 | } | ||
| 6267 | else | ||
| 6268 | { | ||
| 6269 | inev.ie.kind = NON_ASCII_KEYSTROKE_EVENT; | ||
| 6270 | inev.ie.code = keysym; | ||
| 6271 | } | ||
| 6272 | } | 6248 | } |
| 6273 | 6249 | ||
| 6274 | done: | 6250 | done: |