]> git.eshelyaron.com Git - emacs.git/commitdiff
Make delete_all_subwindows argument a Lisp_Object.
authorMartin Rudalics <rudalics@gmx.at>
Tue, 7 Jun 2011 12:51:07 +0000 (14:51 +0200)
committerMartin Rudalics <rudalics@gmx.at>
Tue, 7 Jun 2011 12:51:07 +0000 (14:51 +0200)
* window.c (delete_window, Fset_window_configuration): Call
delete_all_subwindows with window as argument.
(delete_all_subwindows): Take a window as argument and not a
structure.  Rewrite.

* window.h: delete_all_subwindows now takes a Lisp_Object as
argument.

* frame.c (delete_frame): Call delete_all_subwindows with root
window as argument.

src/ChangeLog
src/frame.c
src/window.c
src/window.h

index 5e51d8c6a7666ad9f46e7ff0481afc61d1f330e6..c7bcdec051224f93781e21a20fa1f92528b3878b 100644 (file)
@@ -6,13 +6,21 @@
        (window_box_text_cols): Replace with window_body_cols.
        (Fwindow_width, Fscroll_left, Fscroll_right): Use
        window_body_cols instead of window_box_text_cols.
+       (delete_window, Fset_window_configuration): Call
+       delete_all_subwindows with window as argument.
+       (delete_all_subwindows): Take a window as argument and not a
+       structure.  Rewrite.
 
        * window.h: Extern window_body_cols instead of
-       window_box_text_cols.
+       window_box_text_cols.  delete_all_subwindows now takes a
+       Lisp_Object as argument.
 
        * indent.c (compute_motion, Fcompute_motion): Use
        window_body_cols instead of window_box_text_cols.
 
+       * frame.c (delete_frame): Call delete_all_subwindows with root
+       window as argument.
+
 2011-06-07  Daniel Colascione  <dan.colascione@gmail.com>
 
        * fns.c (Fputhash): Document return value.
index 68984a68d52d6a1437c5015d9a7c67c04fde8848..71881265b44c376761fb76b12210c99db8511fa8 100644 (file)
@@ -1336,7 +1336,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
 
   /* Mark all the windows that used to be on FRAME as deleted, and then
      remove the reference to them.  */
-  delete_all_subwindows (XWINDOW (f->root_window));
+  delete_all_subwindows (f->root_window);
   f->root_window = Qnil;
 
   Vframe_list = Fdelq (frame, Vframe_list);
index 43635fe5a6bb06e42065c40a3f6494af0c6a64aa..ee62f57ee071a59bce415c0f46d25dfcf3061cea 100644 (file)
@@ -2001,9 +2001,9 @@ delete_window (register Lisp_Object window)
   /* Since we may be deleting combination windows, we must make sure that
      not only p but all its children have been marked as deleted.  */
   if (! NILP (p->hchild))
-    delete_all_subwindows (XWINDOW (p->hchild));
+    delete_all_subwindows (p->hchild);
   else if (! NILP (p->vchild))
-    delete_all_subwindows (XWINDOW (p->vchild));
+    delete_all_subwindows (p->vchild);
 
   /* Mark this window as deleted.  */
   p->buffer = p->hchild = p->vchild = Qnil;
@@ -6260,7 +6260,7 @@ the return value is nil.  Otherwise the value is t.  */)
         Save their current buffers in their height fields, since we may
         need it later, if a buffer saved in the configuration is now
         dead.  */
-      delete_all_subwindows (XWINDOW (FRAME_ROOT_WINDOW (f)));
+      delete_all_subwindows (FRAME_ROOT_WINDOW (f));
 
       for (k = 0; k < saved_windows->header.size; k++)
        {
@@ -6448,31 +6448,38 @@ the return value is nil.  Otherwise the value is t.  */)
   return (FRAME_LIVE_P (f) ? Qt : Qnil);
 }
 
-/* Mark all windows now on frame as deleted
-   by setting their buffers to nil.  */
-
+/* Delete all subwindows reachable via the next, vchild, and hchild
+   slots of WINDOW.  */
 void
-delete_all_subwindows (register struct window *w)
+delete_all_subwindows (Lisp_Object window)
 {
+  register struct window *w;
+
+  w = XWINDOW (window);
+
   if (!NILP (w->next))
-    delete_all_subwindows (XWINDOW (w->next));
-  if (!NILP (w->vchild))
-    delete_all_subwindows (XWINDOW (w->vchild));
-  if (!NILP (w->hchild))
-    delete_all_subwindows (XWINDOW (w->hchild));
+    /* Delete WINDOW's siblings (we traverse postorderly).  */
+    delete_all_subwindows (w->next);
 
   w->total_lines = w->buffer;       /* See Fset_window_configuration for excuse.  */
 
-  if (!NILP (w->buffer))
-    unshow_buffer (w);
-
-  /* We set all three of these fields to nil, to make sure that we can
-     distinguish this dead window from any live window.  Live leaf
-     windows will have buffer set, and combination windows will have
-     vchild or hchild set.  */
-  w->buffer = Qnil;
-  w->vchild = Qnil;
-  w->hchild = Qnil;
+  if (!NILP (w->vchild))
+    {
+      delete_all_subwindows (w->vchild);
+      w->vchild = Qnil;
+    }
+  else if (!NILP (w->hchild))
+    {
+      delete_all_subwindows (w->hchild);
+      w->hchild = Qnil;
+    }
+  else if (!NILP (w->buffer))
+    {
+      unshow_buffer (w);
+      unchain_marker (XMARKER (w->pointm));
+      unchain_marker (XMARKER (w->start));
+      w->buffer = Qnil;
+    }
 
   Vwindow_list = Qnil;
 }
index 7f937e922845d56a2e8a71689c25e76f08b4f23b..37d22bd7a76a4930aea3301d0f7ebf7208d6a744 100644 (file)
@@ -770,7 +770,7 @@ EXFUN (Fwindow_dedicated_p, 1);
 extern void set_window_height (Lisp_Object, int, int);
 extern void set_window_width (Lisp_Object, int, int);
 extern void change_window_heights (Lisp_Object, int);
-extern void delete_all_subwindows (struct window *);
+extern void delete_all_subwindows (Lisp_Object);
 extern void freeze_window_starts (struct frame *, int);
 extern void grow_mini_window (struct window *, int);
 extern void shrink_mini_window (struct window *);