]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/combobox.cpp
removed (wrong?) assert
[wxWidgets.git] / src / gtk1 / combobox.cpp
index 54aea8e64706e4f79e59698d2fb271692fd75a58..7c2a75604b99fd6f66286986714436ba7f4abbcb 100644 (file)
 #endif
 
 #include "wx/combobox.h"
+#include "wx/settings.h"
 
 #include <wx/intl.h>
 
 #include "gdk/gdk.h"
 #include "gtk/gtk.h"
 
+//-----------------------------------------------------------------------------
+// idle system
+//-----------------------------------------------------------------------------
+
+extern void wxapp_install_idle_handler();
+extern bool g_isIdle;
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
@@ -31,11 +39,11 @@ extern bool   g_blockEventsOnDrag;
 static void
 gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
-    if (!combo->HasVMT())
-        return;
+    if (g_isIdle) wxapp_install_idle_handler();
 
-    if (g_blockEventsOnDrag)
-        return;
+    if (!combo->HasVMT()) return;
+
+    if (g_blockEventsOnDrag) return;
 
     if (combo->m_alreadySent)
     {
@@ -49,6 +57,7 @@ gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
     event.SetInt( combo->GetSelection() );
     event.SetString( combo->GetStringSelection() );
     event.SetEventObject( combo );
+    
     combo->GetEventHandler()->ProcessEvent( event );
 }
 
@@ -59,6 +68,8 @@ gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 static void
 gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
+    if (g_isIdle) wxapp_install_idle_handler();
+    
     wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() );
     event.SetString( combo->GetValue() );
     event.SetEventObject( combo );
@@ -113,9 +124,6 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
 
         gtk_container_add( GTK_CONTAINER(list), list_item );
 
-        gtk_widget_realize( list_item );
-        gtk_widget_realize( GTK_BIN(list_item)->child );
-
         gtk_widget_show( list_item );
 
         gtk_signal_connect( GTK_OBJECT(list_item), "select",
@@ -132,17 +140,13 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
 
     if (!value.IsNull()) SetValue( value );
 
-    gtk_widget_realize( GTK_COMBO(m_widget)->list );
-    gtk_widget_realize( GTK_COMBO(m_widget)->entry );
-    gtk_widget_realize( GTK_COMBO(m_widget)->button );
-
     if (style & wxCB_READONLY)
         gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO(m_widget)->entry ), FALSE );
 
     gtk_signal_connect( GTK_OBJECT(GTK_COMBO(m_widget)->entry), "changed",
       GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 
-    SetBackgroundColour( parent->GetBackgroundColour() );
+    SetBackgroundColour( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_WINDOW ) );
     SetForegroundColour( parent->GetForegroundColour() );
     SetFont( parent->GetFont() );
 
@@ -171,12 +175,18 @@ void wxComboBox::AppendCommon( const wxString &item )
 
     GtkWidget *list_item = gtk_list_item_new_with_label( item.mbc_str() );
 
+    gtk_container_add( GTK_CONTAINER(list), list_item );
+
     gtk_signal_connect( GTK_OBJECT(list_item), "select",
       GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
 
-    gtk_container_add( GTK_CONTAINER(list), list_item );
+    if (GTK_WIDGET_REALIZED(m_widget))
+    {
+        gtk_widget_realize( list_item );
+        gtk_widget_realize( GTK_BIN(list_item)->child );
 
-    if (m_widgetStyle) ApplyWidgetStyle();
+        if (m_widgetStyle) ApplyWidgetStyle();
+    }
 
     gtk_widget_show( list_item );
 }
@@ -581,7 +591,7 @@ void wxComboBox::ApplyWidgetStyle()
 {
     SetWidgetStyle();
 
-    gtk_widget_set_style( GTK_COMBO(m_widget)->button, m_widgetStyle );
+//    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 );