diff options
Diffstat (limited to 'src/gtkutil.c')
| -rw-r--r-- | src/gtkutil.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/gtkutil.c b/src/gtkutil.c index 36ed55bc039..eb148560620 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c | |||
| @@ -4534,6 +4534,12 @@ xg_update_scrollbar_pos (struct frame *f, | |||
| 4534 | gtk_widget_show_all (wparent); | 4534 | gtk_widget_show_all (wparent); |
| 4535 | gtk_widget_set_size_request (wscroll, width, height); | 4535 | gtk_widget_set_size_request (wscroll, width, height); |
| 4536 | } | 4536 | } |
| 4537 | |||
| 4538 | #if !defined HAVE_PGTK && GTK_CHECK_VERSION (2, 18, 0) | ||
| 4539 | if (!gdk_window_ensure_native (gtk_widget_get_window (wscroll))) | ||
| 4540 | emacs_abort (); | ||
| 4541 | #endif | ||
| 4542 | |||
| 4537 | if (oldx != -1 && oldw > 0 && oldh > 0) | 4543 | if (oldx != -1 && oldw > 0 && oldh > 0) |
| 4538 | { | 4544 | { |
| 4539 | /* Clear under old scroll bar position. */ | 4545 | /* Clear under old scroll bar position. */ |
| @@ -4587,7 +4593,6 @@ xg_update_horizontal_scrollbar_pos (struct frame *f, | |||
| 4587 | int width, | 4593 | int width, |
| 4588 | int height) | 4594 | int height) |
| 4589 | { | 4595 | { |
| 4590 | |||
| 4591 | GtkWidget *wscroll = xg_get_widget_from_map (scrollbar_id); | 4596 | GtkWidget *wscroll = xg_get_widget_from_map (scrollbar_id); |
| 4592 | 4597 | ||
| 4593 | if (wscroll) | 4598 | if (wscroll) |
| @@ -4634,6 +4639,11 @@ xg_update_horizontal_scrollbar_pos (struct frame *f, | |||
| 4634 | pgtk_clear_area (f, oldx, oldy, oldw, oldh); | 4639 | pgtk_clear_area (f, oldx, oldy, oldw, oldh); |
| 4635 | #endif | 4640 | #endif |
| 4636 | 4641 | ||
| 4642 | #if !defined HAVE_PGTK && GTK_CHECK_VERSION (2, 18, 0) | ||
| 4643 | if (!gdk_window_ensure_native (gtk_widget_get_window (wscroll))) | ||
| 4644 | emacs_abort (); | ||
| 4645 | #endif | ||
| 4646 | |||
| 4637 | /* GTK does not redraw until the main loop is entered again, but | 4647 | /* GTK does not redraw until the main loop is entered again, but |
| 4638 | if there are no X events pending we will not enter it. So we sync | 4648 | if there are no X events pending we will not enter it. So we sync |
| 4639 | here to get some events. */ | 4649 | here to get some events. */ |
| @@ -6151,6 +6161,7 @@ xg_widget_key_press_event_cb (GtkWidget *widget, GdkEvent *event, | |||
| 6151 | 6161 | ||
| 6152 | inev.ie.modifiers | 6162 | inev.ie.modifiers |
| 6153 | |= x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), xstate); | 6163 | |= x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), xstate); |
| 6164 | inev.ie.timestamp = event->key.time; | ||
| 6154 | 6165 | ||
| 6155 | if (event->key.is_modifier) | 6166 | if (event->key.is_modifier) |
| 6156 | goto done; | 6167 | goto done; |
| @@ -6256,13 +6267,16 @@ xg_widget_key_press_event_cb (GtkWidget *widget, GdkEvent *event, | |||
| 6256 | } | 6267 | } |
| 6257 | 6268 | ||
| 6258 | XNoOp (FRAME_X_DISPLAY (f)); | 6269 | XNoOp (FRAME_X_DISPLAY (f)); |
| 6270 | #ifdef USABLE_SIGIO | ||
| 6271 | raise (SIGIO); | ||
| 6272 | #endif | ||
| 6259 | return true; | 6273 | return true; |
| 6260 | } | 6274 | } |
| 6261 | 6275 | ||
| 6262 | bool | 6276 | bool |
| 6263 | xg_filter_key (struct frame *frame, XEvent *xkey) | 6277 | xg_filter_key (struct frame *frame, XEvent *xkey) |
| 6264 | { | 6278 | { |
| 6265 | GdkEvent *xg_event = gdk_event_new ((xkey->type == ButtonPress | 6279 | GdkEvent *xg_event = gdk_event_new ((xkey->type == KeyPress |
| 6266 | #ifdef HAVE_XINPUT2 | 6280 | #ifdef HAVE_XINPUT2 |
| 6267 | || (xkey->type == GenericEvent | 6281 | || (xkey->type == GenericEvent |
| 6268 | && xkey->xgeneric.evtype == XI_KeyPress) | 6282 | && xkey->xgeneric.evtype == XI_KeyPress) |
| @@ -6321,6 +6335,7 @@ xg_filter_key (struct frame *frame, XEvent *xkey) | |||
| 6321 | NULL, NULL, &consumed); | 6335 | NULL, NULL, &consumed); |
| 6322 | xg_add_virtual_mods (dpyinfo, &xg_event->key); | 6336 | xg_add_virtual_mods (dpyinfo, &xg_event->key); |
| 6323 | xg_event->key.state &= ~consumed; | 6337 | xg_event->key.state &= ~consumed; |
| 6338 | xg_event->key.time = xkey->xkey.time; | ||
| 6324 | #if GTK_CHECK_VERSION (3, 6, 0) | 6339 | #if GTK_CHECK_VERSION (3, 6, 0) |
| 6325 | xg_event->key.is_modifier = gdk_x11_keymap_key_is_modifier (keymap, | 6340 | xg_event->key.is_modifier = gdk_x11_keymap_key_is_modifier (keymap, |
| 6326 | xg_event->key.hardware_keycode); | 6341 | xg_event->key.hardware_keycode); |
| @@ -6334,6 +6349,7 @@ xg_filter_key (struct frame *frame, XEvent *xkey) | |||
| 6334 | xg_event->key.hardware_keycode = xev->detail; | 6349 | xg_event->key.hardware_keycode = xev->detail; |
| 6335 | xg_event->key.group = xev->group.effective; | 6350 | xg_event->key.group = xev->group.effective; |
| 6336 | xg_event->key.state = xev->mods.effective; | 6351 | xg_event->key.state = xev->mods.effective; |
| 6352 | xg_event->key.time = xev->time; | ||
| 6337 | gdk_keymap_translate_keyboard_state (keymap, | 6353 | gdk_keymap_translate_keyboard_state (keymap, |
| 6338 | xev->detail, | 6354 | xev->detail, |
| 6339 | xev->mods.effective, | 6355 | xev->mods.effective, |