# HG changeset patch # User Gerd Moellmann # Date 960902476 0 # Node ID 8d7a0f575a0ee2069244c6b9287f116171a2523a # Parent 2a0aee2ed953576abbb286c683f1456fdd103efe (Fmodify_frame_parameters): Doc fix. (store_frame_param): Call swap_in_global_binding if the variable's current binding was chosen based on this frame. diff -r 2a0aee2ed953 -r 8d7a0f575a0e src/frame.c --- a/src/frame.c Tue Jun 13 13:16:43 2000 +0000 +++ b/src/frame.c Tue Jun 13 13:21:16 2000 +0000 @@ -1956,20 +1956,41 @@ struct frame *f; Lisp_Object prop, val; { - register Lisp_Object tem; + register Lisp_Object old_alist_elt; + /* The buffer-alist parameter is stored in a special place and is + not in the alist. */ if (EQ (prop, Qbuffer_list)) { f->buffer_list = val; return; } - tem = Fassq (prop, f->param_alist); - if (EQ (tem, Qnil)) + /* If PROP is a symbol which is supposed to have frame-local values, + and it is set up based on this frame, switch to the global + binding. That way, we can create or alter the frame-local binding + without messing up the symbol's status. */ + if (SYMBOLP (prop)) + { + Lisp_Object valcontents; + valcontents = XSYMBOL (prop)->value; + if ((BUFFER_LOCAL_VALUEP (valcontents) + || SOME_BUFFER_LOCAL_VALUEP (valcontents)) + && XBUFFER_LOCAL_VALUE (valcontents)->check_frame + && XFRAME (XBUFFER_LOCAL_VALUE (valcontents)->frame) == f) + swap_in_global_binding (prop); + } + + /* Update the frame parameter alist. */ + old_alist_elt = Fassq (prop, f->param_alist); + if (EQ (old_alist_elt, Qnil)) f->param_alist = Fcons (Fcons (prop, val), f->param_alist); else - Fsetcdr (tem, val); + Fsetcdr (old_alist_elt, val); + /* Update some other special parameters in their special places + in addition to the alist. */ + if (EQ (prop, Qbuffer_predicate)) f->buffer_predicate = val; @@ -2072,7 +2093,11 @@ Each element of ALIST has the form (PARM . VALUE), where PARM is a symbol.\n\ The meaningful PARMs depend on the kind of frame.\n\ Undefined PARMs are ignored, but stored in the frame's parameter list\n\ -so that `frame-parameters' will return them.") +so that `frame-parameters' will return them.\n\ +\n\ +The value of frame parameter FOO can also be accessed\n\ +as a frame-local binding for the variable FOO, if you have\n\ +enabled such bindings for that variable with `make-variable-frame-local'.") (frame, alist) Lisp_Object frame, alist; {