]> git.eshelyaron.com Git - emacs.git/commitdiff
(XTupdate_begin): Discard records of prior mouse highlight
authorRichard M. Stallman <rms@gnu.org>
Fri, 23 Dec 1994 05:12:32 +0000 (05:12 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 23 Dec 1994 05:12:32 +0000 (05:12 +0000)
when frame must be redrawn.

(x_make_frame_visible, x_make_frame_invisible)
(x_iconify_frame): Give error if frame has explicit_parent.
(x_new_font): Don't set window height if frame has explicit_parent.

(x_mouse_leave): New function broken out of XTread_socket.
When x_focus_event_frame is nonzero, assume that frame gets focus.
(XTread_socket): Use x_mouse_leave for LeaveNotify.

src/xterm.c

index f5d02267450c631dc58fb3ad74d0c1a5db69a472..8abd502854d3a1e8880a12a33e448867ac20d39a 100644 (file)
@@ -291,6 +291,12 @@ XTupdate_begin (f)
     {
       /* Don't do highlighting for mouse motion during the update.  */
       FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 1;
+
+      /* If the frame needs to be redrawn,
+        simply forget about any prior mouse highlighting.  */
+      if (! FRAME_GARBAGED_P (f))
+       FRAME_X_DISPLAY_INFO (f)->mouse_face_window = Qnil;
+
       if (!NILP (FRAME_X_DISPLAY_INFO (f)->mouse_face_window))
        {
          int firstline, lastline, i;
@@ -311,10 +317,12 @@ XTupdate_begin (f)
            }
 
          /* Can we tell that this update does not affect the window
-            where the mouse highlight is?  If so, no need to turn off.  */
+            where the mouse highlight is?  If so, no need to turn off.
+            Likewise, don't do anything if the frame is garbaged;
+            in that case, the FRAME_CURRENT_GLYPHS that we would use
+            are all wrong, and we will redisplay that line anyway.  */
          if (! (firstline > (XFASTINT (w->top) + window_internal_height (w))
                 || lastline < XFASTINT (w->top)))
-           /* Otherwise turn off the mouse highlight now.  */
            clear_mouse_face (FRAME_X_DISPLAY_INFO (f));
        }
     }
@@ -1449,6 +1457,16 @@ x_new_focus_frame (frame)
   XTframe_rehighlight ();
 }
 
+/* Handle an event saying the mouse has moved out of an Emacs frame.  */
+
+void
+x_mouse_leave ()
+{
+  if (! x_focus_event_frame)
+    x_new_focus_frame (NULL);
+  else
+    x_new_focus_frame (x_focus_event_frame);  /* Was f, but that seems wrong.  */
+}
 
 /* The focus has changed, or we have redirected a frame's focus to
    another frame (this happens when a frame uses a surrogate
@@ -3689,12 +3707,7 @@ XTread_socket (sd, bufp, numchars, waitp, expected)
                    clear_mouse_face (dpyinfo);
 
                  if (event.xcrossing.focus)
-                   {
-                     if (! x_focus_event_frame)
-                       x_new_focus_frame (0);
-                     else
-                       x_new_focus_frame (f);
-                   }
+                   x_mouse_leave ();
                  else
                    {
                      if (f == x_focus_event_frame)