+        gtk_entry_set_editable( GTK_ENTRY( GTK_BIN(m_widget)->child ), TRUE );
+    }
+    else
+#endif
+    {
+        m_widget = gtk_combo_new();
+        GtkCombo* combo = GTK_COMBO(m_widget);
+
+        // Disable GTK's broken events ...
+        g_signal_handler_disconnect (combo->entry, combo->entry_change_id);
+        // ... and add surrogate handler.
+        combo->entry_change_id = g_signal_connect (combo->entry, "changed",
+                                               G_CALLBACK (gtkcombo_dummy_callback),
+                                               combo);
+
+        // make it more useable
+        gtk_combo_set_use_arrows_always( GTK_COMBO(m_widget), TRUE );
+
+        // and case-sensitive
+        gtk_combo_set_case_sensitive( GTK_COMBO(m_widget), TRUE );
+
+        if (style & wxNO_BORDER)
+            g_object_set (combo->entry, "has-frame", FALSE, NULL );
+    }
+
+    Append(n, choices);
+
+    m_parent->DoAddChild( this );
+
+    GtkEntry *entry = NULL;
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+        entry = GTK_ENTRY( GTK_BIN(m_widget)->child );
+    else
+#endif
+        entry = GTK_ENTRY( GTK_COMBO(m_widget)->entry );
+
+    m_focusWidget = GTK_WIDGET( entry );
+
+    PostCreation(size);
+
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+        ConnectWidget( m_widget );
+    else
+#endif
+        ConnectWidget( GTK_COMBO(m_widget)->button );
+
+#ifdef __WXGTK24__
+    if (!gtk_check_version(2,4,0))
+    {
+        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);
+
+    }
+    else
+#endif
+    {
+        GtkCombo *combo = GTK_COMBO(m_widget);
+        // MSW's combo box shows the value and the selection is -1
+        gtk_entry_set_text( entry, wxGTK_CONV(value) );
+        gtk_list_unselect_all( GTK_LIST(combo->list) );
+
+        if (style & wxCB_READONLY)
+            gtk_entry_set_editable( entry, FALSE );
+
+        // "show" and "hide" events are generated when user click on the combobox button which popups a list
+        // this list is the "popwin" gtk widget
+        g_signal_connect (GTK_COMBO(combo)->popwin, "hide",
+                      G_CALLBACK (gtkcombo_popup_hide_callback), this);
+        g_signal_connect (GTK_COMBO(combo)->popwin, "show",
+                      G_CALLBACK (gtkcombo_popup_show_callback), this);
+        g_signal_connect_after (combo->list, "select-child",
+                            G_CALLBACK (gtkcombo_combo_select_child_callback),
+                            this);
+        g_signal_connect_after (entry, "changed",
+                            G_CALLBACK (gtkcombo_text_changed_callback), this);
+    }
+
+    SetInitialSize(size); // need this too because this is a wxControlWithItems
+
+    return true;