aboutsummaryrefslogtreecommitdiffstats
path: root/src/xterm.c
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1994-12-23 05:12:32 +0000
committerRichard M. Stallman <[email protected]>1994-12-23 05:12:32 +0000
commit37c2c98b1659e880f69a2c91c8a135577a0713d6 (patch)
tree5d4e0a89d3bf1ff6c9c330ecd42ffe943eced231 /src/xterm.c
parenta59e4f3d62a637792992f56d9049ab59ccd06dff (diff)
(XTupdate_begin): Discard records of prior mouse highlight
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.
Diffstat (limited to 'src/xterm.c')
-rw-r--r--src/xterm.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/xterm.c b/src/xterm.c
index f5d0226745..8abd502854 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -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)