]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/combobox.cpp
Implementation of wxFopen, wxFreopen, wxStrftime
[wxWidgets.git] / src / gtk / combobox.cpp
index efbe51763d8fd2b18fde0518b7dda40c974aebb9..20718dfae39cdb4da9be9a2883f05c6121b9d345 100644 (file)
@@ -16,8 +16,7 @@
 #if wxUSE_COMBOBOX
 
 #include "wx/settings.h"
-
-#include <wx/intl.h>
+#include "wx/intl.h"
 
 #include "gdk/gdk.h"
 #include "gtk/gtk.h"
@@ -166,13 +165,15 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
 
 wxComboBox::~wxComboBox()
 {
-    wxNode *node = m_clientDataList.First();
+    wxNode *node = m_clientObjectList.First();
     while (node)
     {
         wxClientData *cd = (wxClientData*)node->Data();
         if (cd) delete cd;
         node = node->Next();
     }
+    m_clientObjectList.Clear();
+
     m_clientDataList.Clear();
 }
 
@@ -421,8 +422,12 @@ void wxComboBox::SetSelection( int n )
 {
     wxCHECK_RET( m_widget != NULL, _T("invalid combobox") );
 
+    DisableEvents();
+
     GtkWidget *list = GTK_COMBO(m_widget)->list;
     gtk_list_select_item( GTK_LIST(list), n );
+
+    EnableEvents();
 }
 
 void wxComboBox::SetStringSelection( const wxString &string )
@@ -585,6 +590,32 @@ void wxComboBox::OnChar( wxKeyEvent &event )
     event.Skip();
 }
 
+void wxComboBox::DisableEvents()
+{
+    GtkList *list = GTK_LIST( GTK_COMBO(m_widget)->list );
+    GList *child = list->children;
+    while (child)
+    {
+        gtk_signal_disconnect_by_func( GTK_OBJECT(child->data), 
+          GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
+
+        child = child->next;
+    }
+}
+
+void wxComboBox::EnableEvents()
+{
+    GtkList *list = GTK_LIST( GTK_COMBO(m_widget)->list );
+    GList *child = list->children;
+    while (child)
+    {
+        gtk_signal_connect( GTK_OBJECT(child->data), "select",
+          GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
+
+        child = child->next;
+    }
+}
+
 void wxComboBox::OnSize( wxSizeEvent &event )
 {
     event.Skip();