X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8361f92be846ac953deb4b923827cca68fc1ad23..aa0ff209bc82d0f7c48263bb28609769d09f051b:/src/unix/fontutil.cpp

diff --git a/src/unix/fontutil.cpp b/src/unix/fontutil.cpp
index cc30f65aa1..3d09eb207c 100644
--- a/src/unix/fontutil.cpp
+++ b/src/unix/fontutil.cpp
@@ -24,27 +24,35 @@
     #pragma hdrstop
 #endif
 
+#include "wx/fontutil.h"
+
 #ifndef WX_PRECOMP
+    #include "wx/app.h"
     #include "wx/font.h" // wxFont enums
     #include "wx/encinfo.h"
     #include "wx/hash.h"
     #include "wx/utils.h"       // for wxGetDisplay()
+    #include "wx/module.h"
 #endif // PCH
 
-#include "wx/fontutil.h"
 #include "wx/fontmap.h"
 #include "wx/tokenzr.h"
-#include "wx/module.h"
+#include "wx/fontenum.h"
 
 #if wxUSE_PANGO
 
 #include "pango/pango.h"
 
 #ifdef __WXGTK20__
-#include "wx/gtk/private.h"
-extern GtkWidget *wxGetRootWindow();
+    #include "wx/gtk/private.h"
+    extern GtkWidget *wxGetRootWindow();
+
+    #define wxPANGO_CONV wxGTK_CONV_SYS
 #else
-#include "wx/x11/private.h"
+    #include "wx/x11/private.h"
+    #include "wx/gtk/private/string.h"
+
+    #define wxPANGO_CONV(s) (wxConvUTF8.cWX2MB((s)))
 #endif
 
 // ----------------------------------------------------------------------------
@@ -258,9 +266,10 @@ void wxNativeFontInfo::SetUnderlined(bool WXUNUSED(underlined))
     wxFAIL_MSG( _T("not implemented") );
 }
 
-void wxNativeFontInfo::SetFaceName(const wxString& facename)
+bool wxNativeFontInfo::SetFaceName(const wxString& facename)
 {
-    pango_font_description_set_family(description, wxGTK_CONV_SYS(facename));
+    pango_font_description_set_family(description, wxPANGO_CONV(facename));
+    return true;
 }
 
 void wxNativeFontInfo::SetFamily(wxFontFamily WXUNUSED(family))
@@ -305,7 +314,11 @@ bool wxNativeFontInfo::FromString(const wxString& s)
         }
     }
 
-    description = pango_font_description_from_string( wxGTK_CONV_SYS( str ) );
+    description = pango_font_description_from_string(wxPANGO_CONV(str));
+
+    // ensure a valid facename is selected
+    if (!wxFontEnumerator::IsValidFacename(GetFaceName()))
+        SetFaceName(wxNORMAL_FONT->GetFaceName());
 
     return true;
 }
@@ -774,9 +787,10 @@ void wxNativeFontInfo::SetUnderlined(bool WXUNUSED(underlined))
     // can't do this under X
 }
 
-void wxNativeFontInfo::SetFaceName(const wxString& facename)
+bool wxNativeFontInfo::SetFaceName(const wxString& facename)
 {
     SetXFontComponent(wxXLFD_FAMILY, facename);
+    return true;
 }
 
 void wxNativeFontInfo::SetFamily(wxFontFamily WXUNUSED(family))