]> git.eshelyaron.com Git - emacs.git/commitdiff
Adjust client pointer upon help event
authorPo Lu <luangruo@yahoo.com>
Thu, 11 Aug 2022 01:56:15 +0000 (09:56 +0800)
committerPo Lu <luangruo@yahoo.com>
Thu, 11 Aug 2022 01:56:15 +0000 (09:56 +0800)
* src/xterm.c (handle_one_xevent): Keep track of the device that
set do_help and make it the client pointer so that tooltips show
up under the right pointer.

src/xterm.c

index 17043e078c7e5b634ca3ae94e54cf8c98cbbde68..4372fdb959d669a74f646052b55404464899cf93 100644 (file)
@@ -17316,6 +17316,10 @@ handle_one_xevent (struct x_display_info *dpyinfo,
   union buffered_input_event inev;
   int count = 0;
   int do_help = 0;
+#ifdef HAVE_XINPUT2
+  struct xi_device_t *gen_help_device;
+  Time gen_help_time;
+#endif
   ptrdiff_t nbytes = 0;
   struct frame *any, *f = NULL;
   Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight;
@@ -17345,6 +17349,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
   EVENT_INIT (inev.ie);
   inev.ie.kind = NO_EVENT;
   inev.ie.arg = Qnil;
+#ifdef HAVE_XINPUT2
+  gen_help_device = NULL;
+#endif
 
   /* Ignore events coming from various extensions, such as XFIXES and
      XKB.  */
@@ -21270,7 +21277,15 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                 has changed, generate a HELP_EVENT.  */
              if (!NILP (help_echo_string)
                  || !NILP (previous_help_echo_string))
-               do_help = 1;
+               {
+                 /* Also allow the focus and client pointer to be
+                    adjusted accordingly, in case a help tooltip is
+                    shown.  */
+                 gen_help_device = device;
+                 gen_help_time = xev->time;
+
+                 do_help = 1;
+               }
              goto XI_OTHER;
            }
 
@@ -23207,6 +23222,12 @@ handle_one_xevent (struct x_display_info *dpyinfo,
       if (do_help > 0)
        {
          any_help_event_p = true;
+#ifdef HAVE_XINPUT2
+         if (gen_help_device)
+           xi_handle_interaction (dpyinfo, f,
+                                  gen_help_device,
+                                  gen_help_time);
+#endif
          gen_help_event (help_echo_string, frame, help_echo_window,
                          help_echo_object, help_echo_pos);
        }