Mercurial > emacs
changeset 8323:30755be9badb
(Fnext_window, Fprevious_window): Don't get stuck in a loop
in the minibuffer frame.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 24 Jul 1994 20:02:37 +0000 |
parents | faedd07b38ed |
children | fee9047f3b14 |
files | src/window.c |
diffstat | 1 files changed, 32 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/window.c Sun Jul 24 20:01:13 1994 +0000 +++ b/src/window.c Sun Jul 24 20:02:37 1994 +0000 @@ -880,15 +880,14 @@ minibuf = (minibuf_level ? Qt : Qlambda); #ifdef MULTI_FRAME - /* all_frames == nil doesn't specify which frames to include. - Decide which frames it includes. */ + /* all_frames == nil doesn't specify which frames to include. */ if (NILP (all_frames)) all_frames = (EQ (minibuf, Qt) - ? (FRAME_MINIBUF_WINDOW - (XFRAME - (WINDOW_FRAME - (XWINDOW (window))))) - : Qnil); + ? (FRAME_MINIBUF_WINDOW + (XFRAME + (WINDOW_FRAME + (XWINDOW (window))))) + : Qnil); else if (EQ (all_frames, Qvisible)) ; else if (XFASTINT (all_frames) == 0) @@ -918,7 +917,19 @@ tem = WINDOW_FRAME (XWINDOW (window)); #ifdef MULTI_FRAME if (! NILP (all_frames)) - tem = next_frame (tem, all_frames); + { + Lisp_Object tem1; + + tem1 = tem; + tem = next_frame (tem, all_frames); + /* In the case where the minibuffer is active, + and we include its frame as well as the selected one, + next_frame may get stuck in that frame. + If that happens, go back to the selected frame + so we can complete the cycle. */ + if (EQ (tem, tem1)) + XSET (tem, Lisp_Frame, selected_frame); + } #endif tem = FRAME_ROOT_WINDOW (XFRAME (tem)); @@ -1050,7 +1061,19 @@ paths through the set of acceptable windows. window_loop assumes that these `ring' requirement are met. */ - tem = prev_frame (tem, all_frames); + { + Lisp_Object tem1; + + tem1 = tem; + tem = prev_frame (tem, all_frames); + /* In the case where the minibuffer is active, + and we include its frame as well as the selected one, + next_frame may get stuck in that frame. + If that happens, go back to the selected frame + so we can complete the cycle. */ + if (EQ (tem, tem1)) + XSET (tem, Lisp_Frame, selected_frame); + } #endif /* If this frame has a minibuffer, find that window first, because it is conceptually the last window in that frame. */