]> git.saurik.com Git - wxWidgets.git/commitdiff
Some #include and #if wxUSE_XX things
authorRobert Roebling <robert@roebling.de>
Tue, 22 Jun 1999 08:36:29 +0000 (08:36 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 22 Jun 1999 08:36:29 +0000 (08:36 +0000)
  Shut up notification in wxTextCtrl
  Made things compile again...

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2858 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

25 files changed:
include/wx/docmdi.h
include/wx/gtk/statbmp.h
include/wx/gtk1/statbmp.h
include/wx/sckaddr.h
include/wx/sckint.h
src/common/config.cpp
src/common/date.cpp
src/common/datstrm.cpp
src/common/dcbase.cpp
src/common/docmdi.cpp
src/common/docview.cpp
src/common/dynlib.cpp
src/common/file.cpp
src/common/fileconf.cpp
src/common/ftp.cpp
src/common/http.cpp
src/common/mstream.cpp
src/common/objstrm.cpp
src/common/protocol.cpp
src/common/sckaddr.cpp
src/generic/gridg.cpp
src/gtk/statbmp.cpp
src/gtk/textctrl.cpp
src/gtk1/statbmp.cpp
src/gtk1/textctrl.cpp

index 1fd76e1abead436d325d13ee0357b29355f04fd6..5c58befd40f1cf07173a165989f17a03d1fa2761 100644 (file)
 #pragma interface "docmdi.h"
 #endif
 
+#include "wx/defs.h"
+
+#if wxUSE_MDI_ARCHITECTURE
+
 #include "wx/docview.h"
 #include "wx/mdi.h"
 
@@ -79,5 +83,8 @@ DECLARE_EVENT_TABLE()
 
 };
 
+#endif
+    // wxUSE_MDI_ARCHITECTURE
+    
 #endif
     // _WX_DOCMDI_H_
index c24b2128705a0dbba740a6432fa782fbf53028d2..7f902acf835267d305ea9cb49f54336555b7c41c 100644 (file)
@@ -22,6 +22,7 @@
 #include "wx/object.h"
 #include "wx/control.h"
 #include "wx/bitmap.h"
+#include "wx/icon.h"
 
 //-----------------------------------------------------------------------------
 // classes
@@ -66,8 +67,7 @@ public:
     const wxBitmap& GetBitmap() const { return m_bitmap; }
 
     // for compatibility with wxMSW
-    wxIcon& GetIcon()
-        { return *(wxDynamicCast(&m_bitmap, wxIcon)); }
+    wxIcon& GetIcon();
 
 private:
     wxBitmap   m_bitmap;
index c24b2128705a0dbba740a6432fa782fbf53028d2..7f902acf835267d305ea9cb49f54336555b7c41c 100644 (file)
@@ -22,6 +22,7 @@
 #include "wx/object.h"
 #include "wx/control.h"
 #include "wx/bitmap.h"
+#include "wx/icon.h"
 
 //-----------------------------------------------------------------------------
 // classes
@@ -66,8 +67,7 @@ public:
     const wxBitmap& GetBitmap() const { return m_bitmap; }
 
     // for compatibility with wxMSW
-    wxIcon& GetIcon()
-        { return *(wxDynamicCast(&m_bitmap, wxIcon)); }
+    wxIcon& GetIcon();
 
 private:
     wxBitmap   m_bitmap;
index 392a9d138749437b990ae7bedcc82d9d6257646d..b182548948986108844187eeea2fde85ab44e84e 100644 (file)
@@ -8,9 +8,18 @@
 // Copyright:   (c) 1997, 1998 Guilhem Lavaux
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
+
 #ifndef _WX_NETWORK_ADDRESS_H
 #define _WX_NETWORK_ADDRESS_H
 
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "wx/defs.h"
+
+#if wxUSE_SOCKETS
+
 #if defined(__WINDOWS__) && defined(WXSOCK_INTERNAL)
 #include <winsock.h>
 
 #include <netinet/in.h>
 #endif
 
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#ifdef WXPREC
-#include <wx/wxprec.h>
-#else
-#include <wx/wx.h>
-#endif
+#include "wx/string.h"
 
 class WXDLLEXPORT wxSockAddress : public wxObject {
   DECLARE_ABSTRACT_CLASS(wxSockAddress)
@@ -132,5 +133,10 @@ public:
   inline int Type() { return wxSockAddress::UNIX; }
 };
 #endif
+  // __UNIX__
 
 #endif
