Fix bug #13864 with flickering of TTY frames in an emacslient session.

src/frame.c (do_switch_frame): Mark the TTY frame we switch to as
 garbaged only if it is not already the top frame on its TTY.  This
 prevents flickering due to constant redrawing of TTY frames when
 there are GUI frames open in the same session.
This commit is contained in:
Eli Zaretskii 2013-04-10 18:38:20 +03:00
parent da3cda2d10
commit f009190abc
2 changed files with 19 additions and 4 deletions

View file

@ -1,3 +1,10 @@
2013-04-10 Eli Zaretskii <eliz@gnu.org>
* frame.c (do_switch_frame): Mark the TTY frame we switch to as
garbaged only if it is not already the top frame on its TTY. This
prevents flickering due to constant redrawing of TTY frames when
there are GUI frames open in the same session. (Bug#13864)
2013-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
* keyboard.c (timer_start_idle): Call internal-timer-start-idle instead

View file

@ -834,10 +834,18 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor
if (FRAME_TERMCAP_P (XFRAME (frame)) || FRAME_MSDOS_P (XFRAME (frame)))
{
if (FRAMEP (FRAME_TTY (XFRAME (frame))->top_frame))
/* Mark previously displayed frame as now obscured. */
SET_FRAME_VISIBLE (XFRAME (FRAME_TTY (XFRAME (frame))->top_frame), 2);
SET_FRAME_VISIBLE (XFRAME (frame), 1);
Lisp_Object top_frame = FRAME_TTY (XFRAME (frame))->top_frame;
/* Don't mark the frame garbaged and/or obscured if we are
switching to the frame that is already the top frame of that
TTY. */
if (!EQ (frame, top_frame))
{
if (FRAMEP (top_frame))
/* Mark previously displayed frame as now obscured. */
SET_FRAME_VISIBLE (XFRAME (top_frame), 2);
SET_FRAME_VISIBLE (XFRAME (frame), 1);
}
FRAME_TTY (XFRAME (frame))->top_frame = frame;
}