+bool wxTextCtrl::SetStyle( long start, long end, const wxTextAttr &style )
+{
+    /* VERY dirty way to do that - removes the required text and re-adds it
+       with styling (FIXME) */
+    if ( m_windowStyle & wxTE_MULTILINE )
+    {
+        if ( style.IsDefault() )
+        {
+            // nothing to do
+            return TRUE;
+        }
+
+        gint l = gtk_text_get_length( GTK_TEXT(m_text) );
+
+        wxCHECK_MSG( start >= 0 && end <= l, FALSE,
+                     _T("invalid range in wxTextCtrl::SetStyle") );
+
+        gint old_pos = gtk_editable_get_position( GTK_EDITABLE(m_text) );
+        char *text = gtk_editable_get_chars( GTK_EDITABLE(m_text), start, end );
+        wxString tmp(text,*wxConvCurrent);
+        g_free( text );
+
+        gtk_editable_delete_text( GTK_EDITABLE(m_text), start, end );
+        gtk_editable_set_position( GTK_EDITABLE(m_text), start );
+
+#if wxUSE_UNICODE
+        wxWX2MBbuf buf = tmp.mbc_str();
+        const char *txt = buf;
+        size_t txtlen = strlen(buf);
+#else
+        const char *txt = tmp;
+        size_t txtlen = tmp.length();
+#endif
+
+        GdkFont *font = style.HasFont()
+                            ? style.GetFont().GetInternalFont()
+                            : NULL;
+
+        GdkColor *colFg = style.HasTextColour()
+                            ? style.GetTextColour().GetColor()
+                            : NULL;
+
+        GdkColor *colBg = style.HasBackgroundColour()
+                            ? style.GetBackgroundColour().GetColor()
+                            : NULL;
+
+        gtk_text_insert( GTK_TEXT(m_text), font, colFg, colBg, txt, txtlen );
+
+        /* does not seem to help under GTK+ 1.2 !!!
+        gtk_editable_set_position( GTK_EDITABLE(m_text), old_pos ); */
+        SetInsertionPoint( old_pos );
+        return TRUE;
+    }
+    else // singe line
+    {
+        // cannot do this for GTK+'s Entry widget
+        return FALSE;
+    }
+}
+