- 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, _T("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, _T("invalid text ctrl") );
+
+ // doesn't work
+ return FALSE;
+}
+
+bool wxTextCtrl::SetBackgroundColour( const wxColour &colour )
+{
+ wxCHECK_MSG( m_text != NULL, FALSE, _T("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() );
+}
+
+void wxTextCtrl::OnUpdateCopy(wxUpdateUIEvent& event)
+{
+ event.Enable( CanCopy() );
+}
+
+void wxTextCtrl::OnUpdatePaste(wxUpdateUIEvent& event)
+{
+ event.Enable( CanPaste() );
+}
+
+void wxTextCtrl::OnUpdateUndo(wxUpdateUIEvent& event)
+{
+ event.Enable( CanUndo() );