# HG changeset patch # User Jim Blandy # Date 740733911 0 # Node ID 9d92b383b584909f12dec13ceacfe97f98fba1f5 # Parent ef6a4d39634b5d0ecbaa2a5479c93e31c1595f0d Separate parameter faces (those created and modified by the user) from the computed faces (the combinations created by compute_char_face), so that we don't waste global face id's. * xterm.h (struct x_display): Replace the fields faces and n_faces with fields param_faces, n_param_faces, computed_faces, n_computed_faces, and size_computed_faces. (FRAME_FACES, FRAME_N_FACES): Replaced by... (FRAME_COMPUTED_FACES, FRAME_N_COMPUTED_FACES, FRAME_PARAM_FACES, FRAME_N_PARAM_FACES): New macros. * xfaces.c: Doc fixes. (init_frame_faces): Call new_computed_face to create entries for the default and mode line faces. Use the FRAME...PARAM_FACES macros. (free_frame_faces): Use the FRAME...PARAM_FACES and FRAME...COMPUTED_FACES macros. Don't use the copy flag; all parameter faces have real X resources, and all computed faces just have copies. Free both the parameter and computed face arrays. (new_computed_face): New function. (intern_computed_face): Renamed from intern_frame_face; callers changed. Call new_computed_face. (ensure_face_ready, compute_char_face, compute_glyph_face): Use the FRAME...PARAM_FACES macros. (recompute_basic_faces): Use the FRAME...PARAM_FACES and FRAME...COMPUTED_FACES macros. Produce the computed faces by starting with the base faces and merging in the parameter faces. (Fset_face_attribute_internal): Use the FRAME...PARAM_FACES macros. Just call recompute_basic_faces if the default or mode line faces have changed. * xfns.c (Fx_list_fonts): Use the FRAME...PARAM_FACES macros. * xterm.c (dumpglyphs): Use the FRAME...COMPUTED_FACES macros. * dispextern.h (struct face): Remove the copy member. This is no longer necessary; all computed faces are copies, and no parameter faces are. * xfns.c (Fx_open_connection): Remember to block input while calling x_load_resources. * xrdb.c: Undo change of June 19th; it was a BLOCK_INPUT problem, not a server-specific bug. diff -r ef6a4d39634b -r 9d92b383b584 src/xfns.c --- a/src/xfns.c Tue Jun 22 06:59:07 1993 +0000 +++ b/src/xfns.c Tue Jun 22 07:25:11 1993 +0000 @@ -2208,12 +2208,12 @@ FRAME_PTR f = NILP (frame) ? selected_frame : XFRAME (frame); int face_id = face_name_id_number (f, face); - if (face_id < 0 || face_id >= FRAME_N_FACES (f) - || FRAME_FACES (f) [face_id] == 0) + if (face_id < 0 || face_id >= FRAME_N_PARAM_FACES (f) + || FRAME_PARAM_FACES (f) [face_id] == 0) size_ref = f->display.x->font; else { - size_ref = FRAME_FACES (f) [face_id]->font; + size_ref = FRAME_PARAM_FACES (f) [face_id]->font; if (size_ref == (XFontStruct *) (~0)) size_ref = f->display.x->font; } @@ -3483,7 +3483,9 @@ } else xrm_option = (unsigned char *) 0; + BLOCK_INPUT; xrdb = x_load_resources (x_current_display, xrm_option, EMACS_CLASS); + UNBLOCK_INPUT; #if defined (HAVE_X11R5) || defined (HAVE_XRMSETDATABASE) XrmSetDatabase (x_current_display, xrdb); #else