changeset 33275:8c453c73a11b

(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.
author Gerd Moellmann <gerd@gnu.org>
date Tue, 07 Nov 2000 13:17:29 +0000
parents e3421af74986
children 402255cd8750
files src/xfaces.c
diffstat 1 files changed, 18 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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;