+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
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;
}