emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 02ee025487: Correctly set user time on GTK+ for key press events


From: Po Lu
Subject: master 02ee025487: Correctly set user time on GTK+ for key press events
Date: Sat, 6 Aug 2022 22:18:37 -0400 (EDT)

branch: master
commit 02ee0254873d4c102728c942dc9659f942c5cfa6
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Correctly set user time on GTK+ for key press events
    
    * src/xterm.c (x_set_gtk_user_time): New function.
    (handle_one_xevent): Call that after key press event on GTK+.
---
 src/xterm.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/src/xterm.c b/src/xterm.c
index 8f84edc63e..97985c8d9e 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -7586,6 +7586,26 @@ x_display_set_last_user_time (struct x_display_info 
*dpyinfo, Time time,
 #endif
 }
 
+#ifdef USE_GTK
+
+static void
+x_set_gtk_user_time (struct frame *f, Time time)
+{
+  GtkWidget *widget;
+  GdkWindow *window;
+
+  widget = FRAME_GTK_OUTER_WIDGET (f);
+  window = gtk_widget_get_window (widget);
+
+  /* This widget isn't realized yet.  */
+  if (!window)
+    return;
+
+  gdk_x11_window_set_user_time (window, time);
+}
+
+#endif
+
 /* Not needed on GTK because GTK handles reporting the user time
    itself.  */
 
@@ -18211,6 +18231,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
       x_display_set_last_user_time (dpyinfo, event->xkey.time,
                                    event->xkey.send_event);
       ignore_next_mouse_click_timeout = 0;
+
       coding = Qlatin_1;
 
 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
@@ -18221,6 +18242,11 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
       f = any;
 
+#ifdef USE_GTK
+      if (f)
+       x_set_gtk_user_time (f, event->xkey.time);
+#endif
+
       /* If mouse-highlight is an integer, input clears out
         mouse highlighting.  */
       if (!hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight)
@@ -21593,6 +21619,15 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
              f = x_any_window_to_frame (dpyinfo, xev->event);
 
+             /* GTK handles TAB events in an undesirable manner, so
+                keyboard events are always dropped.  But as a side
+                effect, the user time will no longer be set by GDK,
+                so do that manually.  */
+#ifdef USE_GTK
+             if (f)
+               x_set_gtk_user_time (f, xev->time);
+#endif
+
              if (f)
                {
                  /* If the user interacts with a frame that's focused



reply via email to

[Prev in Thread] Current Thread [Next in Thread]