We have two problems when we start to use Xft1.2 or Xft2.0 1) With Xft1.2 or Xft2.0 we now use fontconfig, and thus have to cast the variables for use with fontconfig struct's and variables. 2) With Xft2.0, some functions in xftint.h are already defined in the Xft.h from Xft2.0. Fix: If we have Xft1.2 or Xft2.0, either change configure to to define XFT_WITH_FONTCONFIG, or add -DXFT_WITH_FONTCONFIG to our CXXFLAGS. If we have Xft2.0, define HAVE_XFT2 somehow. Martin Schlemmer (25 Dec 2002) --- kdebase-3.0.5a/kcontrol/kfontinst/kfontinst/XftConfig.cpp.orig 2002-12-25 04:06:47.000000000 +0200 +++ kdebase-3.0.5a/kcontrol/kfontinst/kfontinst/XftConfig.cpp 2002-12-25 04:07:27.000000000 +0200 @@ -276,7 +276,11 @@ } case XftTypeString: str+="\""; +#ifndef XFT_WITH_FONTCONFIG str+=test->value.u.s; +#else + str+=(const char *)test->value.u.s; +#endif str+="\""; break; case XftTypeBool: @@ -554,7 +558,11 @@ XftValue value; CXftConfig::TEntry *entry=new CXftConfig::TEntry; +#ifndef XFT_WITH_FONTCONFIG value.u.s=sval; +#else + value.u.s=(FcChar8 *)sval; +#endif value.type=XftTypeString; entry->test=XftTestCreate(XftQualAny, "family", XftOpEqual, value); @@ -780,7 +788,11 @@ for(entry=itsList.first(); entry; entry=itsList.next()) if(entry->test && 0==CMisc::stricmp(entry->test->field, "family") && XftTypeString==entry->test->value.type && +#ifndef XFT_WITH_FONTCONFIG 0==CMisc::stricmp(entry->test->value.u.s, family.latin1()) && entry->edit && +#else + 0==CMisc::stricmp((const char *)entry->test->value.u.s, family.latin1()) && entry->edit && +#endif 0==CMisc::stricmp(entry->edit->field, field) && XftOpAssign==entry->edit->op && entry->edit->expr) break; @@ -798,7 +810,11 @@ free(test->field); if(XftTypeString==test->value.type) +#ifndef XFT_WITH_FONTCONFIG free(test->value.u.s); +#else + free((FcChar8 *)test->value.u.s); +#endif } } --- kdebase-3.0.5a/kcontrol/kfontinst/kfontinst/XftConfigEditor.cpp.orig 2002-12-25 04:07:06.000000000 +0200 +++ kdebase-3.0.5a/kcontrol/kfontinst/kfontinst/XftConfigEditor.cpp 2002-12-25 04:07:27.000000000 +0200 @@ -469,7 +469,11 @@ break; case XftTypeString: expr->op=XftOpString; +#ifndef XFT_WITH_FONTCONFIG expr->u.sval=val.u.s; +#else + expr->u.sval=(char *)val.u.s; +#endif break; case XftTypeBool: default: @@ -655,12 +659,24 @@ if("foundry"==field || "family"==field || "encoding"==field || "style"==field) { val.type=XftTypeString; +#ifndef XFT_WITH_FONTCONFIG val.u.s=(char *)malloc(edit ? strVal.length()+1 : strVal.length()-1); +#else + val.u.s=(FcChar8 *)malloc(edit ? strVal.length()+1 : strVal.length()-1); +#endif if(edit) +#ifndef XFT_WITH_FONTCONFIG strcpy(val.u.s, strVal.local8Bit()); +#else + strcpy((char *)val.u.s, strVal.local8Bit()); +#endif else +#ifndef XFT_WITH_FONTCONFIG strcpy(val.u.s, strVal.mid(1, strVal.length()-2).local8Bit()); // Need to remove quotes from each end of the string... +#else + strcpy((char *)val.u.s, strVal.mid(1, strVal.length()-2).local8Bit()); // Need to remove quotes from each end of the string... +#endif } else if("spacing"==field) { @@ -747,8 +763,13 @@ { // Not sure about this... val.type=XftTypeString; +#ifndef XFT_WITH_FONTCONFIG val.u.s=(char *)malloc(strVal.length()+1); strcpy(val.u.s, strVal.local8Bit()); +#else + val.u.s=(FcChar8 *)malloc(strVal.length()+1); + strcpy((char *)val.u.s, strVal.local8Bit()); +#endif } else if("rgba"==field) { --- kdebase-3.0.5a/kcontrol/kfontinst/kfontinst/xftint.h.orig 2002-12-25 04:07:17.000000000 +0200 +++ kdebase-3.0.5a/kcontrol/kfontinst/kfontinst/xftint.h 2002-12-25 04:07:27.000000000 +0200 @@ -276,8 +276,10 @@ XftSubstPrint (XftSubst *subst); /* xftdir.c */ +#ifndef HAVE_XFT2 Bool XftDirScan (XftFontSet *set, const char *dir); +#endif /* xftdpy.c */ int @@ -388,10 +390,12 @@ XftListValueCompare (XftValue v1, XftValue v2); +#ifndef HAVE_XFT2 Bool XftListValueListCompare (XftValueList *v1orig, XftValueList *v2orig, XftQual qual); +#endif Bool XftListMatch (XftPattern *p,