aboutsummaryrefslogtreecommitdiffstats
path: root/src/gtkutil.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtkutil.c')
-rw-r--r--src/gtkutil.c20
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
6262bool 6276bool
6263xg_filter_key (struct frame *frame, XEvent *xkey) 6277xg_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,