Moved all font config parameters to HKCU\Software\Wine\Fonts.
Replaced the FontDirs key enumeration by a simple Path value.

diff --git a/dlls/gdi/freetype.c b/dlls/gdi/freetype.c
index 1a08e1f..7b368e0 100644
--- a/dlls/gdi/freetype.c
+++ b/dlls/gdi/freetype.c
@@ -284,7 +284,7 @@
     NULL
 };
 
-static const WCHAR external_fonts_reg_key[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\','W','i','n','e','\\',
+static const WCHAR external_fonts_reg_key[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\',
                                                'F','o','n','t','s','\\','E','x','t','e','r','n','a','l',' ','F','o','n','t','s','\0'};
 
 static const WCHAR ArabicW[] = {'A','r','a','b','i','c','\0'};
@@ -737,7 +737,7 @@
  * The replacement list is a way to map an entire font
  * family onto another family.  For example adding
  *
- * [HKLM\Software\Wine\Wine\FontReplacements]
+ * [HKCU\Software\Wine\Fonts\Replacements]
  * "Wingdings"="Winedings"
  *
  * would enumerate the Winedings font both as Winedings and
@@ -756,11 +756,9 @@
     struct list *family_elem_ptr, *face_elem_ptr;
     WCHAR old_nameW[200];
 
-    /* @@ Wine registry key: HKLM\Software\Wine\Wine\FontReplacements */
-    if(RegOpenKeyA(HKEY_LOCAL_MACHINE,
-		   "Software\\Wine\\Wine\\FontReplacements",
-		   &hkey) == ERROR_SUCCESS) {
-
+    /* @@ Wine registry key: HKCU\Software\Wine\Fonts\Replacements */
+    if(RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Fonts\\Replacements", &hkey) == ERROR_SUCCESS)
+    {
         RegQueryInfoKeyA(hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 			 &valuelen, &datalen, NULL, NULL);
 
@@ -956,9 +954,8 @@
         ERR("Can't create Windows font reg key\n");
         goto end;
     }
-    /* @@ Wine registry key: HKLM\Software\Wine\Wine\Fonts\ExternalFonts */
-    if(RegCreateKeyExW(HKEY_LOCAL_MACHINE, external_fonts_reg_key,
-                       0, NULL, 0, KEY_ALL_ACCESS, NULL, &externalkey, NULL) != ERROR_SUCCESS) {
+    /* @@ Wine registry key: HKCU\Software\Wine\Fonts\ExternalFonts */
+    if(RegCreateKeyW(HKEY_CURRENT_USER, external_fonts_reg_key, &externalkey) != ERROR_SUCCESS) {
         ERR("Can't create external font reg key\n");
         goto end;
     }
@@ -1078,6 +1075,7 @@
 BOOL WineEngInit(void)
 {
     static const WCHAR dot_fonW[] = {'.','f','o','n','\0'};
+    static const WCHAR pathW[] = {'P','a','t','h',0};
     HKEY hkey;
     DWORD valuelen, datalen, i = 0, type, dlen, vlen;
     LPVOID data;
@@ -1222,32 +1220,36 @@
     load_fontconfig_fonts();
 
     /* then look in any directories that we've specified in the config file */
-    /* @@ Wine registry key: HKLM\Software\Wine\Wine\Config\FontDirs */
-    if(RegOpenKeyA(HKEY_LOCAL_MACHINE,
-		   "Software\\Wine\\Wine\\Config\\FontDirs",
-		   &hkey) == ERROR_SUCCESS) {
-        LPSTR value;
-        RegQueryInfoKeyA(hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-			 &valuelen, &datalen, NULL, NULL);
+    /* @@ Wine registry key: HKCU\Software\Wine\Fonts */
+    if(RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Fonts", &hkey) == ERROR_SUCCESS)
+    {
+        DWORD len;
+        LPWSTR valueW;
+        LPSTR valueA, ptr;
 
-	valuelen++; /* returned value doesn't include room for '\0' */
-	value = HeapAlloc(GetProcessHeap(), 0, valuelen);
-	data = HeapAlloc(GetProcessHeap(), 0, datalen);
-
-	dlen = datalen;
-	vlen = valuelen;
-	i = 0;
-	while(RegEnumValueA(hkey, i++, value, &vlen, NULL, &type, data,
-			    &dlen) == ERROR_SUCCESS) {
-	    TRACE("Got %s=%s\n", value, (LPSTR)data);
-	    ReadFontDir((LPSTR)data, TRUE);
-	    /* reset dlen and vlen */
-	    dlen = datalen;
-	    vlen = valuelen;
-	}
-	HeapFree(GetProcessHeap(), 0, data);
-	HeapFree(GetProcessHeap(), 0, value);
-	RegCloseKey(hkey);
+        if (RegQueryValueExW( hkey, pathW, NULL, NULL, NULL, &len ) == ERROR_SUCCESS)
+        {
+            len += sizeof(WCHAR);
+            valueW = HeapAlloc( GetProcessHeap(), 0, len );
+            if (RegQueryValueExW( hkey, pathW, NULL, NULL, (LPBYTE)valueW, &len ) == ERROR_SUCCESS)
+            {
+                len = WideCharToMultiByte( CP_UNIXCP, 0, valueW, -1, NULL, 0, NULL, NULL );
+                valueA = HeapAlloc( GetProcessHeap(), 0, len );
+                WideCharToMultiByte( CP_UNIXCP, 0, valueW, -1, valueA, len, NULL, NULL );
+                TRACE( "got font path %s\n", debugstr_a(valueA) );
+                ptr = valueA;
+                while (ptr)
+                {
+                    LPSTR next = strchr( ptr, ':' );
+                    if (next) *next++ = 0;
+                    ReadFontDir( ptr, TRUE );
+                    ptr = next;
+                }
+                HeapFree( GetProcessHeap(), 0, valueA );
+            }
+            HeapFree( GetProcessHeap(), 0, valueW );
+        }
+        RegCloseKey(hkey);
     }
 
     DumpFontList();