-  if (((wxFont*)&font)->Ok())
-    m_font = font;
-  else
-    m_font = *wxSWISS_FONT;
-  
-  GtkStyle *style = (GtkStyle*) NULL;
-  if (!m_hasOwnStyle)
-  {
-    m_hasOwnStyle = TRUE;
-    style = gtk_style_copy( gtk_widget_get_style( m_text ) );
-  }
-  else
-  {
-    style = gtk_widget_get_style( m_text );
-  }
-  
-  gdk_font_unref( style->font );
-  style->font = gdk_font_ref( m_font.GetInternalFont( 1.0 ) );
-  
-  gtk_widget_set_style( m_text, style );
+    wxCHECK_MSG( m_text != NULL, FALSE, wxT("invalid text ctrl") );
+
+    if ( !wxWindowBase::SetFont(font) )
+    {
+        // font didn't change, nothing to do
+        return FALSE;
+    }
+
+    if ( m_windowStyle & wxTE_MULTILINE )
+    {
+        // for compatibility with other ports: the font is a global controls
+        // characteristic, so change the font globally
+        wxString value = GetValue();
+        if ( !value.IsEmpty() )
+        {
+            Clear();
+
+            AppendText(value);
+        }
+    }
+
+    return TRUE;
+}
+
+bool wxTextCtrl::SetForegroundColour( const wxColour &WXUNUSED(colour) )
+{
+    wxCHECK_MSG( m_text != NULL, FALSE, wxT("invalid text ctrl") );
+
+    // doesn't work
+    return FALSE;
+}
+
+bool wxTextCtrl::SetBackgroundColour( const wxColour &colour )
+{
+    wxCHECK_MSG( m_text != NULL, FALSE, wxT("invalid text ctrl") );
+
+    wxControl::SetBackgroundColour( colour );
+
+    if (!m_widget->window)
+        return FALSE;
+
+    wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
+    if (sysbg.Red() == colour.Red() &&
+        sysbg.Green() == colour.Green() &&
+        sysbg.Blue() == colour.Blue())
+    {
+        return FALSE; // FIXME or TRUE?
+    }
+
+    if (!m_backgroundColour.Ok())
+        return FALSE;
+
+    if (m_windowStyle & wxTE_MULTILINE)
+    {
+        GdkWindow *window = GTK_TEXT(m_text)->text_area;
+        if (!window)
+            return FALSE;
+        m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
+        gdk_window_set_background( window, m_backgroundColour.GetColor() );
+        gdk_window_clear( window );
+    }
+
+    return TRUE;
+}
+
+void wxTextCtrl::ApplyWidgetStyle()
+{
+    if (m_windowStyle & wxTE_MULTILINE)
+    {
+        // how ?
+    }
+    else
+    {
+        SetWidgetStyle();
+        gtk_widget_set_style( m_text, m_widgetStyle );
+    }
+}
+
+void wxTextCtrl::OnCut(wxCommandEvent& WXUNUSED(event))
+{
+    Cut();
+}
+
+void wxTextCtrl::OnCopy(wxCommandEvent& WXUNUSED(event))
+{
+    Copy();
+}
+
+void wxTextCtrl::OnPaste(wxCommandEvent& WXUNUSED(event))
+{
+    Paste();