]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/textctrl.cpp
more backwards compatibility for printing
[wxWidgets.git] / src / gtk / textctrl.cpp
index cc172bce3c2494af44c03ca0b85d0bd041bf05e0..94e4126e60c4f6cf993e979c51e4ca0ee515d8e2 100644 (file)
@@ -42,10 +42,9 @@ gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
     win->CalculateScrollbar();
 
     wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, win->m_windowId );
-    event.SetString( copystring(win->GetValue()) );
+    event.SetString( win->GetValue() );
     event.SetEventObject( win );
     win->GetEventHandler()->ProcessEvent( event );
-    delete[] event.GetString();
 }
 
 //-----------------------------------------------------------------------------
@@ -127,6 +126,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
 
         // ... and put into the upper left hand corner of the table
         m_widget = gtk_table_new(bHasHScrollbar ? 2 : 1, 2, FALSE);
+        GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
+       
         gtk_table_attach( GTK_TABLE(m_widget), m_text, 0, 1, 0, 1,
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
@@ -136,6 +137,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
         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),
                        GTK_FILL,
@@ -145,6 +148,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
 
         // 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 );
+       
         gtk_table_attach(GTK_TABLE(m_widget), m_vScrollbar, 1, 2, 0, 1,
                      GTK_FILL,
                      (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK),
@@ -293,15 +298,39 @@ void wxTextCtrl::WriteText( const wxString &text )
     if (m_windowStyle & wxTE_MULTILINE)
     {
         /* this moves the cursor pos to behind the inserted text */
+       gint len = GTK_EDITABLE(m_text)->current_pos;
        
+        gtk_editable_insert_text( GTK_EDITABLE(m_text), text, text.Length(), &len );
+       
+       /* bring editable's cursor uptodate. bug in GTK. */
+       GTK_EDITABLE(m_text)->current_pos = gtk_text_get_point( GTK_TEXT(m_text) );
+    }
+    else
+    {
+        /* this moves the cursor pos to behind the inserted text */
        gint len = GTK_EDITABLE(m_text)->current_pos;
-
         gtk_editable_insert_text( GTK_EDITABLE(m_text), text, text.Length(), &len );
        
        /* bring editable's cursor uptodate. bug in GTK. */
+       GTK_EDITABLE(m_text)->current_pos += text.Len();
+       
+       /* bring entry's cursor uptodate. bug in GTK. */
+       gtk_entry_set_position( GTK_ENTRY(m_text), GTK_EDITABLE(m_text)->current_pos );
+    }
+}
+
+void wxTextCtrl::AppendText( const wxString &text )
+{
+    wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
+
+    if (m_windowStyle & wxTE_MULTILINE)
+    {
+        /* we'll insert at the last position */
+        gint len = gtk_text_get_length( GTK_TEXT(m_text) );
+        gtk_editable_insert_text( GTK_EDITABLE(m_text), text, text.Length(), &len );
        
+       /* bring editable's cursor uptodate. bug in GTK. */
        GTK_EDITABLE(m_text)->current_pos = gtk_text_get_point( GTK_TEXT(m_text) );
-    
     }
     else
     {
@@ -565,6 +594,10 @@ void wxTextCtrl::SetInsertionPoint( long pos )
     else
     {
         gtk_entry_set_position( GTK_ENTRY(m_text), (int)pos );
+       
+       /* bring editable's cursor uptodate. bug in GTK. */
+       
+       GTK_EDITABLE(m_text)->current_pos = pos;
     }
 }
 
@@ -641,7 +674,7 @@ void wxTextCtrl::Cut()
 {
     wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
 
-#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MINOR_VERSION > 0)
     gtk_editable_cut_clipboard( GTK_EDITABLE(m_text) );
 #else
     gtk_editable_cut_clipboard( GTK_EDITABLE(m_text), 0 );
@@ -652,7 +685,7 @@ void wxTextCtrl::Copy()
 {
     wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
 
-#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MINOR_VERSION > 0)
     gtk_editable_copy_clipboard( GTK_EDITABLE(m_text) );
 #else
     gtk_editable_copy_clipboard( GTK_EDITABLE(m_text), 0 );
@@ -663,7 +696,7 @@ void wxTextCtrl::Paste()
 {
     wxCHECK_RET( m_text != NULL, "invalid text ctrl" );
 
-#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MINOR_VERSION > 0)
     gtk_editable_paste_clipboard( GTK_EDITABLE(m_text) );
 #else
     gtk_editable_paste_clipboard( GTK_EDITABLE(m_text), 0 );
@@ -721,7 +754,7 @@ int wxTextCtrl::underflow()
 
 wxTextCtrl& wxTextCtrl::operator<<(const wxString& s)
 {
-    WriteText(s);
+    AppendText(s);
     return *this;
 }
 
@@ -729,7 +762,7 @@ wxTextCtrl& wxTextCtrl::operator<<(float f)
 {
     static char buf[100];
     sprintf(buf, "%.2f", f);
-    WriteText(buf);
+    AppendText(buf);
     return *this;
 }
 
@@ -737,7 +770,7 @@ wxTextCtrl& wxTextCtrl::operator<<(double d)
 {
     static char buf[100];
     sprintf(buf, "%.2f", d);
-    WriteText(buf);
+    AppendText(buf);
     return *this;
 }
 
@@ -745,7 +778,7 @@ wxTextCtrl& wxTextCtrl::operator<<(int i)
 {
     static char buf[100];
     sprintf(buf, "%i", i);
-    WriteText(buf);
+    AppendText(buf);
     return *this;
 }
 
@@ -753,7 +786,7 @@ wxTextCtrl& wxTextCtrl::operator<<(long i)
 {
     static char buf[100];
     sprintf(buf, "%ld", i);
-    WriteText(buf);
+    AppendText(buf);
     return *this;
 }
 
@@ -763,7 +796,7 @@ wxTextCtrl& wxTextCtrl::operator<<(const char c)
 
     buf[0] = c;
     buf[1] = 0;
-    WriteText(buf);
+    AppendText(buf);
     return *this;
 }
 #endif