emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/src ChangeLog frame.c frame.h terminal.c ...


From: Martin Rudalics
Subject: [Emacs-diffs] emacs/src ChangeLog frame.c frame.h terminal.c ...
Date: Mon, 22 Dec 2008 09:40:38 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Martin Rudalics <m061211>       08/12/22 09:40:37

Modified files:
        src            : ChangeLog frame.c frame.h terminal.c w32fns.c 
                         window.c xfns.c xterm.c 

Log message:
        * frame.c (delete_frame): New function derived from
        Fdelete_frame to handle Qnoelisp value for FORCE argument.
        Delete last frame iff FORCE equals Qnoelisp.  (Bug#1450)
        (Fdelete_frame): Call delete_frame.  Remove line from doc-string
        saying that FORCE non-nil doesn't run `delete-frame-functions'.
        * frame.h: Extern delete_frame.
        * window.c (window_loop):
        * terminal.c (delete_terminal):
        * xterm.c (x_connection_closed):
        * xfns.c (Fx_hide_tip):
        * w32fns.c (Fx_hide_tip): Call delete_frame instead of
        Fdelete_frame.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/ChangeLog?cvsroot=emacs&r1=1.7221&r2=1.7222
http://cvs.savannah.gnu.org/viewcvs/emacs/src/frame.c?cvsroot=emacs&r1=1.403&r2=1.404
http://cvs.savannah.gnu.org/viewcvs/emacs/src/frame.h?cvsroot=emacs&r1=1.145&r2=1.146
http://cvs.savannah.gnu.org/viewcvs/emacs/src/terminal.c?cvsroot=emacs&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/emacs/src/w32fns.c?cvsroot=emacs&r1=1.350&r2=1.351
http://cvs.savannah.gnu.org/viewcvs/emacs/src/window.c?cvsroot=emacs&r1=1.635&r2=1.636
http://cvs.savannah.gnu.org/viewcvs/emacs/src/xfns.c?cvsroot=emacs&r1=1.730&r2=1.731
http://cvs.savannah.gnu.org/viewcvs/emacs/src/xterm.c?cvsroot=emacs&r1=1.1018&r2=1.1019

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/emacs/emacs/src/ChangeLog,v
retrieving revision 1.7221
retrieving revision 1.7222
diff -u -b -r1.7221 -r1.7222
--- ChangeLog   21 Dec 2008 15:52:26 -0000      1.7221
+++ ChangeLog   22 Dec 2008 09:40:33 -0000      1.7222
@@ -1,3 +1,18 @@
+2008-12-22  Martin Rudalics  <address@hidden>
+
+       * frame.c (delete_frame): New function derived from
+       Fdelete_frame to handle Qnoelisp value for FORCE argument.
+       Delete last frame iff FORCE equals Qnoelisp.  (Bug#1450)
+       (Fdelete_frame): Call delete_frame.  Remove line from doc-string
+       saying that FORCE non-nil doesn't run `delete-frame-functions'.
+       * frame.h: Extern delete_frame.
+       * window.c (window_loop):
+       * terminal.c (delete_terminal):
+       * xterm.c (x_connection_closed):
+       * xfns.c (Fx_hide_tip):
+       * w32fns.c (Fx_hide_tip): Call delete_frame instead of
+       Fdelete_frame.
+
 2008-12-21  Jason Rumney  <address@hidden>
 
        * w32uniscribe.c (uniscribe_encode_char): Return FONT_INVALID_CHAR

Index: frame.c
===================================================================
RCS file: /sources/emacs/emacs/src/frame.c,v
retrieving revision 1.403
retrieving revision 1.404
diff -u -b -r1.403 -r1.404
--- frame.c     20 Dec 2008 20:51:23 -0000      1.403
+++ frame.c     22 Dec 2008 09:40:35 -0000      1.404
@@ -1322,20 +1322,13 @@
 
 extern Lisp_Object Qrun_hook_with_args;
 
-DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "",
-       doc: /* Delete FRAME, permanently eliminating it from use.
-If omitted, FRAME defaults to the selected frame.
-A frame may not be deleted if its minibuffer is used by other frames.
-Normally, you may not delete a frame if all other frames are invisible,
-but if the second optional argument FORCE is non-nil, you may do so.
-
-This function runs `delete-frame-functions' before actually deleting the
-frame, unless the frame is a tooltip.
-The functions are run with one arg, the frame to be deleted.
-But FORCE inhibits this too.  */)
-/* FORCE is non-nil when handling a disconnected terminal.  */
-     (frame, force)
-     Lisp_Object frame, force;
+/* Delete FRAME.  When FORCE equals Qnoelisp, delete FRAME
+  unconditionally.  x_connection_closed and delete_terminal use
+  this.  Any other value of FORCE implements the semantics
+  described for Fdelete_frame.  */
+Lisp_Object
+delete_frame (frame, force)
+     register Lisp_Object frame, force;
 {
   struct frame *f;
   struct frame *sf = SELECTED_FRAME ();
@@ -1360,12 +1353,10 @@
   if (NILP (force) && !other_visible_frames (f))
     error ("Attempt to delete the sole visible or iconified frame");
 
-#if 0
-  /* This is a nice idea, but x_connection_closed needs to be able
+  /* x_connection_closed must have set FORCE to `noelisp' in order
      to delete the last frame, if it is gone.  */
-  if (NILP (XCDR (Vframe_list)))
+  if (NILP (XCDR (Vframe_list)) && !EQ (force, Qnoelisp))
     error ("Attempt to delete the only frame");
-#endif
 
   /* Does this frame have a minibuffer, and is it the surrogate
      minibuffer for any other frame?  */
@@ -1385,19 +1376,20 @@
                     WINDOW_FRAME (XWINDOW
                                   (FRAME_MINIBUF_WINDOW (XFRAME (this))))))
            {
-             /* If we MUST delete this frame, delete the other first.  */
-             if (!NILP (force))
-               Fdelete_frame (this, force);
+             /* If we MUST delete this frame, delete the other first.
+                But do this only if FORCE equals `noelisp'.  */
+             if (EQ (force, Qnoelisp))
+               delete_frame (this, Qnoelisp);
              else
                error ("Attempt to delete a surrogate minibuffer frame");
            }
        }
     }
 
