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:
@@ -30,6 +30,7 @@
|
|||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
#include "wx/checkbox.h"
|
#include "wx/checkbox.h"
|
||||||
|
#include "wx/checklst.h"
|
||||||
#include "wx/msgdlg.h"
|
#include "wx/msgdlg.h"
|
||||||
#include "wx/radiobox.h"
|
#include "wx/radiobox.h"
|
||||||
#include "wx/menu.h"
|
#include "wx/menu.h"
|
||||||
@@ -177,6 +178,7 @@ public:
|
|||||||
wxALL,
|
wxALL,
|
||||||
5 // Border
|
5 // Border
|
||||||
);
|
);
|
||||||
|
|
||||||
SetSizer(mainSizer);
|
SetSizer(mainSizer);
|
||||||
mainSizer->Fit(this);
|
mainSizer->Fit(this);
|
||||||
}
|
}
|
||||||
@@ -246,6 +248,23 @@ public:
|
|||||||
wxALL,
|
wxALL,
|
||||||
5 // Border width
|
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);
|
SetSizer(mainSizer);
|
||||||
mainSizer->Fit(this);
|
mainSizer->Fit(this);
|
||||||
@@ -263,6 +282,7 @@ private:
|
|||||||
*m_next;
|
*m_next;
|
||||||
|
|
||||||
wxCheckBox *m_checkbox;
|
wxCheckBox *m_checkbox;
|
||||||
|
wxCheckListBox *m_checklistbox;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
@@ -404,6 +404,23 @@ static void gtk_listitem_select_cb( GtkWidget *widget,
|
|||||||
// wxListBox
|
// 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)
|
IMPLEMENT_DYNAMIC_CLASS(wxListBox,wxControl)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -490,6 +507,9 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
|
|||||||
|
|
||||||
gtk_widget_show( GTK_WIDGET(m_list) );
|
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 )
|
if ( style & wxLB_SORT )
|
||||||
{
|
{
|
||||||
// this will change DoAppend() behaviour
|
// 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_connect( GTK_OBJECT(list_item), "focus_out_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_listitem_focus_out_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_listitem_focus_out_callback), (gpointer)this );
|
||||||
|
|
||||||
|
|
||||||
ConnectWidget( list_item );
|
ConnectWidget( list_item );
|
||||||
|
|
||||||
gtk_widget_show( list_item );
|
|
||||||
|
|
||||||
if (GTK_WIDGET_REALIZED(m_widget))
|
if (GTK_WIDGET_REALIZED(m_widget))
|
||||||
{
|
{
|
||||||
|
gtk_widget_show( list_item );
|
||||||
|
|
||||||
gtk_widget_realize( list_item );
|
gtk_widget_realize( list_item );
|
||||||
gtk_widget_realize( GTK_BIN(list_item)->child );
|
gtk_widget_realize( GTK_BIN(list_item)->child );
|
||||||
|
|
||||||
|
@@ -404,6 +404,23 @@ static void gtk_listitem_select_cb( GtkWidget *widget,
|
|||||||
// wxListBox
|
// 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)
|
IMPLEMENT_DYNAMIC_CLASS(wxListBox,wxControl)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -490,6 +507,9 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
|
|||||||
|
|
||||||
gtk_widget_show( GTK_WIDGET(m_list) );
|
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 )
|
if ( style & wxLB_SORT )
|
||||||
{
|
{
|
||||||
// this will change DoAppend() behaviour
|
// 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_connect( GTK_OBJECT(list_item), "focus_out_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_listitem_focus_out_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_listitem_focus_out_callback), (gpointer)this );
|
||||||
|
|
||||||
|
|
||||||
ConnectWidget( list_item );
|
ConnectWidget( list_item );
|
||||||
|
|
||||||
gtk_widget_show( list_item );
|
|
||||||
|
|
||||||
if (GTK_WIDGET_REALIZED(m_widget))
|
if (GTK_WIDGET_REALIZED(m_widget))
|
||||||
{
|
{
|
||||||
|
gtk_widget_show( list_item );
|
||||||
|
|
||||||
gtk_widget_realize( list_item );
|
gtk_widget_realize( list_item );
|
||||||
gtk_widget_realize( GTK_BIN(list_item)->child );
|
gtk_widget_realize( GTK_BIN(list_item)->child );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user