Fix for listbox problem, when created on invisible

window. Shown in wxWizard sample.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31726 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2005-02-03 15:28:14 +00:00
parent ad975781eb
commit f2e935373d
3 changed files with 64 additions and 6 deletions

View 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;
};
// ============================================================================

View 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 );

View 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 );