+  // wxUSE_SOCKETS
+  
+#endif
+  // _WX_NETWORK_ADDRESS_H
index 3fec426a7a1efe1c5e57dde1174da75128f461d5..1b1ae550836949d48f7393dfdba4152a8f10e866 100644 (file)
 #pragma interface
 #endif
 
+#include "wx/defs.h"
+
 #if wxUSE_SOCKETS
 
-#include <wx/object.h>
-#include <wx/list.h>
-#include <wx/socket.h>
-#include <wx/thread.h>
+#include "wx/object.h"
+#include "wx/list.h"
+#include "wx/socket.h"
+#include "wx/thread.h"
 
 // Socket state
 class SocketState
index c0b5c8570065fd3bc767c8a358a7ab31083a388d..fc96bb57f6e5a423ea7296503739cc86f46dc621 100644 (file)
   #pragma hdrstop
 #endif  //__BORLANDC__
 
-#ifndef WX_PRECOMP
-  #include "wx/defs.h"
-#endif
-
 #if wxUSE_CONFIG && ((wxUSE_FILE && wxUSE_TEXTFILE) || defined(wxCONFIG_WIN32_NATIVE))
 
 #include "wx/app.h"
index db287ab3168ec88d4559a4fbc5f28841e29498bb..4d8a901c8c7cb7f363032df36266d0d787b7053f 100644 (file)
   #pragma hdrstop
 #endif
 
-#ifndef WX_PRECOMP
-  #include "wx/defs.h"
-#endif
-
 #if wxUSE_TIMEDATE
 
 #include "wx/date.h"
index aff9c5355cf36a51f181592488ae842489eb420b..4ccada0e8829c266f1cc2d3b2d813c73fe0503d1 100644 (file)
   #pragma hdrstop
 #endif
 
-#ifndef WX_PRECOMP
-  #include "wx/defs.h"
-#endif
-
 #if wxUSE_STREAMS
 
 #include "wx/datstrm.h"
index 755f2ccbb3f19184b2cc267fd39401c68296bee5..3f2efc403cad85922e95b80839379444f661c5ae 100644 (file)
@@ -17,7 +17,7 @@
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+  #pragma hdrstop
 #endif
 
 #ifndef WX_PRECOMP
index 6e92c70f57f174dfe3fbda1f35052486af35bee0..4038ddb70024811d9f165641f98f6c15e80c5063 100644 (file)
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
-#ifndef WX_PRECOMP
-#include "wx/defs.h"
+  #pragma hdrstop
 #endif
 
 #if wxUSE_DOC_VIEW_ARCHITECTURE
 
