diff options
author | Richard M. Stallman <[email protected]> | 1993-06-03 05:56:44 +0000 |
---|---|---|
committer | Richard M. Stallman <[email protected]> | 1993-06-03 05:56:44 +0000 |
commit | f5e70acdd4d08692fa00de78d6e85380da4db595 (patch) | |
tree | 1919ba6063521bfa9815d1fb8d954d6ce291f9f1 | |
parent | ebc9936d6a4d80fe69ad492c9b0a8cf654f41afc (diff) |
(x_set_frame_parameters): Process all parms in reverse order.
-rw-r--r-- | src/xfns.c | 51 |
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)) |