From 1e23f9f308be761ca3b1bb992c7983a4585d9174 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 30 Jun 2014 19:45:38 +0300 Subject: [PATCH] Fix bug #17875 with changing TTY frame size, then selecting new frame. src/frame.c (do_switch_frame): When switching to another TTY frame, make sure FrameCols and FrameRows are in sync with the new frame's data. --- src/ChangeLog | 6 ++++++ src/frame.c | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index eac62eef7a7..6d1e23b40fd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-06-30 Eli Zaretskii + + * frame.c (do_switch_frame): When switching to another TTY frame, + make sure FrameCols and FrameRows are in sync with the new frame's + data. (Bug#17875) + 2014-06-28 Andreas Schwab * coding.c (encode_coding_utf_8): Correctly count produced_chars diff --git a/src/frame.c b/src/frame.c index 35c926ce7ef..0c130164352 100644 --- a/src/frame.c +++ b/src/frame.c @@ -46,6 +46,7 @@ along with GNU Emacs. If not, see . */ #ifdef HAVE_WINDOW_SYSTEM #include "fontset.h" #endif +#include "cm.h" #ifdef MSDOS #include "msdos.h" #include "dosfns.h" @@ -851,7 +852,9 @@ 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))) { - Lisp_Object top_frame = FRAME_TTY (XFRAME (frame))->top_frame; + struct frame *f = XFRAME (frame); + struct tty_display_info *tty = FRAME_TTY (f); + Lisp_Object top_frame = tty->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 @@ -861,9 +864,16 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor if (FRAMEP (top_frame)) /* Mark previously displayed frame as now obscured. */ SET_FRAME_VISIBLE (XFRAME (top_frame), 2); - SET_FRAME_VISIBLE (XFRAME (frame), 1); + SET_FRAME_VISIBLE (f, 1); + /* If the new TTY frame changed dimensions, we need to + resync term.c's idea of the frame size with the new + frame's data. */ + if (FRAME_COLS (f) != FrameCols (tty)) + FrameCols (tty) = FRAME_COLS (f); + if (FRAME_LINES (f) != FrameRows (tty)) + FrameRows (tty) = FRAME_LINES (f); } - FRAME_TTY (XFRAME (frame))->top_frame = frame; + tty->top_frame = frame; } selected_frame = frame; -- 2.39.5