changeset 539:b99d4eb7ed93

*** empty log message ***
author Jim Blandy <jimb@redhat.com>
date Thu, 06 Feb 1992 02:09:14 +0000
parents c3e1fe268e78
children 0840eff2ecd5
files lisp/frame.el src/frame.c
diffstat 2 files changed, 38 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/frame.el	Thu Feb 06 01:02:59 1992 +0000
+++ b/lisp/frame.el	Thu Feb 06 02:09:14 1992 +0000
@@ -157,7 +157,14 @@
 				  t)))
 
 (defun new-screen (&optional parameters)
-  "Create a new screen, displaying the current buffer."
+  "Create a new screen, displaying the current buffer.
+
+Optional argument PARAMETERS is an association-list of parameters
+describing the screen to create.  Specifically, PARAMETERS is a list
+of elements of the form (NAME . VALUE), where NAME is a symbol from
+the following list:
+  name		VALUE is the name to give
+"
   (interactive)
   (funcall screen-creation-function parameters))
 
@@ -241,6 +248,5 @@
 (define-prefix-command 'ctl-x-3-map)
 (define-key ctl-x-map "3" 'ctl-x-3-map)
 
-(define-key global-map "\C-z" 'iconify)
 (define-key ctl-x-3-map "2" 'new-screen)
 (define-key ctl-x-3-map "0" 'delete-screen)
--- a/src/frame.c	Thu Feb 06 01:02:59 1992 +0000
+++ b/src/frame.c	Thu Feb 06 02:09:14 1992 +0000
@@ -32,6 +32,7 @@
 Lisp_Object Vterminal_screen;
 Lisp_Object Vdefault_minibuffer_screen;
 Lisp_Object Vdefault_screen_alist;
+Lisp_Object Qminibuffer;
 
 /* A screen which is not just a minibuffer, or 0 if there are no
    such screens.  This is usually the most recent such screen that
@@ -288,7 +289,7 @@
 
 #ifdef HAVE_X_WINDOWS
 #ifdef MULTI_SCREEN
-  if (XSCREEN (screen)->output_method == output_x_window
+  if (SCREEN_IS_X (XSCREEN (screen))
       && NILP (no_enter))
     {
       Ffocus_screen (screen);
@@ -521,7 +522,7 @@
   s->display.nothing = 0;
 
 #ifdef HAVE_X_WINDOWS
-  if (s->output_method == output_x_window)
+  if (SCREEN_IS_X (s))
     x_destroy_window (s, displ);
 #endif
 
@@ -580,7 +581,7 @@
   CHECK_NUMBER (y, 1);
 
 #ifdef HAVE_X_WINDOWS
-  if (XSCREEN (screen)->output_method == output_x_window)
+  if (SCREEN_IS_X (XSCREEN (screen)))
     /* Warping the mouse will cause  enternotify and focus events. */
     x_set_mouse_position (XSCREEN (screen), x, y);
 #endif
@@ -651,7 +652,7 @@
 {
   CHECK_LIVE_SCREEN (screen, 0);
 
-  if (XSCREEN (screen)->output_method == output_x_window)
+  if (SCREEN_IS_X (XSCREEN (screen)))
     x_make_screen_visible (XSCREEN (screen));
 
   return screen;
@@ -665,7 +666,7 @@
 {
   CHECK_LIVE_SCREEN (screen, 0);
 
-  if (XSCREEN (screen)->output_method == output_x_window)
+  if (SCREEN_IS_X (XSCREEN (screen)))
     x_make_screen_invisible (XSCREEN (screen));
 
   return Qnil;
@@ -679,7 +680,7 @@
 {
   CHECK_LIVE_SCREEN (screen, 0);
 
-  if (XSCREEN (screen)->output_method == output_x_window)
+  if (SCREEN_IS_X (XSCREEN (screen)))
       x_iconify_screen (XSCREEN (screen));
 
   return Qnil;
@@ -693,7 +694,7 @@
 {
   CHECK_LIVE_SCREEN (screen, 0);
 
-  if (XSCREEN (screen)->output_method == output_x_window)
+  if (SCREEN_IS_X (XSCREEN (screen)))
       x_make_screen_visible (XSCREEN (screen));
 
   return screen;
@@ -827,6 +828,19 @@
     s->param_alist = Fcons (Fcons (prop, val), s->param_alist);
   else
     Fsetcdr (tem, val);
+
+  if (EQ (prop, Qminibuffer)
+      && XTYPE (val) == Lisp_Window)
+    {
+      if (! MINI_WINDOW_P (XWINDOW (val)))
+	error ("Surrogate minibuffer windows must be minibuffer windows.");
+
+      if (SCREEN_HAS_MINIBUF (s) || SCREEN_MINIBUF_ONLY_P (s))
+	error ("Can't change surrogate minibuffer on screens with their own minibuffers.");
+
+      /* Install the chosen minibuffer window, with proper buffer.  */
+      s->minibuffer_window = val;
+    }
 }
 
 DEFUN ("screen-parameters", Fscreen_parameters, Sscreen_parameters, 0, 1, 0,
@@ -858,10 +872,10 @@
   store_in_alist (&alist, "minibuffer",
 		  (SCREEN_HAS_MINIBUF (s)
 		   ? (SCREEN_MINIBUF_ONLY_P (s) ? intern ("only") : Qt)
-		   : Qnil));
+		   : SCREEN_MINIBUF_WINDOW (s)));
   store_in_alist (&alist, "unsplittable", (s->no_split ? Qt : Qnil));
 
-  if (s->output_method == output_x_window)
+  if (SCREEN_IS_X (s))
     x_report_screen_params (s, &alist);
   return alist;
 }
@@ -886,7 +900,7 @@
       s = XSCREEN (screen);
     }
 
-  if (s->output_method == output_x_window)
+  if (SCREEN_IS_X (s))
     for (tail = alist; !EQ (tail, Qnil); tail = Fcdr (tail))
       {
 	elt = Fcar (tail);
@@ -949,7 +963,7 @@
       s = XSCREEN (screen);
     }
 
-  if (s->output_method == output_x_window)
+  if (SCREEN_IS_X (s))
     {
       if (XINT (rows) != s->width)
 	x_set_window_size (s, s->width, XINT (rows));
@@ -976,7 +990,7 @@
       s = XSCREEN (screen);
     }
 
-  if (s->output_method == output_x_window)
+  if (SCREEN_IS_X (s))
     {
       if (XINT (cols) != s->width)
 	x_set_window_size (s, XINT (cols), s->height);
@@ -999,7 +1013,7 @@
   CHECK_NUMBER (rows, 1);
   s = XSCREEN (screen);
 
-  if (s->output_method == output_x_window)
+  if (SCREEN_IS_X (s))
     {
       if (XINT (rows) != s->height || XINT (cols) != s->width)
 	x_set_window_size (s, XINT (cols), XINT (rows));
@@ -1027,7 +1041,7 @@
   CHECK_NUMBER (yoffset, 2);
   s = XSCREEN (screen);
 
-  if (s->output_method == output_x_window)
+  if (SCREEN_IS_X (s))
     x_set_offset (s, XINT (xoffset), XINT (yoffset));
 
   return Qt;
@@ -1092,9 +1106,11 @@
 {
   Qscreenp = intern ("screenp");
   Qlive_screen_p = intern ("live_screen_p");
+  Qminibuffer = intern ("minibuffer");
 
   staticpro (&Qscreenp);
   staticpro (&Qlive_screen_p);
+  staticpro (&Qminibuffer);
 
   staticpro (&Vscreen_list);