Mercurial > emacs
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))