-  /* Run `delete-frame-functions'
-     unless FORCE is `noelisp' or frame is a tooltip.
-     FORCE is set to `noelisp' when handling a disconnect from the terminal,
-     so we don't dare call Lisp code.  */
+  /* Run `delete-frame-functions' unless FORCE is `noelisp' or
+     frame is a tooltip.  FORCE is set to `noelisp' when handling
+     a disconnect from the terminal, so we don't dare call Lisp
+     code.  */
   if (NILP (Vrun_hooks) || !NILP (Fframe_parameter (frame, intern 
("tooltip"))))
     ;
   if (EQ (force, Qnoelisp))
@@ -1642,6 +1634,24 @@
   return Qnil;
 }
 
+DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "",
+       doc: /* Delete FRAME, permanently eliminating it from use.
+FRAME defaults to the selected frame.
+
+A frame may not be deleted if its minibuffer is used by other frames.
+Normally, you may not delete a frame if all other frames are invisible,
+but if the second optional argument FORCE is non-nil, you may do so.
+
+This function runs `delete-frame-functions' before actually
+deleting the frame, unless the frame is a tooltip.
+The functions are run with one argument, the frame to be deleted.  */)
+     (frame, force)
+     Lisp_Object frame, force;
+{
+  return delete_frame (frame, !NILP (force) ? Qt : Qnil);
+}
+
+
 /* Return mouse position in character cell units.  */
 
 DEFUN ("mouse-position", Fmouse_position, Smouse_position, 0, 0, 0,

Index: frame.h
===================================================================
RCS file: /sources/emacs/emacs/src/frame.h,v
retrieving revision 1.145
retrieving revision 1.146
diff -u -b -r1.145 -r1.146
--- frame.h     12 Nov 2008 15:51:35 -0000      1.145
+++ frame.h     22 Dec 2008 09:40:35 -0000      1.146
@@ -1115,6 +1115,7 @@
                                           Lisp_Object component,
                                           Lisp_Object subclass);
 
+extern Lisp_Object delete_frame P_ ((Lisp_Object, Lisp_Object));
 
 #endif /* HAVE_WINDOW_SYSTEM */
 

Index: terminal.c
===================================================================
RCS file: /sources/emacs/emacs/src/terminal.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- terminal.c  31 Jul 2008 02:47:29 -0000      1.13
+++ terminal.c  22 Dec 2008 09:40:35 -0000      1.14
@@ -256,7 +256,7 @@
   struct terminal **tp;
   Lisp_Object tail, frame;
 
-  /* Protect against recursive calls.  Fdelete_frame calls the
+  /* Protect against recursive calls.  delete_frame calls the
      delete_terminal_hook when we delete our last frame.  */
   if (!terminal->name)
     return;
@@ -269,8 +269,8 @@
       struct frame *f = XFRAME (frame);
       if (FRAME_LIVE_P (f) && f->terminal == terminal)
         {
-         /* Maybe this should pass Qnoelisp rather than Qt?  */
-          Fdelete_frame (frame, Qt);
+         /* Pass Qnoelisp rather than Qt.  */
+          delete_frame (frame, Qnoelisp);
         }
     }
 

