]> code.delx.au - gnu-emacs/commitdiff
Fix a minor problem with mouse-face on mode line
authorEli Zaretskii <eliz@gnu.org>
Thu, 21 May 2015 16:38:19 +0000 (19:38 +0300)
committerEli Zaretskii <eliz@gnu.org>
Thu, 21 May 2015 16:38:19 +0000 (19:38 +0300)
* src/xdisp.c (note_mode_line_or_margin_highlight): Reset the
mouse face also if the mouse pointer hovers above mode-line glyphs
that don't come from any Lisp string.  (Bug#20620)

src/xdisp.c

index 8123719ed486b2d682079042b9f6bbc2ae374901..87f110e667d4e6d55f6a39c2c8da30f7e0113a13 100644 (file)
@@ -29159,6 +29159,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
     }
 
   /* Change the mouse face according to what is under X/Y.  */
+  bool mouse_face_shown = false;
   if (STRINGP (string))
     {
       mouse_face = Fget_text_property (pos, Qmouse_face, string);
@@ -29281,13 +29282,18 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
                                                                glyph->face_id,
                                                                true);
          show_mouse_face (hlinfo, DRAW_MOUSE_FACE);
+         mouse_face_shown = true;
 
          if (NILP (pointer))
            pointer = Qhand;
        }
-      else if ((area == ON_MODE_LINE) || (area == ON_HEADER_LINE))
-       clear_mouse_face (hlinfo);
     }
+
+  /* If mouse-face doesn't need to be shown, clear any existing
+     mouse-face.  */
+  if ((area == ON_MODE_LINE || area == ON_HEADER_LINE) && !mouse_face_shown)
+    clear_mouse_face (hlinfo);
+
 #ifdef HAVE_WINDOW_SYSTEM
   if (FRAME_WINDOW_P (f))
     define_frame_cursor1 (f, cursor, pointer);