-#ifndef WX_PRECOMP
-#include "wx/wx.h"
-#endif
-
 #include "wx/docmdi.h"
 
 /*
index a7fd1a22094b5b4bd53bffb8c88883cdcdbbf618..fed454d4e866008e4461a49e5a91e01e6fd84d7f 100644 (file)
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#ifndef WX_PRECOMP
-    #include "wx/defs.h"
+  #pragma hdrstop
 #endif
 
 #if wxUSE_DOC_VIEW_ARCHITECTURE
index 40bba2b170f7da2a275183760200386136115c95..d7b654faa192bf9e6b0a94f0da5d1b2d56e603f3 100644 (file)
@@ -23,9 +23,9 @@
 
 #include  "wx/wxprec.h"
 
-#ifdef    __BORLANDC__
-#   pragma hdrstop
-#endif  //__BORLANDC__
+#ifdef __BORLANDC__
+  #pragma hdrstop
+#endif
 
 #if wxUSE_DYNLIB_CLASS
 
index 6702d2dd83457937159dc1c4dde1feabcbbaedd6..8f1f1deb762606cfac42867b9ea351884eabc576 100644 (file)
   #pragma hdrstop
 #endif
 
-#ifndef WX_PRECOMP
-  #include "wx/defs.h"
-#endif
-
 #if wxUSE_FILE
 
 // standard
index 231c1564829a5894896448e82cc201b6372235d5..c15130a1849e73781fa672a92cfb2eff6793c9c0 100644 (file)
 #pragma implementation "fileconf.h"
 #endif
 
-// ============================================================================
-// declarations
-// ============================================================================
-
 // ----------------------------------------------------------------------------
 // headers
 // ----------------------------------------------------------------------------
index 090138b5d7a1cb472402f93fb175f19a65c6ef18..b513f7e404c5673d2f45eb49f16808db620777f0 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-#pragma implementation "ftp.h"
+  #pragma implementation "ftp.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+  #pragma hdrstop
 #endif
 
 #if wxUSE_SOCKETS
index a7e14752b4574ee319fc3c99765788957fd91918..c13c7a1bb7695d73f609aec8683a7f4fb0b29c1a 100644 (file)
@@ -10,7 +10,7 @@
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-#pragma implementation "http.h"
+  #pragma implementation "http.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
   #pragma hdrstop
 #endif
 
-#ifndef WX_PRECOMP
-  #include "wx/defs.h"
-#endif
-
 #if wxUSE_SOCKETS
 
 #include <stdio.h>
index c9f23704668d4a52def03835fa52ec7abc53921a..c6a58a04a19263c3ef1c6b2e6e54d67c5d71a3aa 100644 (file)
   #pragma hdrstop
 #endif
 
-#ifndef WX_PRECOMP
-  #include "wx/defs.h"
-#endif
-
 #if wxUSE_STREAMS
 
 #include <stdlib.h>
index 4de828ae72618a03191f7ad3275a6cb50ac93b9f..0f4a38608ace2453da814688bf36f074569c1d8f 100644 (file)
   #pragma hdrstop
 #endif
 
-#ifndef WX_PRECOMP
-  #include "wx/defs.h"
-#endif
-
 #if wxUSE_SERIAL && wxUSE_STREAMS
 
 #include "wx/object.h"
index ac5020956faca9836520bd8fcfe711ac96b7ea27..736b38fd1359312a1877a0fd6cbd1407384de107 100644 (file)
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+  #pragma hdrstop
 #endif
 
 #if wxUSE_SOCKETS
 
-#ifndef WX_PRECOMP
-#include <wx/wx.h>
-#endif
-
 #include "wx/protocol/protocol.h"
 #include "wx/url.h"
 #include "wx/module.h"
index 1656a2c8b763ce06432f977ccfeb4c39aad05a65..ab9a1f78c68cef6e8035b2b2bd16ef499ef10305 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-#pragma implementation "sckaddr.h"
+  #pragma implementation "sckaddr.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+  #pragma hdrstop
 #endif
 
 #if wxUSE_SOCKETS
index bfd5c3928bb466bfb92c9e4003c080121b9580df..82e11ce420f142f65f7df139eaddb15ac9c0c6e1 100644 (file)
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+  #pragma hdrstop
 #endif
 
 #ifndef WX_PRECOMP
-#include "wx/wx.h"
+  #include "wx/utils.h"
+  #include "wx/dcclient.h"
+  #include "wx/dcmemory.h"
+  #include "wx/textctrl.h"
 #endif
 
 #include <string.h>
index 30431837bffdd954bf70fb5067a94447c2999da5..ad12ed7cf20e36f4544ee1a55c23ab656aa91903 100644 (file)
@@ -83,4 +83,13 @@ void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap )
     }
 }
 
+wxIcon& wxStaticBitmap::GetIcon()
+{
+    wxIcon *icon = wxDynamicCast(&m_bitmap, wxIcon);
+    
+    if (!icon) return wxNullIcon;
+    
+    return *icon;
+}
+
 #endif
index fb10ca0a249fc195e8497ba14052fb18b7fe34ea..c83a8aeb71fe1f283be97f5c2955c4ac6f4d6c06 100644 (file)
@@ -345,8 +345,11 @@ void wxTextCtrl::WriteText( const wxString &text )
 {
     wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
 
-    if (text.IsNull()) return;
+    if (text.IsEmpty()) return;
 
+    gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+      
     if (m_windowStyle & wxTE_MULTILINE)
     {
         /* this moves the cursor pos to behind the inserted text */