Index: w32fns.c
===================================================================
RCS file: /sources/emacs/emacs/src/w32fns.c,v
retrieving revision 1.350
retrieving revision 1.351
diff -u -b -r1.350 -r1.351
--- w32fns.c    12 Dec 2008 15:34:46 -0000      1.350
+++ w32fns.c    22 Dec 2008 09:40:35 -0000      1.351
@@ -5944,7 +5944,7 @@
 
   if (FRAMEP (frame))
     {
-      Fdelete_frame (frame, Qnil);
+      delete_frame (frame, Qnil);
       deleted = Qt;
     }
 

Index: window.c
===================================================================
RCS file: /sources/emacs/emacs/src/window.c,v
retrieving revision 1.635
retrieving revision 1.636
diff -u -b -r1.635 -r1.636
--- window.c    20 Nov 2008 10:13:06 -0000      1.635
+++ window.c    22 Dec 2008 09:40:36 -0000      1.636
@@ -2273,7 +2273,7 @@
                      windows = XCDR (windows);
 
                    /* Now we can safely delete the frame.  */
-                   Fdelete_frame (w->frame, Qnil);
+                   delete_frame (w->frame, Qnil);
                  }
                else if (NILP (w->parent))
                  {
@@ -2334,7 +2334,7 @@
                      windows = XCDR (windows);
 
                    /* Now we can safely delete the frame.  */
-                   Fdelete_frame (w->frame, Qnil);
+                   delete_frame (w->frame, Qnil);
                  }
                else if (!NILP (w->dedicated) && !NILP (w->parent))
                  {
@@ -6909,7 +6909,7 @@
      int (* fn) P_ ((struct window *, void *));
      void *user_data;
 {
-  /* Fdelete_frame may set FRAME_ROOT_WINDOW (f) to Qnil.  */
+  /* delete_frame may set FRAME_ROOT_WINDOW (f) to Qnil.  */
   if (WINDOWP (FRAME_ROOT_WINDOW (f)))
     foreach_window_1 (XWINDOW (FRAME_ROOT_WINDOW (f)), fn, user_data);
 }

Index: xfns.c
===================================================================
RCS file: /sources/emacs/emacs/src/xfns.c,v
retrieving revision 1.730
retrieving revision 1.731
diff -u -b -r1.730 -r1.731
--- xfns.c      13 Dec 2008 01:21:17 -0000      1.730
+++ xfns.c      22 Dec 2008 09:40:36 -0000      1.731
@@ -5248,7 +5248,7 @@
 
   if (FRAMEP (frame))
     {
-      Fdelete_frame (frame, Qnil);
+      delete_frame (frame, Qnil);
       deleted = Qt;
 
 #ifdef USE_LUCID

Index: xterm.c
===================================================================
RCS file: /sources/emacs/emacs/src/xterm.c,v
retrieving revision 1.1018
retrieving revision 1.1019
diff -u -b -r1.1018 -r1.1019
--- xterm.c     15 Dec 2008 01:57:54 -0000      1.1018
+++ xterm.c     22 Dec 2008 09:40:37 -0000      1.1019
@@ -7883,7 +7883,7 @@
          && FRAME_X_P (XFRAME (minibuf_frame))
          && ! EQ (frame, minibuf_frame)
          && FRAME_X_DISPLAY_INFO (XFRAME (minibuf_frame)) == dpyinfo)
-       Fdelete_frame (frame, Qnoelisp);
+       delete_frame (frame, Qnoelisp);
     }
 
   /* Now delete all remaining frames on the dead display.
@@ -7893,10 +7893,10 @@
     if (FRAME_X_P (XFRAME (frame))
        && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo)
       {
-       /* Set this to t so that Fdelete_frame won't get confused
+       /* Set this to t so that delete_frame won't get confused
           trying to find a replacement.  */
        FRAME_KBOARD (XFRAME (frame))->Vdefault_minibuffer_frame = Qt;
-       Fdelete_frame (frame, Qnoelisp);
+       delete_frame (frame, Qnoelisp);
       }
 
   /* We have to close the display to inform Xt that it doesn't
@@ -10622,7 +10622,7 @@
   struct x_display_info *dpyinfo = terminal->display_info.x;
   int i;
 
-  /* Protect against recursive calls.  Fdelete_frame in
+  /* Protect against recursive calls.  delete_frame in
      delete_terminal calls us back when it deletes our last frame.  */
   if (!terminal->name)
     return;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]