(minput_get_title_icon): Fix docstring.
[m17n/m17n-lib.git] / src / face.c
index 8d6fda3..d3e7937 100644 (file)
@@ -726,6 +726,7 @@ mface__realize (MFrame *frame, MFace **faces, int num, int size, MFont *font)
     {
       rface->rfont = rfont;
       rface->layouter = rfont->layouter;
+      rfont->layouter = Mnil;
       work_gstring.glyphs[0].rface = rface;
       work_gstring.glyphs[0].code = MCHAR_INVALID_CODE;
       mfont__get_metric (&work_gstring, 0, 1);
@@ -829,6 +830,7 @@ mface__for_chars (MSymbol script, MSymbol language, MSymbol charset,
              *new = *rface;
              new->rfont = rfont;
              new->layouter = rfont->layouter;
+             rfont->layouter = Mnil;
              new->non_ascii_list = NULL;
              new->ascent = rfont->ascent;
              new->descent = rfont->descent;
@@ -836,11 +838,22 @@ mface__for_chars (MSymbol script, MSymbol language, MSymbol charset,
          for (; from_g < to_g && from_g->rface->font; from_g++)
            {
              from_g->rface = new;
-             from_g->code
-               = (rfont->layouter
-                  ? mfont__flt_encode_char (rfont->layouter, from_g->c)
-                  : mfont__encode_char (rfont->frame, (MFont *) rfont, NULL,
-                                        from_g->c));
+             if (new->layouter)
+               {
+                 from_g->code = mfont__flt_encode_char (new->layouter, 
+                                                        from_g->c);
+                 if (from_g->code == MCHAR_INVALID_CODE)
+                   {
+                     from_g->rface = rface;
+                     from_g->code = mfont__encode_char (rfont->frame, 
+                                                        (MFont *) rfont,
+                                                        NULL, from_g->c);
+                   }
+               }
+             else
+               from_g->code = mfont__encode_char (rfont->frame, 
+                                                  (MFont *) rfont,
+                                                  NULL, from_g->c);
            }
        }
       return from_g;
@@ -863,7 +876,10 @@ mface__for_chars (MSymbol script, MSymbol language, MSymbol charset,
   rfont = mfont__lookup_fontset (from_g->rface->rfontset, from_g, &num,
                                 script, language, charset, size, 0);
   if (rfont)
-    layouter = rfont->layouter;
+    {
+      layouter = rfont->layouter;
+      rfont->layouter = Mnil;
+    }
   else
     {
       from_g->code = MCHAR_INVALID_CODE;
@@ -922,7 +938,7 @@ mface__free_realized (MRealizedFace *rface)
   MPLIST_DO (plist, rface->non_ascii_list)
     free (MPLIST_VAL (plist));
   M17N_OBJECT_UNREF (rface->non_ascii_list);
-  if (rface->font)
+  if (rface->font && rface->font->type != MFONT_TYPE_REALIZED)
     free (rface->font);
   free (rface);
 }