]> code.delx.au - gnu-emacs/blobdiff - src/xftfont.c
Merge from emacs--devo--0
[gnu-emacs] / src / xftfont.c
index 7f301c69236b6d7bdc31eadf5b28d80702ea86d5..bd310cb68b867a7dc0f7c97cb698afa4f05050fc 100644 (file)
@@ -261,6 +261,7 @@ xftfont_open (f, entity, pixel_size)
   font->font.full_name = font->font.name = name;
   font->file_name = (char *) file;
   font->font.size = xftfont->max_advance_width;
+  font->font.charset = font->encoding_charset = font->repertory_charset = -1;
   font->ascent = xftfont->ascent;
   font->descent = xftfont->descent;
   font->font.height = xftfont->ascent + xftfont->descent;
@@ -362,8 +363,18 @@ xftfont_prepare_face (f, face)
      FRAME_PTR f;
      struct face *face;
 {
-  struct xftface_info *xftface_info = malloc (sizeof (struct xftface_info));
+  struct xftface_info *xftface_info;
 
+#if 0
+  /* This doesn't work if face->ascii_face doesn't use an Xft font. */
+  if (face != face->ascii_face)
+    {
+      face->extra = face->ascii_face->extra;
+      return 0;
+    }
+#endif
+
+  xftface_info = malloc (sizeof (struct xftface_info));
   if (! xftface_info)
     return -1;
 
@@ -385,16 +396,24 @@ xftfont_done_face (f, face)
      FRAME_PTR f;
      struct face *face;
 {
-  struct xftface_info *xftface_info = (struct xftface_info *) face->extra;
-
+  struct xftface_info *xftface_info;
+  
+#if 0
+  /* This doesn't work if face->ascii_face doesn't use an Xft font. */
+  if (face != face->ascii_face
+      || ! face->extra)
+    return;
+#endif
+
+  xftface_info = (struct xftface_info *) face->extra;
   if (xftface_info)
     {
       BLOCK_INPUT;
       XftDrawDestroy (xftface_info->xft_draw);
       UNBLOCK_INPUT;
       free (xftface_info);
-      face->extra = NULL;
     }
+  face->extra = NULL;
 }
 
 static unsigned