]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix mouse face persisting inside Lucid menus on XI2
authorPo Lu <luangruo@yahoo.com>
Fri, 6 May 2022 03:55:35 +0000 (11:55 +0800)
committerPo Lu <luangruo@yahoo.com>
Fri, 6 May 2022 03:55:35 +0000 (11:55 +0800)
* src/xmenu.c (create_and_show_popup_menu): Call `x_mouse_leave'
on Lucid as well when the input extension is being used.

* src/xterm.c (x_mouse_leave): Enable on Lucid XI2 builds.
* src/xterm.h: Update prototypes.

src/xmenu.c
src/xterm.c
src/xterm.h

index 0dbc8058f9e0832f67211e438bbcae438ad86096..4c8828412d3ba7f52c64188ce6b8034eca2e76d3 100644 (file)
@@ -1844,6 +1844,11 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
 
 #ifdef HAVE_XINPUT2
   prepare_for_entry_into_toolkit_menu (f);
+
+#ifdef USE_LUCID
+  if (dpyinfo->supports_xi2)
+    x_mouse_leave (dpyinfo);
+#endif
 #endif
   /* Display the menu.  */
   lw_popup_menu (menu, &dummy);
index 1f3e44c553fd69f32d04d2df40d4e2493c34453c..6b5c272ef9b1b4beb1a888f9194bee383b0827a7 100644 (file)
@@ -10333,12 +10333,21 @@ x_detect_focus_change (struct x_display_info *dpyinfo, struct frame *frame,
 }
 
 
-#if !defined USE_X_TOOLKIT && !defined USE_GTK
+#if (defined USE_LUCID && defined HAVE_XINPUT2) \
+  || (!defined USE_X_TOOLKIT && !defined USE_GTK)
 /* Handle an event saying the mouse has moved out of an Emacs frame.  */
 
 void
 x_mouse_leave (struct x_display_info *dpyinfo)
 {
+  Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight;
+
+  if (hlinfo->mouse_face_mouse_frame)
+    {
+      clear_mouse_face (hlinfo);
+      hlinfo->mouse_face_mouse_frame = NULL;
+    }
+
   x_new_focus_frame (dpyinfo, dpyinfo->x_focus_event_frame);
 }
 #endif
index 74e6d1a96cb23539e79c945dab908234d578e64c..3e06564bee9c7465b347b24070eee84d3111960b 100644 (file)
@@ -1386,7 +1386,8 @@ extern bool x_alloc_lighter_color_for_widget (Widget, Display *, Colormap,
 extern bool x_alloc_nearest_color (struct frame *, Colormap, XColor *);
 extern void x_query_colors (struct frame *f, XColor *, int);
 extern void x_clear_area (struct frame *f, int, int, int, int);
-#if !defined USE_X_TOOLKIT && !defined USE_GTK
+#if (defined USE_LUCID && defined HAVE_XINPUT2) \
+  || (!defined USE_X_TOOLKIT && !defined USE_GTK)
 extern void x_mouse_leave (struct x_display_info *);
 #endif