X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f03fc89fff2d6e823e7d4d14fbe14822ad6777b1..28d2a709de9d2e85f70d78affadaf1a5930b23d4:/src/gtk1/textctrl.cpp diff --git a/src/gtk1/textctrl.cpp b/src/gtk1/textctrl.cpp index 0d41807702..73293accf3 100644 --- a/src/gtk1/textctrl.cpp +++ b/src/gtk1/textctrl.cpp @@ -44,9 +44,10 @@ extern bool g_blockEventsOnDrag; static void gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win ) { - if (g_isIdle) wxapp_install_idle_handler(); + if (!win->m_hasVMT) return; - if (!win->HasVMT()) return; + if (g_isIdle) + wxapp_install_idle_handler(); win->SetModified(); @@ -63,11 +64,12 @@ gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win ) static void gtk_scrollbar_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win ) { - if (g_isIdle) wxapp_install_idle_handler(); + if (!win->m_hasVMT) return; + + if (g_isIdle) + wxapp_install_idle_handler(); win->CalculateScrollbar(); - - if (!win->HasVMT()) return; } //----------------------------------------------------------------------------- @@ -156,16 +158,17 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK), 0, 0); - + /* always wrap words */ gtk_text_set_word_wrap( GTK_TEXT(m_text), TRUE ); + /* put the horizontal scrollbar in the lower left hand corner */ if (bHasHScrollbar) { GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj); GTK_WIDGET_UNSET_FLAGS( hscrollbar, GTK_CAN_FOCUS ); gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); gtk_widget_show(hscrollbar); @@ -175,6 +178,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value, gtk_text_set_line_wrap( GTK_TEXT(m_text), FALSE ); #endif } + /* finally, put the vertical scrollbar in the upper right corner */ m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj ); GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS ); @@ -254,7 +258,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value, gtk_text_set_editable( GTK_TEXT(m_text), 1 ); } - SetBackgroundColour( parent->GetBackgroundColour() ); + SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) ); SetForegroundColour( parent->GetForegroundColour() ); Show( TRUE ); @@ -273,7 +277,6 @@ void wxTextCtrl::CalculateScrollbar() if (m_vScrollbarVisible) { gtk_widget_hide( m_vScrollbar ); - m_vScrollbarVisible = FALSE; } } @@ -282,7 +285,6 @@ void wxTextCtrl::CalculateScrollbar() if (!m_vScrollbarVisible) { gtk_widget_show( m_vScrollbar ); - m_vScrollbarVisible = TRUE; } } @@ -311,6 +313,9 @@ void wxTextCtrl::SetValue( const wxString &value ) { wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") ); + gtk_signal_disconnect_by_func( GTK_OBJECT(m_text), + GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this); + wxString tmp = _T(""); if (!value.IsNull()) tmp = value; if (m_windowStyle & wxTE_MULTILINE) @@ -329,6 +334,9 @@ void wxTextCtrl::SetValue( const wxString &value ) { gtk_entry_set_text( GTK_ENTRY(m_text), tmp.mbc_str() ); } + + gtk_signal_connect( GTK_OBJECT(m_text), "changed", + GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this); } void wxTextCtrl::WriteText( const wxString &text )