]> code.delx.au - gnu-emacs/blobdiff - src/frame.c
(MINI_WINDOW_P): Use NILP.
[gnu-emacs] / src / frame.c
index 44f14187305f55c1a9c97a94bc37c577c8ab18bb..3fb507b7752e56179e6cead5be1e7d3e2e2805ff 100644 (file)
@@ -545,11 +545,25 @@ Note that changing the size of one terminal frame automatically affects all.")
     XCDR (XCAR (tem)) = Fcopy_sequence (XCDR (XCAR (tem)));
   return frame;
 }
+
 \f
+/* Perform the switch to frame FRAME.
+
+   If FRAME is a switch-frame event `(switch-frame FRAME1)', use
+   FRAME1 as frame.
+
+   If TRACK is non-zero and the frame that currently has the focus
+   redirects its focus to the selected frame, redirect that focused
+   frame's focus to FRAME instead.
+
+   FOR_DELETION non-zero means that the selected frame is being
+   deleted, which includes the possibility that the frame's display
+   is dead.  */
+
 Lisp_Object
-do_switch_frame (frame, no_enter, track)
-     Lisp_Object frame, no_enter;
-     int track;
+do_switch_frame (frame, track, for_deletion)
+     Lisp_Object frame;
+     int track, for_deletion;
 {
   struct frame *sf = SELECTED_FRAME ();
   
@@ -600,7 +614,7 @@ do_switch_frame (frame, no_enter, track)
 #else /* ! 0 */
   /* Instead, apply it only to the frame we're pointing to.  */
 #ifdef HAVE_WINDOW_SYSTEM
-  if (track && (FRAME_WINDOW_P (XFRAME (frame))))
+  if (track && FRAME_WINDOW_P (XFRAME (frame)))
     {
       Lisp_Object focus, xfocus;
 
@@ -615,7 +629,7 @@ do_switch_frame (frame, no_enter, track)
 #endif /* HAVE_X_WINDOWS */
 #endif /* ! 0 */
 
-  if (FRAME_HAS_MINIBUF_P (sf))
+  if (!for_deletion && FRAME_HAS_MINIBUF_P (sf))
     resize_mini_window (XWINDOW (FRAME_MINIBUF_WINDOW (sf)), 1);
 
   selected_frame = frame;
@@ -644,7 +658,7 @@ function is called.")
   (frame, no_enter)
     Lisp_Object frame, no_enter;
 {
-  return do_switch_frame (frame, no_enter, 1);
+  return do_switch_frame (frame, 1, 0);
 }
 
 
@@ -663,7 +677,7 @@ to that frame.")
   /* Preserve prefix arg that the command loop just cleared.  */
   current_kboard->Vprefix_arg = Vcurrent_prefix_arg;
   call1 (Vrun_hooks, Qmouse_leave_buffer_hook);
-  return do_switch_frame (event, no_enter, 0);
+  return do_switch_frame (event, 0, 0);
 }
 
 DEFUN ("ignore-event", Fignore_event, Signore_event, 0, 0, "",
@@ -793,7 +807,13 @@ DEFUN ("frame-list", Fframe_list, Sframe_list,
        "Return a list of all frames.")
   ()
 {
-  return Fcopy_sequence (Vframe_list);
+  Lisp_Object frames;
+  frames = Fcopy_sequence (Vframe_list);
+#ifdef HAVE_WINDOW_SYSTEM
+  if (FRAMEP (tip_frame))
+    frames = Fdelq (tip_frame, frames);
+#endif
+  return frames;
 }
 
 /* Return the next frame in the frame list after FRAME.
@@ -1135,7 +1155,7 @@ frame.  The hook is called with one argument FRAME.")
            }
        }
 
-      do_switch_frame (frame1, Qnil, 0);
+      do_switch_frame (frame1, 0, 1);
       sf = SELECTED_FRAME ();
     }
 
@@ -1298,8 +1318,9 @@ upper-left corner.\n\
 If Emacs is running on a mouseless terminal or hasn't been programmed\n\
 to read the mouse position, it returns the selected frame for FRAME\n\
 and nil for X and Y.\n\
-Runs the abnormal hook `mouse-position-function' with the normal return\n\
-value as argument.")
+If `mouse-position-function' is non-nil, `mouse-position' calls it,\n\
+passing the normal return value to that function as an argument,\n\
+and returns whatever that function returns.")
   ()
 {
   FRAME_PTR f;
@@ -1509,7 +1530,7 @@ but if the second optional argument FORCE is non-nil, you may do so.")
 #if 0 /* This isn't logically necessary, and it can do GC.  */
   /* Don't let the frame remain selected.  */
   if (EQ (frame, selected_frame))
-    do_switch_frame (next_frame (frame, Qt), Qnil, 0)
+    do_switch_frame (next_frame (frame, Qt), 0, 0)
 #endif
 
   /* Don't allow minibuf_window to remain on a deleted frame.  */
@@ -1894,7 +1915,7 @@ store_frame_param (f, prop, val)
   if (SYMBOLP (prop))
     {
       Lisp_Object valcontents;
-      valcontents = XSYMBOL (prop)->value;
+      valcontents = SYMBOL_VALUE (prop);
       if ((BUFFER_LOCAL_VALUEP (valcontents)
           || SOME_BUFFER_LOCAL_VALUEP (valcontents))
          && XBUFFER_LOCAL_VALUE (valcontents)->check_frame
@@ -2469,8 +2490,10 @@ The `menu-bar-lines' element of the list controls whether new frames\n\
   Vemacs_iconified = Qnil;
 
   DEFVAR_LISP ("mouse-position-function", &Vmouse_position_function,
-    "If non-nil, function applied to the normal result of `mouse-position'.\n\
-This abnormal hook exists for the benefit of packages like XTerm-mouse\n\
+    "If non-nil, function to transform normal value of `mouse-position'.\n\
+`mouse-position' calls this function, passing its usual return value as\n\
+argument, and returns whatever this function returns.\n\
+This abnormal hook exists for the benefit of packages like `xt-mouse.el'\n\
 which need to do mouse handling at the Lisp level.");
   Vmouse_position_function = Qnil;
 
@@ -2485,7 +2508,9 @@ frames; once the frame is created, it sticks with its assigned\n\
 minibuffer, no matter what this variable is set to.  This means that\n\
 this variable doesn't necessarily say anything meaningful about the\n\
 current set of frames, or where the minibuffer is currently being\n\
-displayed.");
+displayed.\n\
+\n\
+This variable is local to the current terminal and cannot be buffer-local.");
 
   staticpro (&Vframe_list);