aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1993-06-03 05:56:44 +0000
committerRichard M. Stallman <[email protected]>1993-06-03 05:56:44 +0000
commitf5e70acdd4d08692fa00de78d6e85380da4db595 (patch)
tree1919ba6063521bfa9815d1fb8d954d6ce291f9f1
parentebc9936d6a4d80fe69ad492c9b0a8cf654f41afc (diff)
(x_set_frame_parameters): Process all parms in reverse order.
-rw-r--r--src/xfns.c51
1 files changed, 35 insertions, 16 deletions
diff --git a/src/xfns.c b/src/xfns.c
index f2d12df3e0..d83c5958c2 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -332,26 +332,51 @@ x_set_frame_parameters (f, alist)
/* 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);
+ parms[i] = Fcar (elt);
+ values[i] = Fcdr (elt);
+ i++;
+ }
- /* 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))
+ 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 @@ x_set_frame_parameters (f, alist)
{
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))