# HG changeset patch # User Gerd Moellmann # Date 973603049 0 # Node ID 8c453c73a11bf6c1f5e94f16b5394e373949b9e6 # Parent e3421af74986ac73960f1890af1a4838f511bb06 (lookup_named_face): If default face isn't realized, try to realize it. Return -1 if not successful. (Fx_list_fonts): Handle case that face cannot be determined. (Fface_font): Likewise. diff -r e3421af74986 -r 8c453c73a11b src/xfaces.c --- a/src/xfaces.c Tue Nov 07 10:57:15 2000 +0000 +++ b/src/xfaces.c Tue Nov 07 13:17:29 2000 +0000 @@ -2726,9 +2726,11 @@ /* This is of limited utility since it works with character widths. Keep it for compatibility. --gerd. */ int face_id = lookup_named_face (f, face, 0); - struct face *face = FACE_FROM_ID (f, face_id); - - if (face->font) + struct face *face = (face_id < 0 + ? NULL + : FACE_FROM_ID (f, face_id)); + + if (face && face->font) size = FONT_WIDTH (face->font); else size = FONT_WIDTH (FRAME_FONT (f)); @@ -4650,7 +4652,7 @@ struct frame *f = frame_or_selected_frame (frame, 1); int face_id = lookup_named_face (f, face, 0); struct face *face = FACE_FROM_ID (f, face_id); - return build_string (face->font_name); + return face ? build_string (face->font_name) : Qnil; } } @@ -5268,7 +5270,9 @@ /* Return the face id of the realized face for named face SYMBOL on - frame F suitable for displaying character C. */ + frame F suitable for displaying character C. Value is -1 if the + face couldn't be determined, which might happen if the default face + isn't realized and cannot be realized. */ int lookup_named_face (f, symbol, c) @@ -5280,6 +5284,13 @@ Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); + if (default_face == NULL) + { + if (!realize_basic_faces (f)) + return -1; + default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); + } + get_lface_attributes (f, symbol, symbol_attrs, 1); bcopy (default_face->lface, attrs, sizeof attrs); merge_face_vectors (f, symbol_attrs, attrs, Qnil); @@ -5397,6 +5408,7 @@ return face_id; } + /* Return the face id of the realized face for named face SYMBOL on frame F suitable for displaying character C, and use attributes of the face FACE_ID for attributes that aren't completely specified by @@ -5948,7 +5960,7 @@ realize_named_face (f, Qmouse, MOUSE_FACE_ID); realize_named_face (f, Qmenu, MENU_FACE_ID); - /* Reflext changes in the `menu' face in menu bars. */ + /* Reflect changes in the `menu' face in menu bars. */ if (menu_face_change_count) { menu_face_change_count = 0;