(tcl-type-alist): Include entry for "proc".
[bpt/emacs.git] / src / frame.c
index b95f8a0..40bf808 100644 (file)
@@ -39,7 +39,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 Lisp_Object Vemacs_iconified;
 Lisp_Object Vframe_list;
 Lisp_Object Vterminal_frame;
-Lisp_Object Vdefault_minibuffer_frame;
 Lisp_Object Vdefault_frame_alist;
 
 /* Evaluate this expression to rebuild the section of syms_of_frame
@@ -256,25 +255,31 @@ make_frame (mini_p)
    default (the global minibuffer).  */
 
 struct frame *
-make_frame_without_minibuffer (mini_window)
+make_frame_without_minibuffer (mini_window, kb)
      register Lisp_Object mini_window;
+     KBOARD *kb;
 {
   register struct frame *f;
 
   /* Choose the minibuffer window to use.  */
   if (NILP (mini_window))
     {
-      if (!FRAMEP (Vdefault_minibuffer_frame))
+      if (!FRAMEP (kb->Vdefault_minibuffer_frame))
        error ("default-minibuffer-frame must be set when creating minibufferless frames");
-      if (! FRAME_LIVE_P (XFRAME (Vdefault_minibuffer_frame)))
+      if (! FRAME_LIVE_P (XFRAME (kb->Vdefault_minibuffer_frame)))
        error ("default-minibuffer-frame must be a live frame");
-      mini_window = XFRAME (Vdefault_minibuffer_frame)->minibuffer_window;
+      mini_window = XFRAME (kb->Vdefault_minibuffer_frame)->minibuffer_window;
     }
   else
     {
       CHECK_LIVE_WINDOW (mini_window, 0);
     }
 
+#ifdef MULTI_KBOARD
+  if (XFRAME (XWINDOW (mini_window)->frame)->kboard != kb)
+    error ("frame and minibuffer must be on the same display");
+#endif
+
   /* Make a frame containing just a root window.  */
   f = make_frame (0);
 
@@ -369,7 +374,6 @@ make_terminal_frame ()
   f->visible = 1;              /* FRAME_SET_VISIBLE wd set frame_garbaged. */
   f->async_visible = 1;                /* Don't let visible be cleared later. */
   f->display.nothing = 1;      /* Nonzero means frame isn't deleted.  */
-  XSETFRAME (Vterminal_frame, f);
   return f;
 }
 
@@ -451,11 +455,11 @@ do_switch_frame (frame, no_enter, track)
 #else /* ! 0 */
   /* Instead, apply it only to the frame we're pointing to.  */
 #ifdef HAVE_X_WINDOWS
-  if (track)
+  if (track && FRAME_X_P (XFRAME (frame)))
     {
       Lisp_Object focus, xfocus;
 
-      xfocus = x_get_focus_frame ();
+      xfocus = x_get_focus_frame (XFRAME (frame));
       if (FRAMEP (xfocus))
        {
          focus = FRAME_FOCUS_FRAME (XFRAME (xfocus));
@@ -472,6 +476,7 @@ do_switch_frame (frame, no_enter, track)
         switching means we must redisplay the whole thing.  */
       windows_or_buffers_changed++;
       SET_FRAME_GARBAGED (XFRAME (frame));
+      XSETFRAME (Vterminal_frame, frame);
     }
 
   selected_frame = XFRAME (frame);
@@ -1012,7 +1017,7 @@ but if the second optional argument FORCE is non-nil, you may do so.")
   /* If we've deleted Vdefault_minibuffer_frame, try to find another
      one.  Prefer minibuffer-only frames, but also notice frames
      with other windows.  */
-  if (EQ (frame, Vdefault_minibuffer_frame))
+  if (EQ (frame, FRAME_KBOARD (f)->Vdefault_minibuffer_frame))
     {
       Lisp_Object frames;
 
@@ -1048,7 +1053,7 @@ but if the second optional argument FORCE is non-nil, you may do so.")
       if (NILP (frame_with_minibuf))
        abort ();
 
-      Vdefault_minibuffer_frame = frame_with_minibuf;
+      FRAME_KBOARD (f)->Vdefault_minibuffer_frame = frame_with_minibuf;
     }
 
   return Qnil;
@@ -1321,7 +1326,7 @@ DEFUN ("visible-frame-list", Fvisible_frame_list, Svisible_frame_list,
 }
 
 
-DEFUN ("raise-frame", Fraise_frame, Sraise_frame, 1, 1, "",
+DEFUN ("raise-frame", Fraise_frame, Sraise_frame, 0, 1, "",
   "Bring FRAME to the front, so it occludes any frames it overlaps.\n\
 If FRAME is invisible, make it visible.\n\
 If you don't specify a frame, the selected frame is used.\n\
@@ -1345,7 +1350,7 @@ doesn't support multiple overlapping frames, this function does nothing.")
 }
 
 /* Should we have a corresponding function called Flower_Power?  */
-DEFUN ("lower-frame", Flower_frame, Slower_frame, 1, 1, "",
+DEFUN ("lower-frame", Flower_frame, Slower_frame, 0, 1, "",
   "Send FRAME to the back, so it is occluded by any frames that overlap it.\n\
 If you don't specify a frame, the selected frame is used.\n\
 If Emacs is displaying on an ordinary terminal or some other device which\n\
@@ -1411,7 +1416,7 @@ The redirection lasts until `redirect-frame-focus' is called to change it.")
 #endif
 
   if (frame_rehighlight_hook)
-    (*frame_rehighlight_hook) ();
+    (*frame_rehighlight_hook) (XFRAME (frame));
   
   return Qnil;
 }
@@ -1868,7 +1873,7 @@ syms_of_frame ()
     "Non-nil if all of emacs is iconified and frame updates are not needed.");
   Vemacs_iconified = Qnil;
 
-  DEFVAR_LISP ("default-minibuffer-frame", &Vdefault_minibuffer_frame,
+  DEFVAR_KBOARD ("default-minibuffer-frame", Vdefault_minibuffer_frame,
     "Minibufferless frames use this frame's minibuffer.\n\
 \n\
 Emacs cannot create minibufferless frames unless this is set to an\n\
@@ -1880,7 +1885,6 @@ 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.");
-  Vdefault_minibuffer_frame = Qnil;
 
   DEFVAR_LISP ("default-frame-alist", &Vdefault_frame_alist,
     "Alist of default values for frame creation.\n\