+void wxComboBox::OnChar( wxKeyEvent &event )
+{
+ if ( event.GetKeyCode() == WXK_RETURN )
+ {
+ // GTK automatically selects an item if its in the list
+ wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, GetId());
+ event.SetString( GetValue() );
+ event.SetInt( GetSelection() );
+ event.SetEventObject( this );
+
+ if (!GetEventHandler()->ProcessEvent( event ))
+ {
+ // This will invoke the dialog default action, such
+ // as the clicking the default button.
+
+ wxWindow *top_frame = m_parent;
+ while (top_frame->GetParent() && !(top_frame->IsTopLevel()))
+ top_frame = top_frame->GetParent();
+
+ if (top_frame && GTK_IS_WINDOW(top_frame->m_widget))
+ {
+ GtkWindow *window = GTK_WINDOW(top_frame->m_widget);
+
+ if (window->default_widget)
+ gtk_widget_activate (window->default_widget);
+ }
+ }
+
+ // Catch GTK event so that GTK doesn't open the drop
+ // down list upon RETURN.
+ return;
+ }
+
+ event.Skip();
+}
+
+void wxComboBox::DisableEvents()
+{
+ gtk_signal_disconnect_by_func( GTK_OBJECT(GTK_COMBO(m_widget)->list),
+ GTK_SIGNAL_FUNC(gtk_combo_select_child_callback), (gpointer)this );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(GTK_COMBO(m_widget)->entry),
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this );
+}
+
+void wxComboBox::EnableEvents()
+{
+ gtk_signal_connect( GTK_OBJECT(GTK_COMBO(m_widget)->list), "select-child",
+ GTK_SIGNAL_FUNC(gtk_combo_select_child_callback), (gpointer)this );
+ gtk_signal_connect( GTK_OBJECT(GTK_COMBO(m_widget)->entry), "changed",
+ GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this );
+}
+
+void wxComboBox::OnSize( wxSizeEvent &event )
+{
+ event.Skip();
+
+#if 0
+ int w = 21;
+ gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
+
+ gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
+ gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
+#endif // 0
+}
+
+void wxComboBox::ApplyWidgetStyle()
+{
+ SetWidgetStyle();
+
+// gtk_widget_set_style( GTK_COMBO(m_widget)->button, m_widgetStyle );
+ gtk_widget_set_style( GTK_COMBO(m_widget)->entry, m_widgetStyle );
+ gtk_widget_set_style( GTK_COMBO(m_widget)->list, m_widgetStyle );
+
+ GtkList *list = GTK_LIST( GTK_COMBO(m_widget)->list );
+ GList *child = list->children;
+ while (child)
+ {
+ gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
+
+ GtkBin *bin = GTK_BIN(child->data);
+ gtk_widget_set_style( bin->child, m_widgetStyle );
+
+ child = child->next;
+ }
+}
+
+GtkWidget* wxComboBox::GetConnectWidget()
+{
+ return GTK_COMBO(m_widget)->entry;
+}
+
+bool wxComboBox::IsOwnGtkWindow( GdkWindow *window )
+{
+ return ( (window == GTK_ENTRY( GTK_COMBO(m_widget)->entry )->text_area) ||
+ (window == GTK_COMBO(m_widget)->button->window ) );
+}
+
+wxSize wxComboBox::DoGetBestSize() const
+{
+ wxSize ret( wxControl::DoGetBestSize() );
+
+ // we know better our horizontal extent: it depends on the longest string
+ // in the combobox
+ ret.x = 0;
+ if ( m_widget )
+ {
+ int width;
+ size_t count = GetCount();
+ for ( size_t n = 0; n < count; n++ )
+ {
+ GetTextExtent( GetString(n), &width, NULL, NULL, NULL, &m_font );
+ if ( width > ret.x )
+ ret.x = width;
+ }
+ }
+
+ // empty combobox should have some reasonable default size too
+ if ( ret.x < 100 )
+ ret.x = 100;
+ return ret;
+}
+
+#endif