aboutsummaryrefslogtreecommitdiffstats
path: root/src/window.c
diff options
context:
space:
mode:
authorRichard M. Stallman1993-06-14 07:07:05 +0000
committerRichard M. Stallman1993-06-14 07:07:05 +0000
commit0def0403ca727619f461d20d9cb78becab70c8ac (patch)
tree056a9643163b042fdadb28671006a7f3b34c8d50 /src/window.c
parent087f61c885f07dc9a337e96c6d22a4d3dc46bb9b (diff)
downloademacs-0def0403ca727619f461d20d9cb78becab70c8ac.tar.gz
emacs-0def0403ca727619f461d20d9cb78becab70c8ac.zip
(Fdelete_window): Handle deleting a parent of the selected window.
(Fdelete_window): Mostly undo last change which made `frame' a FRAME_PTR. Don't initialize `frame' in the declaration.
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/window.c b/src/window.c
index e50a9bc7be5..d3baca1d8a2 100644
--- a/src/window.c
+++ b/src/window.c
@@ -700,9 +700,22 @@ DEFUN ("delete-window", Fdelete_window, Sdelete_window, 0, 1, "",
700 700
701 /* Are we trying to delete any frame's selected window? */ 701 /* Are we trying to delete any frame's selected window? */
702 { 702 {
703 FRAME_PTR frame = WINDOW_FRAME (XWINDOW (window)); 703 Lisp_Object frame, pwindow;
704 704
705 if (EQ (window, FRAME_SELECTED_WINDOW (frame))) 705 /* See if the frame's selected window is either WINDOW
706 or any subwindow of it, by finding all that window's parents
707 and comparing each one with WINDOW. */
708 frame = WINDOW_FRAME (XWINDOW (window));
709 pwindow = FRAME_SELECTED_WINDOW (XFRAME (frame));
710
711 while (!NILP (pwindow))
712 {
713 if (EQ (window, pwindow))
714 break;
715 pwindow = XWINDOW (pwindow)->parent;
716 }
717
718 if (EQ (window, pwindow))
706 { 719 {
707 Lisp_Object alternative = Fnext_window (window, Qlambda, Qnil); 720 Lisp_Object alternative = Fnext_window (window, Qlambda, Qnil);
708 721
@@ -714,7 +727,7 @@ DEFUN ("delete-window", Fdelete_window, Sdelete_window, 0, 1, "",
714 if (EQ (window, selected_window)) 727 if (EQ (window, selected_window))
715 Fselect_window (alternative); 728 Fselect_window (alternative);
716 else 729 else
717 FRAME_SELECTED_WINDOW (frame) = alternative; 730 FRAME_SELECTED_WINDOW (XFRAME (frame)) = alternative;
718 } 731 }
719 } 732 }
720 733