From: Vadim Zeitlin Date: Fri, 12 Nov 1999 17:00:02 +0000 (+0000) Subject: fixes for wxFontMapper endless recursion X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/97d3f0eee61fc8fcae7232d41fe97d467c4a5bc8 fixes for wxFontMapper endless recursion git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4527 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/fontmap.cpp b/src/common/fontmap.cpp index b0a2aa7a24..09880ab43f 100644 --- a/src/common/fontmap.cpp +++ b/src/common/fontmap.cpp @@ -501,6 +501,22 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, { wxCHECK_MSG( info, FALSE, _T("bad pointer in GetAltForEncoding") ); + if ( encoding == wxFONTENCODING_DEFAULT ) + { + encoding = wxFont::GetDefaultEncoding(); + } + + // if we failed to load the system default encoding, something is really + // wrong and we'd better stop now - otherwise we will go into endless + // recursion trying to create the font in the msg box with the error + // message + if ( encoding == wxFONTENCODING_SYSTEM ) + { + wxFatalError(_("can't load any font, aborting")); + + // wxFatalError doesn't return + } + wxString configEntry = GetEncodingName(encoding); // do we have a font spec for this encoding? diff --git a/src/unix/fontutil.cpp b/src/unix/fontutil.cpp index be3861a149..fa20c75985 100644 --- a/src/unix/fontutil.cpp +++ b/src/unix/fontutil.cpp @@ -61,17 +61,7 @@ #elif defined(__WXGTK__) static inline wxNativeFont wxLoadFont(const wxString& fontSpec) { - wxNativeFont font = gdk_font_load( wxConvertWX2MB(fontSpec) ); - if(fontSpec == "-*-*-*-*-*-*-*-*-*-*-*-*-*-*") - { - if(font == NULL) - font = gdk_font_load (wxConvertWX2MB("-*-*-*-*-*-*-*-*-75-*-*-*-*-*")); - if(font == NULL) - font = gdk_font_load (wxConvertWX2MB("-*-*-*-*-*-*-*-*-100-*-*-*-*-*")); - if(font == NULL) - font = gdk_font_load (wxConvertWX2MB("-*-fixed-*-*-*-*-*-*-*-*-*-*-*-*")); - } - return font; + return gdk_font_load( wxConvertWX2MB(fontSpec) ); } static inline void wxFreeFont(wxNativeFont font) @@ -228,11 +218,16 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize, const wxString &facename, wxFontEncoding encoding) { + if ( encoding == wxFONTENCODING_DEFAULT ) + { + encoding = wxFont::GetDefaultEncoding(); + } + // first determine the encoding - if the font doesn't exist at all in this // encoding, it's useless to do all other approximations (i.e. size, // family &c don't matter much) wxNativeEncodingInfo info; - if (encoding == wxFONTENCODING_SYSTEM) + if ( encoding == wxFONTENCODING_SYSTEM ) { // This will always work so we don't test to save time wxGetNativeFontEncoding(wxFONTENCODING_SYSTEM, &info); @@ -251,11 +246,10 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize, // so it would provoke a crash wxGetNativeFontEncoding(wxFONTENCODING_SYSTEM, &info); } - } + } } // OK, we have the correct xregistry/xencoding in info structure - wxNativeFont font = wxLoadQueryFont( pointSize, family, style, weight, underlined, facename, info.xregistry, info.xencoding ); @@ -317,6 +311,13 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize, // returns TRUE if there are any fonts matching this font spec static bool wxTestFontSpec(const wxString& fontspec) { + // some X servers will fail to load this font because there are too many + // matches so we must test explicitly for this + if ( fontspec == _T("-*-*-*-*-*-*-*-*-*-*-*-*-*-*") ) + { + return TRUE; + } + wxNativeFont test = wxLoadFont(fontspec); if ( test ) {