Fix bug #13864 with flickering of TTY frames in an emacslient session.
authorEli Zaretskii <eliz@gnu.org>
Wed, 10 Apr 2013 15:38:20 +0000 (18:38 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 10 Apr 2013 15:38:20 +0000 (18:38 +0300)
 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.

src/ChangeLog
src/frame.c

index 6fdf601..ff6b950 100644 (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
index 2fe3982..ccd5012 100644 (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;
     }