changeset 3447:ed2a17aac4cd

(x_set_frame_parameters): Process all parms in reverse order.
author Richard M. Stallman <rms@gnu.org>
date Thu, 03 Jun 1993 05:56:44 +0000
parents 74c145e499ab
children b7d345eaae47
files src/xfns.c
diffstat 1 files changed, 37 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/xfns.c	Thu Jun 03 05:55:55 1993 +0000
+++ b/src/xfns.c	Thu Jun 03 05:56:44 1993 +0000
@@ -332,26 +332,51 @@
   /* Same here.  */
   Lisp_Object left, top;
 
-  width = height = top = left = Qnil;
-
+  /* Record in these vectors all the parms specified.  */
+  Lisp_Object *parms;
+  Lisp_Object *values;
+  int i;
+  
+  i = 0;
+  for (tail = alist; CONSP (tail); tail = Fcdr (tail))
+    i++;
+
+  parms = (Lisp_Object *) alloca (i * sizeof (Lisp_Object));
+  values = (Lisp_Object *) alloca (i * sizeof (Lisp_Object));
+
+  /* Extract parm names and values into those vectors.  */
+
+  i = 0;
   for (tail = alist; CONSP (tail); tail = Fcdr (tail))
     {
       Lisp_Object elt, prop, val;
 
       elt = Fcar (tail);
-      prop = Fcar (elt);
-      val = Fcdr (elt);
-
-      /* Ignore all but the first set presented.  You're supposed to
-	 be able to append two parameter lists and have the first
-	 shadow the second.  */
-      if (EQ (prop, Qwidth) && NILP (width))
+      parms[i] = Fcar (elt);
+      values[i] = Fcdr (elt);
+      i++;
+    }
+
+  XSET (width,  Lisp_Int, FRAME_WIDTH  (f));
+  XSET (height, Lisp_Int, FRAME_HEIGHT (f));
+  XSET (top, Lisp_Int, f->display.x->top_pos);
+  XSET (left, Lisp_Int, f->display.x->left_pos);
+
+  /* Now process them in reverse of specified order.  */
+  for (i--; i >= 0; i--)
+    {
+      Lisp_Object prop, val;
+
+      prop = parms[i];
+      val = values[i];
+
+      if (EQ (prop, Qwidth))
 	width = val;
-      else if (EQ (prop, Qheight) && NILP (height))
+      else if (EQ (prop, Qheight))
 	height = val;
-      else if (EQ (prop, Qtop) && NILP (top))
+      else if (EQ (prop, Qtop))
 	top = val;
-      else if (EQ (prop, Qleft) && NILP (left))
+      else if (EQ (prop, Qleft))
 	left = val;
       else
 	{
@@ -372,12 +397,6 @@
   {
     Lisp_Object frame;
 
-    if (NILP (width))  XSET (width,  Lisp_Int, FRAME_WIDTH  (f));
-    if (NILP (height)) XSET (height, Lisp_Int, FRAME_HEIGHT (f));
-
-    if (NILP (top))    XSET (top, Lisp_Int, f->display.x->top_pos);
-    if (NILP (left))   XSET (left, Lisp_Int, f->display.x->left_pos);
-
     XSET (frame, Lisp_Frame, f);
     if (XINT (width) != FRAME_WIDTH (f)
 	|| XINT (height) != FRAME_HEIGHT (f))