# HG changeset patch # User Richard M. Stallman # Date 739087004 0 # Node ID ed2a17aac4cd846224c3b348e2092ee472a6c9f7 # Parent 74c145e499ab8abc90b2a61f39b6b5089dafe4c7 (x_set_frame_parameters): Process all parms in reverse order. diff -r 74c145e499ab -r ed2a17aac4cd src/xfns.c --- 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))