]> git.eshelyaron.com Git - emacs.git/commitdiff
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 6fdf601fa95c71f58e8fbf63f08b4850c4ccf9bd..ff6b9508d62f63f84d7e9548c9eddca3f69ad1b6 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 2fe398296ed9453ea090af433ccbff00868048a4..ccd50122f509f15e4cf8223cadc8e05f13f8dced 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;
     }