- GtkWidget *list = GTK_COMBO(m_widget)->list;
- gtk_list_clear_items( GTK_LIST(list), n, n );
-
- wxNode *node = m_clientData.Nth( n );
- if (!node)
- {
- wxFAIL_MSG("wxComboBox::Delete wrong index");
- }
- else
- m_clientData.DeleteNode( node );
-};
-
-int wxComboBox::FindString( const wxString &item )
-{
- GtkWidget *list = GTK_COMBO(m_widget)->list;
-
- GList *child = GTK_LIST(list)->children;
- int count = 0;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- if (item == label->label) return count;
- count++;
- child = child->next;
- };
- return -1;
-};
-
-char* wxComboBox::GetClientData( int n )
+ if (!PreCreation( parent, pos, size ) ||
+ !CreateBase( parent, id, pos, size, style, validator, name ))
+ {
+ wxFAIL_MSG( wxT("wxComboBox creation failed") );
+ return false;
+ }
+
+ if (HasFlag(wxCB_SORT))
+ m_strings = new wxSortedArrayString();
+
+ GTKCreateComboBoxWidget();
+
+ if (HasFlag(wxBORDER_NONE))
+ {
+ // Doesn't seem to work
+ // g_object_set (m_widget, "has-frame", FALSE, NULL);
+ }
+
+ GtkEntry * const entry = GetEntry();
+
+ if ( entry )
+ {
+ // Set it up to trigger default item on enter key press
+ gtk_entry_set_activates_default( entry,
+ !HasFlag(wxTE_PROCESS_ENTER) );
+
+ gtk_entry_set_editable( entry, TRUE );
+ }
+
+ Append(n, choices);
+
+ m_parent->DoAddChild( this );
+
+ if ( entry )
+ m_focusWidget = GTK_WIDGET( entry );
+
+ PostCreation(size);
+
+ if ( entry )
+ {
+ gtk_entry_set_text( entry, wxGTK_CONV(value) );
+
+ if (style & wxCB_READONLY)
+ gtk_entry_set_editable( entry, FALSE );
+
+ g_signal_connect_after (entry, "changed",
+ G_CALLBACK (gtkcombobox_text_changed_callback), this);
+ }
+
+ g_signal_connect_after (m_widget, "changed",
+ G_CALLBACK (gtkcombobox_changed_callback), this);
+
+ SetInitialSize(size); // need this too because this is a wxControlWithItems
+
+ return true;
+}
+
+void wxComboBox::GTKCreateComboBoxWidget()