@@ -379,12 +382,20 @@ void wxTextCtrl::WriteText( const wxString &text )
         /* bring entry's cursor uptodate. bug in GTK. */
         gtk_entry_set_position( GTK_ENTRY(m_text), GTK_EDITABLE(m_text)->current_pos );
     }
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 void wxTextCtrl::AppendText( const wxString &text )
 {
     wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
 
+    if (text.IsEmpty()) return;
+
+    gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+      
     if (m_windowStyle & wxTE_MULTILINE)
     {
         /* we'll insert at the last position */
@@ -403,82 +414,91 @@ void wxTextCtrl::AppendText( const wxString &text )
     {
         gtk_entry_append_text( GTK_ENTRY(m_text), text.mbc_str() );
     }
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 bool wxTextCtrl::LoadFile( const wxString &file )
 {
-  wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
+    wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
 
-  if (!wxFileExists(file)) return FALSE;
+    if (!wxFileExists(file)) return FALSE;
 
-  Clear();
+    Clear();
 
-  FILE *fp = (FILE*) NULL;
-  struct stat statb;
+    FILE *fp = (FILE*) NULL;
+    struct stat statb;
 
-  if ((stat (FNSTRINGCAST file.fn_str(), &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG ||
-      !(fp = fopen (FNSTRINGCAST file.fn_str(), "r")))
-  {
-      return FALSE;
-  }
-  else
-  {
-    gint len = statb.st_size;
-    char *text;
-    if (!(text = (char*)malloc ((unsigned) (len + 1))))
+    if ((stat (FNSTRINGCAST file.fn_str(), &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG ||
+        !(fp = fopen (FNSTRINGCAST file.fn_str(), "r")))
     {
-      fclose (fp);
-      return FALSE;
+        return FALSE;
     }
-    if (fread (text, sizeof (char), len, fp) != (size_t) len)
+    else
     {
-    }
-    fclose (fp);
+        gint len = statb.st_size;
+        char *text;
+        if (!(text = (char*)malloc ((unsigned) (len + 1))))
+        {
+            fclose (fp);
+            return FALSE;
+        }
+        if (fread (text, sizeof (char), len, fp) != (size_t) len)
+        {
+        }
+        fclose (fp);
 
-    text[len] = 0;
+        text[len] = 0;
 
-    if (m_windowStyle & wxTE_MULTILINE)
-    {
-      gint pos = 0;
-      gtk_editable_insert_text( GTK_EDITABLE(m_text), text, len, &pos );
-    }
-    else
-    {
-      gtk_entry_set_text( GTK_ENTRY(m_text), text );
+        gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+          GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+      
+        if (m_windowStyle & wxTE_MULTILINE)
+        {
+            gint pos = 0;
+            gtk_editable_insert_text( GTK_EDITABLE(m_text), text, len, &pos );
+        }
+        else
+        {
+            gtk_entry_set_text( GTK_ENTRY(m_text), text );
+        }
+    
+        gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+          GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+      
+        free (text);
+        m_modified = FALSE;
+        return TRUE;
     }
-
-    free (text);
-    m_modified = FALSE;
-    return TRUE;
-  }
-  return FALSE;
+    return FALSE;
 }
 
 bool wxTextCtrl::SaveFile( const wxString &file )
 {
-  wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
+    wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
 
-  if (file == _T("")) return FALSE;
+    if (file == _T("")) return FALSE;
 
-  FILE *fp;
+    FILE *fp;
 
-  if (!(fp = fopen (FNSTRINGCAST file.fn_str(), "w")))
+    if (!(fp = fopen (FNSTRINGCAST file.fn_str(), "w")))
     {
-      return FALSE;
+        return FALSE;
     }
-  else
+    else
     {
       char *text = (char*) NULL;
       gint len = 0;
 
       if (m_windowStyle & wxTE_MULTILINE)
       {
-        len = gtk_text_get_length( GTK_TEXT(m_text) );
-        text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
+          len = gtk_text_get_length( GTK_TEXT(m_text) );
+          text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
       }
       else
       {
-        text = gtk_entry_get_text( GTK_ENTRY(m_text) );
+          text = gtk_entry_get_text( GTK_ENTRY(m_text) );
       }
 
       if (fwrite (text, sizeof (char), len, fp) != (size_t) len)
@@ -498,7 +518,7 @@ bool wxTextCtrl::SaveFile( const wxString &file )
       return TRUE;
     }
 
-  return TRUE;
+    return TRUE;
 }
 
 wxString wxTextCtrl::GetLineText( long lineNo ) const
@@ -724,33 +744,54 @@ void wxTextCtrl::Remove( long from, long to )
 {
     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);
+      
     gtk_editable_delete_text( GTK_EDITABLE(m_text), (gint)from, (gint)to );
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 void wxTextCtrl::Replace( long from, long to, 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);
+      
     gtk_editable_delete_text( GTK_EDITABLE(m_text), (gint)from, (gint)to );
-    if (value.IsNull()) return;
-    gint pos = (gint)from;
+    
+    if (!value.IsEmpty())
+    {
+        gint pos = (gint)from;
 #if wxUSE_UNICODE
-    wxWX2MBbuf buf = value.mbc_str();
-    gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &pos );
+        wxWX2MBbuf buf = value.mbc_str();
+        gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &pos );
 #else
-    gtk_editable_insert_text( GTK_EDITABLE(m_text), value, value.Length(), &pos );
+        gtk_editable_insert_text( GTK_EDITABLE(m_text), value, value.Length(), &pos );
 #endif
+    }
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 void wxTextCtrl::Cut()
 {
     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);
+      
 #if (GTK_MINOR_VERSION > 0)
     gtk_editable_cut_clipboard( GTK_EDITABLE(m_text) );
 #else
     gtk_editable_cut_clipboard( GTK_EDITABLE(m_text), 0 );
 #endif
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 void wxTextCtrl::Copy()
@@ -768,11 +809,17 @@ void wxTextCtrl::Paste()
 {
     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);
+      
 #if (GTK_MINOR_VERSION > 0)
     gtk_editable_paste_clipboard( GTK_EDITABLE(m_text) );
 #else
     gtk_editable_paste_clipboard( GTK_EDITABLE(m_text), 0 );
 #endif
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 bool wxTextCtrl::CanCopy() const
index 30431837bffdd954bf70fb5067a94447c2999da5..ad12ed7cf20e36f4544ee1a55c23ab656aa91903 100644 (file)
@@ -83,4 +83,13 @@ void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap )
     }
 }
 
+wxIcon& wxStaticBitmap::GetIcon()
+{
+    wxIcon *icon = wxDynamicCast(&m_bitmap, wxIcon);
+    
+    if (!icon) return wxNullIcon;
+    
+    return *icon;
+}
+
 #endif
index fb10ca0a249fc195e8497ba14052fb18b7fe34ea..c83a8aeb71fe1f283be97f5c2955c4ac6f4d6c06 100644 (file)
@@ -345,8 +345,11 @@ void wxTextCtrl::WriteText( const wxString &text )
 {
     wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
 
-    if (text.IsNull()) return;
+    if (text.IsEmpty()) return;
 
+    gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+      
     if (m_windowStyle & wxTE_MULTILINE)
     {
         /* this moves the cursor pos to behind the inserted text */
@@ -379,12 +382,20 @@ void wxTextCtrl::WriteText( const wxString &text )
         /* bring entry's cursor uptodate. bug in GTK. */
         gtk_entry_set_position( GTK_ENTRY(m_text), GTK_EDITABLE(m_text)->current_pos );
     }
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 void wxTextCtrl::AppendText( const wxString &text )
 {
     wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
 
+    if (text.IsEmpty()) return;
+
+    gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+      
     if (m_windowStyle & wxTE_MULTILINE)
     {
         /* we'll insert at the last position */
@@ -403,82 +414,91 @@ void wxTextCtrl::AppendText( const wxString &text )
     {
         gtk_entry_append_text( GTK_ENTRY(m_text), text.mbc_str() );
     }
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 bool wxTextCtrl::LoadFile( const wxString &file )
 {
-  wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
+    wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
 
-  if (!wxFileExists(file)) return FALSE;
+    if (!wxFileExists(file)) return FALSE;
 
-  Clear();
+    Clear();
 
-  FILE *fp = (FILE*) NULL;
-  struct stat statb;
+    FILE *fp = (FILE*) NULL;
+    struct stat statb;
 
-  if ((stat (FNSTRINGCAST file.fn_str(), &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG ||
-      !(fp = fopen (FNSTRINGCAST file.fn_str(), "r")))
-  {
-      return FALSE;
-  }
-  else
-  {
-    gint len = statb.st_size;
-    char *text;
-    if (!(text = (char*)malloc ((unsigned) (len + 1))))
+    if ((stat (FNSTRINGCAST file.fn_str(), &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG ||
+        !(fp = fopen (FNSTRINGCAST file.fn_str(), "r")))
     {
-      fclose (fp);
-      return FALSE;
+        return FALSE;
     }
-    if (fread (text, sizeof (char), len, fp) != (size_t) len)
+    else
     {
-    }
-    fclose (fp);
+        gint len = statb.st_size;
+        char *text;
+        if (!(text = (char*)malloc ((unsigned) (len + 1))))
+        {
+            fclose (fp);
+            return FALSE;
+        }
+        if (fread (text, sizeof (char), len, fp) != (size_t) len)
+        {
+        }
+        fclose (fp);
 
-    text[len] = 0;
+        text[len] = 0;
 
-    if (m_windowStyle & wxTE_MULTILINE)
-    {
-      gint pos = 0;
-      gtk_editable_insert_text( GTK_EDITABLE(m_text), text, len, &pos );
-    }
-    else
-    {
-      gtk_entry_set_text( GTK_ENTRY(m_text), text );
+        gtk_signal_disconnect_by_func( GTK_OBJECT(m_text),
+          GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+      
+        if (m_windowStyle & wxTE_MULTILINE)
+        {
+            gint pos = 0;
+            gtk_editable_insert_text( GTK_EDITABLE(m_text), text, len, &pos );
+        }
+        else
+        {
+            gtk_entry_set_text( GTK_ENTRY(m_text), text );
+        }
+    
+        gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+          GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+      
+        free (text);
+        m_modified = FALSE;
+        return TRUE;
     }
-
-    free (text);
-    m_modified = FALSE;
-    return TRUE;
-  }
-  return FALSE;
+    return FALSE;
 }
 
 bool wxTextCtrl::SaveFile( const wxString &file )
 {
-  wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
+    wxCHECK_MSG( m_text != NULL, FALSE, _T("invalid text ctrl") );
 
-  if (file == _T("")) return FALSE;
+    if (file == _T("")) return FALSE;
 
-  FILE *fp;
+    FILE *fp;
 
-  if (!(fp = fopen (FNSTRINGCAST file.fn_str(), "w")))
+    if (!(fp = fopen (FNSTRINGCAST file.fn_str(), "w")))
     {
-      return FALSE;
+        return FALSE;
     }
-  else
+    else
     {
       char *text = (char*) NULL;
       gint len = 0;
 
       if (m_windowStyle & wxTE_MULTILINE)
       {
-        len = gtk_text_get_length( GTK_TEXT(m_text) );
-        text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
+          len = gtk_text_get_length( GTK_TEXT(m_text) );
+          text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len );
       }
       else
       {
-        text = gtk_entry_get_text( GTK_ENTRY(m_text) );
+          text = gtk_entry_get_text( GTK_ENTRY(m_text) );
       }
 
       if (fwrite (text, sizeof (char), len, fp) != (size_t) len)
@@ -498,7 +518,7 @@ bool wxTextCtrl::SaveFile( const wxString &file )
       return TRUE;
     }
 
-  return TRUE;
+    return TRUE;
 }
 
 wxString wxTextCtrl::GetLineText( long lineNo ) const
@@ -724,33 +744,54 @@ void wxTextCtrl::Remove( long from, long to )
 {
     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);
+      
     gtk_editable_delete_text( GTK_EDITABLE(m_text), (gint)from, (gint)to );
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 void wxTextCtrl::Replace( long from, long to, 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);
+      
     gtk_editable_delete_text( GTK_EDITABLE(m_text), (gint)from, (gint)to );
-    if (value.IsNull()) return;
-    gint pos = (gint)from;
+    
+    if (!value.IsEmpty())
+    {
+        gint pos = (gint)from;
 #if wxUSE_UNICODE
-    wxWX2MBbuf buf = value.mbc_str();
-    gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &pos );
+        wxWX2MBbuf buf = value.mbc_str();
+        gtk_editable_insert_text( GTK_EDITABLE(m_text), buf, strlen(buf), &pos );
 #else
-    gtk_editable_insert_text( GTK_EDITABLE(m_text), value, value.Length(), &pos );
+        gtk_editable_insert_text( GTK_EDITABLE(m_text), value, value.Length(), &pos );
 #endif
+    }
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 void wxTextCtrl::Cut()
 {
     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);
+      
 #if (GTK_MINOR_VERSION > 0)
     gtk_editable_cut_clipboard( GTK_EDITABLE(m_text) );
 #else
     gtk_editable_cut_clipboard( GTK_EDITABLE(m_text), 0 );
 #endif
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 void wxTextCtrl::Copy()
@@ -768,11 +809,17 @@ void wxTextCtrl::Paste()
 {
     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);
+      
 #if (GTK_MINOR_VERSION > 0)
     gtk_editable_paste_clipboard( GTK_EDITABLE(m_text) );
 #else
     gtk_editable_paste_clipboard( GTK_EDITABLE(m_text), 0 );
 #endif
+    
+    gtk_signal_connect( GTK_OBJECT(m_text), "changed",
+      GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 }
 
 bool wxTextCtrl::CanCopy() const