]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/textctrl.cpp
don't try to access empty wxIconBundle in gtk_frame_realized_callback
[wxWidgets.git] / src / gtk1 / textctrl.cpp
index e472846bb0f1396264dd205c0fe1fe8ba750ef2d..b789f65908ca7ec3cc40c9c2030d6fd26a190612 100644 (file)
 
 #ifndef WX_PRECOMP
     #include "wx/intl.h"
+    #include "wx/log.h"
+    #include "wx/utils.h"
+    #include "wx/panel.h"
+    #include "wx/settings.h"
+    #include "wx/math.h"
 #endif
 
-#include "wx/utils.h"
-#include "wx/log.h"
-#include "wx/math.h"
-#include "wx/settings.h"
-#include "wx/panel.h"
 #include "wx/strconv.h"
 #include "wx/fontutil.h"        // for wxNativeFontInfo (GetNativeFontInfo())
 
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <ctype.h>
-#include "wx/math.h"
 
 #include "wx/gtk1/private.h"
 #include <gdk/gdkkeysyms.h>
@@ -188,9 +187,9 @@ static void wxgtk_text_draw( GtkWidget *widget, GdkRectangle *rect)
 //  wxTextCtrl
 //-----------------------------------------------------------------------------
 
-IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl,wxControl)
+IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxTextCtrlBase)
 
-BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
+BEGIN_EVENT_TABLE(wxTextCtrl, wxTextCtrlBase)
     EVT_CHAR(wxTextCtrl::OnChar)
 
     EVT_MENU(wxID_CUT, wxTextCtrl::OnCut)
@@ -413,10 +412,16 @@ wxString wxTextCtrl::GetValue() const
     return tmp;
 }
 
-void wxTextCtrl::SetValue( const wxString &value )
+void wxTextCtrl::DoSetValue( const wxString &value, int flags )
 {
     wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
 
+    if ( !(flags & SetValue_SendEvent) )
+    {
+        // do not generate events
+        IgnoreNextTextUpdate();
+    }
+
     if (m_windowStyle & wxTE_MULTILINE)
     {
         gint len = gtk_text_get_length( GTK_TEXT(m_text) );
@@ -458,7 +463,7 @@ void wxTextCtrl::WriteText( const wxString &text )
         // resetting the style and appending some more text wouldn't work: if
         // we don't specify the style explicitly, the old style would be used
         gtk_editable_delete_selection( GTK_EDITABLE(m_text) );
-        wxGtkTextInsert(m_text, m_defaultStyle, text.c_str(), text.Len());
+        wxGtkTextInsert(m_text, m_defaultStyle, text.c_str(), text.length());
 
         // we called wxGtkTextInsert with correct font, no need to do anything
         // in UpdateFontIfNeeded() any longer
@@ -478,7 +483,7 @@ void wxTextCtrl::WriteText( const wxString &text )
         // This moves the cursor pos to behind the inserted text.
         gint len = GET_EDITABLE_POS(m_text);
 
-        gtk_editable_insert_text( GTK_EDITABLE(m_text), text.c_str(), text.Len(), &len );
+        gtk_editable_insert_text( GTK_EDITABLE(m_text), text.c_str(), text.length(), &len );
 
         // Bring entry's cursor uptodate.
         gtk_entry_set_position( GTK_ENTRY(m_text), len );
@@ -542,7 +547,7 @@ bool wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
         wxString text = GetValue();
 
         // cast to prevent warning. But pos really should've been unsigned.
-        if( (unsigned long)pos > text.Len()  )
+        if( (unsigned long)pos > text.length()  )
             return false;
 
         *x=0;   // First Col
@@ -685,32 +690,26 @@ void wxTextCtrl::SetEditable( bool editable )
     }
 }
 
-bool wxTextCtrl::Enable( bool enable )
+void wxTextCtrl::DoEnable( bool enable )
 {
-    if (!wxWindowBase::Enable(enable))
-    {
-        // nothing to do
-        return false;
-    }
-
     if (m_windowStyle & wxTE_MULTILINE)
     {
         gtk_text_set_editable( GTK_TEXT(m_text), enable );
-        OnParentEnable(enable);
     }
     else
     {
         gtk_widget_set_sensitive( m_text, enable );
     }
-
-    return true;
 }
 
 // wxGTK-specific: called recursively by Enable,
 // to give widgets an oppprtunity to correct their colours after they
 // have been changed by Enable
-void wxTextCtrl::OnParentEnable( bool enable )
+void wxTextCtrl::OnEnabled( bool enable )
 {
+    if ( IsSingleLine() )
+        return;
+
     // If we have a custom background colour, we use this colour in both
     // disabled and enabled mode, or we end up with a different colour under the
     // text.