]> git.wh0rd.org - fontconfig.git/commitdiff
Reimplement FcConfigAppFontAddDir; function was lost in 2.4.0.
authorKeith Packard <keithp@neko.keithp.com>
Fri, 15 Sep 2006 07:23:40 +0000 (00:23 -0700)
committerKeith Packard <keithp@neko.keithp.com>
Fri, 15 Sep 2006 07:23:40 +0000 (00:23 -0700)
With the cache restructuring of 2.4.0, the ability to add
application-specific font files and directories was accidentally lost.
Reimplement this using by sharing the logic used to load configured font
directories.

src/fccfg.c
src/fcdir.c
src/fcint.h

index 01d381c5f33ea118ad42adf3c8c4cc3b937065e8..635fdead213badc1f22d13665dc8e3f4d51f9865 100644 (file)
@@ -227,7 +227,8 @@ FcConfigDestroy (FcConfig *config)
  */
 
 FcBool
-FcConfigAddCache (FcConfig *config, FcCache *cache)
+FcConfigAddCache (FcConfig *config, FcCache *cache, 
+                 FcSetName set, FcStrSet *dirSet)
 {
     FcFontSet  *fs;
     intptr_t   *dirs;
@@ -263,7 +264,7 @@ FcConfigAddCache (FcConfig *config, FcCache *cache)
                continue;
                
            nref++;
-           FcFontSetAdd (config->fonts[FcSetSystem], font);
+           FcFontSetAdd (config->fonts[set], font);
        }
        FcDirCacheReference (cache, nref);
     }
@@ -278,12 +279,37 @@ FcConfigAddCache (FcConfig *config, FcCache *cache)
        {
            FcChar8     *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8);
            if (FcConfigAcceptFilename (config, dir))
-               FcConfigAddFontDir (config, dir);
+               FcStrSetAddFilename (dirSet, dir);
        }
     }
     return FcTrue;
 }
 
+static FcBool
+FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet)
+{
+    FcStrList      *dirlist;
+    FcChar8        *dir;
+    FcCache        *cache;
+    
+    dirlist = FcStrListCreate (dirSet);
+    if (!dirlist)
+        return FcFalse;
+       
+    while ((dir = FcStrListNext (dirlist)))
+    {
+       if (FcDebug () & FC_DBG_FONTSET)
+           printf ("adding fonts from%s\n", dir);
+       cache = FcDirCacheRead (dir, FcFalse, config);
+       if (!cache)
+           continue;
+       FcConfigAddCache (config, cache, set, dirSet);
+       FcDirCacheUnload (cache);
+    }
+    FcStrListDone (dirlist);
+    return FcTrue;
+}
+
 /*
  * Scan the current list of directories in the configuration
  * and build the set of available fonts.
@@ -293,9 +319,6 @@ FcBool
 FcConfigBuildFonts (FcConfig *config)
 {
     FcFontSet      *fonts;
-    FcStrList      *dirlist;
-    FcChar8        *dir;
-    FcCache        *cache;
 
     if (!config)
     {
@@ -306,33 +329,15 @@ FcConfigBuildFonts (FcConfig *config)
        
     fonts = FcFontSetCreate ();
     if (!fonts)
-       goto bail;
+       return FcFalse;
     
     FcConfigSetFonts (config, fonts, FcSetSystem);
     
-    dirlist = FcStrListCreate (config->fontDirs);
-    if (!dirlist)
-        goto bail;
-       
-    while ((dir = FcStrListNext (dirlist)))
-    {
-       if (FcDebug () & FC_DBG_FONTSET)
-           printf ("adding fonts from%s\n", dir);
-       cache = FcDirCacheRead (dir, FcFalse, config);
-       if (!cache)
-           continue;
-       FcConfigAddCache (config, cache);
-       FcDirCacheUnload (cache);
-    }
-    
-    FcStrListDone (dirlist);
-    
+    if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs))
+       return FcFalse;
     if (FcDebug () & FC_DBG_FONTSET)
        FcFontSetPrint (fonts);
-
     return FcTrue;
-bail:
-    return FcFalse;
 }
 
 FcBool
@@ -1799,9 +1804,7 @@ FcConfigAppFontAddDir (FcConfig       *config,
                       const FcChar8   *dir)
 {
     FcFontSet  *set;
-    FcStrSet   *subdirs;
-    FcStrList  *sublist;
-    FcChar8    *subdir;
+    FcStrSet   *dirs;
     
     if (!config)
     {
@@ -1809,8 +1812,9 @@ FcConfigAppFontAddDir (FcConfig       *config,
        if (!config)
            return FcFalse;
     }
-    subdirs = FcStrSetCreate ();
-    if (!subdirs)
+
+    dirs = FcStrSetCreate ();
+    if (!dirs)
        return FcFalse;
     
     set = FcConfigGetFonts (config, FcSetApplication);
@@ -1819,26 +1823,20 @@ FcConfigAppFontAddDir (FcConfig     *config,
        set = FcFontSetCreate ();
        if (!set)
        {
-           FcStrSetDestroy (subdirs);
+           FcStrSetDestroy (dirs);
            return FcFalse;
        }
        FcConfigSetFonts (config, set, FcSetApplication);
     }
     
-    if (!FcDirScanConfig (set, subdirs, config->blanks, dir, FcFalse, config))
+    FcStrSetAddFilename (dirs, dir);
+    
+    if (!FcConfigAddDirList (config, FcSetApplication, dirs))
     {
-       FcStrSetDestroy (subdirs);
+       FcStrSetDestroy (dirs);
        return FcFalse;
     }
-    if ((sublist = FcStrListCreate (subdirs)))
-    {
-       while ((subdir = FcStrListNext (sublist)))
-       {
-           FcConfigAppFontAddDir (config, subdir);
-       }
-       FcStrListDone (sublist);
-    }
-    FcStrSetDestroy (subdirs);
+    FcStrSetDestroy (dirs);
     return FcTrue;
 }
 
index bb5cfc9321d6cf3be09998d97c99ce2dae2ca3f4..d08299269f0f85bcf937c2d224cab9f4c91c3f3e 100644 (file)
@@ -273,7 +273,7 @@ FcDirScanConfig (FcFontSet  *set,
                 FcBool         force,
                 FcConfig       *config)
 {
-    return FcFalse; /* XXX fixme */
+    return FcFalse; /* XXX deprecated */
 }
 
 FcBool
@@ -284,7 +284,7 @@ FcDirScan (FcFontSet            *set,
           const FcChar8    *dir,
           FcBool           force)
 {
-    return FcDirScanConfig (set, dirs, blanks, dir, force, NULL);
+    return FcFalse; /* XXX deprecated */
 }
 
 FcBool
index afa37d2cbd3235e4c2c72a4d17905879ec70b8ed..60563cb56a046e3be37f85d1b0984a0d4c02fbb5 100644 (file)
@@ -584,7 +584,8 @@ FcPrivate FcFileTime
 FcConfigModifiedTime (FcConfig *config);
 
 FcPrivate FcBool
-FcConfigAddCache (FcConfig *config, FcCache *cache);
+FcConfigAddCache (FcConfig *config, FcCache *cache, 
+                 FcSetName set, FcStrSet *dirSet);
 
 /* fcserialize.c */
 FcPrivate intptr_t