+    if (m_windowStyle & wxTE_MULTILINE)
+        return (window == GTK_TEXT(m_text)->text_area);
+    else
+        return (window == GTK_ENTRY(m_text)->text_area);
+}
+
+// the font will change for subsequent text insertiongs
+bool wxTextCtrl::SetFont( const wxFont &font )
+{
+    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();
+}
+
+void wxTextCtrl::OnUndo(wxCommandEvent& WXUNUSED(event))
+{
+    Undo();
+}
+
+void wxTextCtrl::OnRedo(wxCommandEvent& WXUNUSED(event))
+{
+    Redo();
+}
+
+void wxTextCtrl::OnUpdateCut(wxUpdateUIEvent& event)
+{
+    event.Enable( CanCut() );