]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix for listbox problem, when created on invisible
authorRobert Roebling <robert@roebling.de>
Thu, 3 Feb 2005 15:28:14 +0000 (15:28 +0000)
committerRobert Roebling <robert@roebling.de>
Thu, 3 Feb 2005 15:28:14 +0000 (15:28 +0000)
    window. Shown in wxWizard sample.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31726 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/wizard/wizard.cpp
src/gtk/listbox.cpp
src/gtk1/listbox.cpp

index 11645c16d06ccf78f2fb12930e8b496f4d800bd7..514595772960ea57cf67e4a6d87147bf3bb48118 100644 (file)
@@ -30,6 +30,7 @@
     #include "wx/log.h"
     #include "wx/app.h"
     #include "wx/checkbox.h"
+    #include "wx/checklst.h"
     #include "wx/msgdlg.h"
     #include "wx/radiobox.h"
     #include "wx/menu.h"
@@ -177,6 +178,7 @@ public:
             wxALL,
             5 // Border
         );
+        
         SetSizer(mainSizer);
         mainSizer->Fit(this);
     }
@@ -246,6 +248,23 @@ public:
             wxALL,
             5 // Border width
         );
+
+        static const wxChar *aszChoices[] =
+            { _T("Zeroth"), _T("First"), _T("Second"), _T("Third"), _T("Fourth"), _T("Fifth"), _T("Sixth"), _T("Seventh"), _T("Eighth"), _T("Nineth") };
+        wxString *astrChoices = new wxString[WXSIZEOF(aszChoices)];
+        unsigned int ui;
+        for ( ui = 0; ui < WXSIZEOF(aszChoices); ui++ )
+            astrChoices[ui] = aszChoices[ui];
+        m_checklistbox = new wxCheckListBox(this, wxID_ANY, wxDefaultPosition, wxSize(100,100), 
+            WXSIZEOF(aszChoices), astrChoices);
+                       
+        mainSizer->Add(
+            m_checklistbox,
+            0, // No vertical stretching
+            wxALL,
+            5 // Border width
+        );
+
         
         SetSizer(mainSizer);
         mainSizer->Fit(this);
@@ -263,6 +282,7 @@ private:
                  *m_next;
 
     wxCheckBox *m_checkbox;
+    wxCheckListBox *m_checklistbox;
 };
 
 // ============================================================================
index 70203eb2db04f41625f84543cf32cb0c00fe3147..5ad87b3027680ead6de8762350e56ca8c2d025fa 100644 (file)
@@ -404,6 +404,23 @@ static void gtk_listitem_select_cb( GtkWidget *widget,
 // wxListBox
 //-----------------------------------------------------------------------------
 
+static gint
+gtk_listbox_realized_callback( GtkWidget *m_widget, wxListBox *win )
+{
+    if (g_isIdle)
+        wxapp_install_idle_handler();
+        
+    GList *child = win->m_list->children;
+    for (child = win->m_list->children; child != NULL; child = child->next)
+        gtk_widget_show( GTK_WIDGET(child->data) );
+    
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+// wxListBox
+//-----------------------------------------------------------------------------
+
 IMPLEMENT_DYNAMIC_CLASS(wxListBox,wxControl)
 
 // ----------------------------------------------------------------------------
@@ -490,6 +507,9 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
 
     gtk_widget_show( GTK_WIDGET(m_list) );
 
+    gtk_signal_connect( GTK_OBJECT(m_list), "realize",
+                        GTK_SIGNAL_FUNC(gtk_listbox_realized_callback), (gpointer) this );
+                            
     if ( style & wxLB_SORT )
     {
         // this will change DoAppend() behaviour
@@ -678,13 +698,12 @@ void wxListBox::GtkAddItem( const wxString &item, int pos )
     gtk_signal_connect( GTK_OBJECT(list_item), "focus_out_event",
             GTK_SIGNAL_FUNC(gtk_listitem_focus_out_callback), (gpointer)this );
 
-
     ConnectWidget( list_item );
 
-    gtk_widget_show( list_item );
-
     if (GTK_WIDGET_REALIZED(m_widget))
     {
+        gtk_widget_show( list_item );
+        
         gtk_widget_realize( list_item );
         gtk_widget_realize( GTK_BIN(list_item)->child );
 
index 70203eb2db04f41625f84543cf32cb0c00fe3147..5ad87b3027680ead6de8762350e56ca8c2d025fa 100644 (file)
@@ -404,6 +404,23 @@ static void gtk_listitem_select_cb( GtkWidget *widget,
 // wxListBox
 //-----------------------------------------------------------------------------
 
+static gint
+gtk_listbox_realized_callback( GtkWidget *m_widget, wxListBox *win )
+{
+    if (g_isIdle)
+        wxapp_install_idle_handler();
+        
+    GList *child = win->m_list->children;
+    for (child = win->m_list->children; child != NULL; child = child->next)
+        gtk_widget_show( GTK_WIDGET(child->data) );
+    
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+// wxListBox
+//-----------------------------------------------------------------------------
+
 IMPLEMENT_DYNAMIC_CLASS(wxListBox,wxControl)
 
 // ----------------------------------------------------------------------------
@@ -490,6 +507,9 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
 
     gtk_widget_show( GTK_WIDGET(m_list) );
 
+    gtk_signal_connect( GTK_OBJECT(m_list), "realize",
+                        GTK_SIGNAL_FUNC(gtk_listbox_realized_callback), (gpointer) this );
+                            
     if ( style & wxLB_SORT )
     {
         // this will change DoAppend() behaviour
@@ -678,13 +698,12 @@ void wxListBox::GtkAddItem( const wxString &item, int pos )
     gtk_signal_connect( GTK_OBJECT(list_item), "focus_out_event",
             GTK_SIGNAL_FUNC(gtk_listitem_focus_out_callback), (gpointer)this );
 
-
     ConnectWidget( list_item );
 
-    gtk_widget_show( list_item );
-
     if (GTK_WIDGET_REALIZED(m_widget))
     {
+        gtk_widget_show( list_item );
+        
         gtk_widget_realize( list_item );
         gtk_widget_realize( GTK_BIN(list_item)->child );