diff options
| author | Po Lu | 2022-01-13 17:56:55 +0800 |
|---|---|---|
| committer | Po Lu | 2022-01-13 17:56:55 +0800 |
| commit | 626c1dce02d4f2e8d0822decf8b421eee00674b1 (patch) | |
| tree | ff1cd256cbd70f7288944a3230251ff5db38578f /src | |
| parent | 9c31be6dc31f10efcfb8dc76053e8bf3f62eef2c (diff) | |
| download | emacs-626c1dce02d4f2e8d0822decf8b421eee00674b1.tar.gz emacs-626c1dce02d4f2e8d0822decf8b421eee00674b1.zip | |
Filter key release events through GTK when using native input
* src/gtkutil.c (xg_filter_key): Set correct event type for key
release events.
* src/xterm.c (x_filter_event): Also filter release events.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gtkutil.c | 7 | ||||
| -rw-r--r-- | src/xterm.c | 6 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/gtkutil.c b/src/gtkutil.c index 7f635f8fe2b..36ed55bc039 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c | |||
| @@ -6262,7 +6262,12 @@ xg_widget_key_press_event_cb (GtkWidget *widget, GdkEvent *event, | |||
| 6262 | bool | 6262 | bool |
| 6263 | xg_filter_key (struct frame *frame, XEvent *xkey) | 6263 | xg_filter_key (struct frame *frame, XEvent *xkey) |
| 6264 | { | 6264 | { |
| 6265 | GdkEvent *xg_event = gdk_event_new (GDK_KEY_PRESS); | 6265 | GdkEvent *xg_event = gdk_event_new ((xkey->type == ButtonPress |
| 6266 | #ifdef HAVE_XINPUT2 | ||
| 6267 | || (xkey->type == GenericEvent | ||
| 6268 | && xkey->xgeneric.evtype == XI_KeyPress) | ||
| 6269 | #endif | ||
| 6270 | ) ? GDK_KEY_PRESS : GDK_KEY_RELEASE); | ||
| 6266 | GdkDisplay *dpy = gtk_widget_get_display (FRAME_GTK_WIDGET (frame)); | 6271 | GdkDisplay *dpy = gtk_widget_get_display (FRAME_GTK_WIDGET (frame)); |
| 6267 | GdkKeymap *keymap = gdk_keymap_get_for_display (dpy); | 6272 | GdkKeymap *keymap = gdk_keymap_get_for_display (dpy); |
| 6268 | GdkModifierType consumed; | 6273 | GdkModifierType consumed; |
diff --git a/src/xterm.c b/src/xterm.c index 058c1dccc22..34097ebfd94 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -8284,8 +8284,10 @@ x_filter_event (struct x_display_info *dpyinfo, XEvent *event) | |||
| 8284 | && event->type == GenericEvent | 8284 | && event->type == GenericEvent |
| 8285 | && (event->xgeneric.extension | 8285 | && (event->xgeneric.extension |
| 8286 | == dpyinfo->xi2_opcode) | 8286 | == dpyinfo->xi2_opcode) |
| 8287 | && (event->xgeneric.evtype | 8287 | && ((event->xgeneric.evtype |
| 8288 | == XI_KeyPress)) | 8288 | == XI_KeyPress) |
| 8289 | || (event->xgeneric.evtype | ||
| 8290 | == XI_KeyRelease))) | ||
| 8289 | { | 8291 | { |
| 8290 | f1 = x_any_window_to_frame (dpyinfo, | 8292 | f1 = x_any_window_to_frame (dpyinfo, |
| 8291 | ((XIDeviceEvent *) | 8293 | ((XIDeviceEvent *) |