diff --git a/include/wx/gtk/private.h b/include/wx/gtk/private.h
index 85750269b5..9f4cd54c02 100644
--- a/include/wx/gtk/private.h
+++ b/include/wx/gtk/private.h
@@ -131,5 +131,10 @@ inline wxEventType GtkScrollWinTypeToWx(guint scrollType)
wxEVT_SCROLLWIN_TOP - wxEVT_SCROLL_TOP;
}
+#ifdef __WXGTK20__
+// Escapes string so that it is valid Pango markup XML string:
+wxString wxEscapeStringForPangoMarkup(const wxString& str);
+#endif
+
#endif // _WX_GTK_PRIVATE_H_
diff --git a/include/wx/gtk1/private.h b/include/wx/gtk1/private.h
index 85750269b5..9f4cd54c02 100644
--- a/include/wx/gtk1/private.h
+++ b/include/wx/gtk1/private.h
@@ -131,5 +131,10 @@ inline wxEventType GtkScrollWinTypeToWx(guint scrollType)
wxEVT_SCROLLWIN_TOP - wxEVT_SCROLL_TOP;
}
+#ifdef __WXGTK20__
+// Escapes string so that it is valid Pango markup XML string:
+wxString wxEscapeStringForPangoMarkup(const wxString& str);
+#endif
+
#endif // _WX_GTK_PRIVATE_H_
diff --git a/src/gtk/stattext.cpp b/src/gtk/stattext.cpp
index c245fd315c..6f068dc3d0 100644
--- a/src/gtk/stattext.cpp
+++ b/src/gtk/stattext.cpp
@@ -132,19 +132,20 @@ void wxStaticText::SetLabel( const wxString &label )
#ifdef __WXGTK20__
// Build the colorized version of the label (markup only allowed
// under GTK2):
- wxString colorlabel = label;
- // If the color has been set, create a markup string to pass to
- // the label setter
if (m_foregroundColour.Ok())
{
+ // If the color has been set, create a markup string to pass to
+ // the label setter
+ wxString colorlabel;
colorlabel.Printf(_T("%s"),
m_foregroundColour.Red(), m_foregroundColour.Green(),
- m_foregroundColour.Blue(), label.c_str());
+ m_foregroundColour.Blue(),
+ wxEscapeStringForPangoMarkup(label).c_str());
+ gtk_label_set_markup( GTK_LABEL(m_widget), wxGTK_CONV( colorlabel ) );
}
-
- gtk_label_set_markup( GTK_LABEL(m_widget), wxGTK_CONV( colorlabel ) );
+ else
#else
- gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
+ gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
#endif
// adjust the label size to the new label unless disabled
diff --git a/src/gtk/utilsgtk.cpp b/src/gtk/utilsgtk.cpp
index cef8dbe54e..e76e3187f3 100644
--- a/src/gtk/utilsgtk.cpp
+++ b/src/gtk/utilsgtk.cpp
@@ -81,6 +81,43 @@ bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) )
}
#endif
+#ifdef __WXGTK20__
+// Escapes string so that it is valid Pango markup XML string:
+wxString wxEscapeStringForPangoMarkup(const wxString& str)
+{
+ size_t len = str.length();
+ wxString out;
+ out.Alloc(len);
+ for (size_t i = 0; i < len; i++)
+ {
+ wxChar c = str[i];
+ switch (c)
+ {
+ case _T('&'):
+ out << _T("&");
+ break;
+ case _T('<'):
+ out << _T("<");
+ break;
+ case _T('>'):
+ out << _T(">");
+ break;
+ case _T('\''):
+ out << _T("'");
+ break;
+ case _T('"'):
+ out << _T(""");
+ break;
+ default:
+ out << c;
+ break;
+ }
+ }
+ return out;
+}
+#endif
+
+
// ----------------------------------------------------------------------------
// display characterstics
// ----------------------------------------------------------------------------
diff --git a/src/gtk1/stattext.cpp b/src/gtk1/stattext.cpp
index c245fd315c..6f068dc3d0 100644
--- a/src/gtk1/stattext.cpp
+++ b/src/gtk1/stattext.cpp
@@ -132,19 +132,20 @@ void wxStaticText::SetLabel( const wxString &label )
#ifdef __WXGTK20__
// Build the colorized version of the label (markup only allowed
// under GTK2):
- wxString colorlabel = label;
- // If the color has been set, create a markup string to pass to
- // the label setter
if (m_foregroundColour.Ok())
{
+ // If the color has been set, create a markup string to pass to
+ // the label setter
+ wxString colorlabel;
colorlabel.Printf(_T("%s"),
m_foregroundColour.Red(), m_foregroundColour.Green(),
- m_foregroundColour.Blue(), label.c_str());
+ m_foregroundColour.Blue(),
+ wxEscapeStringForPangoMarkup(label).c_str());
+ gtk_label_set_markup( GTK_LABEL(m_widget), wxGTK_CONV( colorlabel ) );
}
-
- gtk_label_set_markup( GTK_LABEL(m_widget), wxGTK_CONV( colorlabel ) );
+ else
#else
- gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
+ gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
#endif
// adjust the label size to the new label unless disabled
diff --git a/src/gtk1/utilsgtk.cpp b/src/gtk1/utilsgtk.cpp
index cef8dbe54e..e76e3187f3 100644
--- a/src/gtk1/utilsgtk.cpp
+++ b/src/gtk1/utilsgtk.cpp
@@ -81,6 +81,43 @@ bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) )
}
#endif
+#ifdef __WXGTK20__
+// Escapes string so that it is valid Pango markup XML string:
+wxString wxEscapeStringForPangoMarkup(const wxString& str)
+{
+ size_t len = str.length();
+ wxString out;
+ out.Alloc(len);
+ for (size_t i = 0; i < len; i++)
+ {
+ wxChar c = str[i];
+ switch (c)
+ {
+ case _T('&'):
+ out << _T("&");
+ break;
+ case _T('<'):
+ out << _T("<");
+ break;
+ case _T('>'):
+ out << _T(">");
+ break;
+ case _T('\''):
+ out << _T("'");
+ break;
+ case _T('"'):
+ out << _T(""");
+ break;
+ default:
+ out << c;
+ break;
+ }
+ }
+ return out;
+}
+#endif
+
+
// ----------------------------------------------------------------------------
// display characterstics
// ----------------------------------------------------------------------------