diff options
author | Richard M. Stallman <[email protected]> | 1994-12-23 05:12:32 +0000 |
---|---|---|
committer | Richard M. Stallman <[email protected]> | 1994-12-23 05:12:32 +0000 |
commit | 37c2c98b1659e880f69a2c91c8a135577a0713d6 (patch) | |
tree | 5d4e0a89d3bf1ff6c9c330ecd42ffe943eced231 /src/xterm.c | |
parent | a59e4f3d62a637792992f56d9049ab59ccd06dff (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.c | 29 |
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) |