Found a few situations where the most recent

corrections crashed.
  Changed default size of wxComboBox to what
    seems to be the only value the arrow button
    likes.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2338 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 1999-05-04 15:54:49 +00:00
parent 5549fa6559
commit 69cdfbf7f8
8 changed files with 62 additions and 46 deletions

View File

@ -110,7 +110,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
if (newSize.x == -1)
newSize.x = 100;
if (newSize.y == -1)
newSize.y = 26;
newSize.y = 22;
SetSize( newSize.x, newSize.y );
GtkWidget *list = GTK_COMBO(m_widget)->list;
@ -584,13 +584,11 @@ void wxComboBox::OnSize( wxSizeEvent &event )
{
wxControl::OnSize( event );
/*
int w = 21;
gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
*/
}
void wxComboBox::ApplyWidgetStyle()

View File

@ -708,9 +708,6 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
int client_w = m_width - 2*m_miniEdge;
int client_h = m_height - client_area_y_offset- 2*m_miniEdge - m_miniTitle;
gtk_widget_set_usize( m_wxwindow, client_w, client_h );
GtkAllocation alloc;
alloc.x = client_x; alloc.y = client_y; alloc.width = client_w; alloc.height = client_h;
gtk_widget_size_allocate( m_wxwindow, &alloc );
}
else
{

View File

@ -447,8 +447,10 @@ gtk_myfixed_size_allocate (GtkWidget *widget,
{
child = children->data;
children = children->next;
if (GTK_WIDGET_VISIBLE (child->widget))
/* please look at the text in wxWindow::DoSetSize() on why the
test GTK_WIDGET_REALIZED() has to be here */
if (GTK_WIDGET_VISIBLE (child->widget) && GTK_WIDGET_REALIZED(child->widget) )
{
child_allocation.x = child->x;
child_allocation.y = child->y;

View File

@ -2052,28 +2052,39 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
if ((old_width != m_width) || (old_height != m_height))
{
/*
wxPrintf( _T("On DoSetSize from ") );
wxPrintf( GetClassInfo()->GetClassName() );
wxPrintf( _T(": %d %d.\n"), m_width, m_height );
*/
gtk_widget_set_usize( m_widget, m_width, m_height );
/* this is the result of hours of debugging: the followomg code
/* this is the result of hours of debugging: the following code
means that if we have a m_wxwindow and we set the size of
m_widget, m_widget (which is a GtkScrolledWindow) does NOT
automatically propagate its size down to its m_wxwindow,
which is its client area. therefore, we have to tell the
client area directly that it has to get resize itself */
GtkAllocation alloc;
alloc.x = m_x;
alloc.y = m_y;
alloc.width = m_width;
alloc.height = m_height;
gtk_widget_size_allocate( m_widget, &alloc );
client area directly that it has to resize itself.
this will lead to that m_widget (GtkScrolledWindow) will
calculate how much size it needs for scrollbars etc and
it will then call XXX_size_allocate of its child, which
is m_wxwindow. m_wxwindow in turn will do the same with its
children and so on. problems can arise if this happens
before all the children have been realized as some widgets
stupidy need to be realized during XXX_size_allocate (e.g.
GtkNotebook) and they will segv if called otherwise. this
emergency is tested in gtk_myfixed_size_allocate. Normally
this shouldn't be needed and only gtk_widget_queue_resize()
should be enough to provoke a resize at the next appropriate
moment, but this seems to fail, e.g. when a wxNotebook contains
a wxSplitterWindow: the splitter window's children won't
show up properly resized then. */
if (m_wxwindow)
{
GtkAllocation alloc;
alloc.x = m_x;
alloc.y = m_y;
alloc.width = m_width;
alloc.height = m_height;
gtk_widget_size_allocate( m_widget, &alloc );
}
}
}
}

View File

@ -110,7 +110,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
if (newSize.x == -1)
newSize.x = 100;
if (newSize.y == -1)
newSize.y = 26;
newSize.y = 22;
SetSize( newSize.x, newSize.y );
GtkWidget *list = GTK_COMBO(m_widget)->list;
@ -584,13 +584,11 @@ void wxComboBox::OnSize( wxSizeEvent &event )
{
wxControl::OnSize( event );
/*
int w = 21;
gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
*/
}
void wxComboBox::ApplyWidgetStyle()

View File

@ -708,9 +708,6 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
int client_w = m_width - 2*m_miniEdge;
int client_h = m_height - client_area_y_offset- 2*m_miniEdge - m_miniTitle;
gtk_widget_set_usize( m_wxwindow, client_w, client_h );
GtkAllocation alloc;
alloc.x = client_x; alloc.y = client_y; alloc.width = client_w; alloc.height = client_h;
gtk_widget_size_allocate( m_wxwindow, &alloc );
}
else
{

View File

@ -447,8 +447,10 @@ gtk_myfixed_size_allocate (GtkWidget *widget,
{
child = children->data;
children = children->next;
if (GTK_WIDGET_VISIBLE (child->widget))
/* please look at the text in wxWindow::DoSetSize() on why the
test GTK_WIDGET_REALIZED() has to be here */
if (GTK_WIDGET_VISIBLE (child->widget) && GTK_WIDGET_REALIZED(child->widget) )
{
child_allocation.x = child->x;
child_allocation.y = child->y;

View File

@ -2052,28 +2052,39 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
if ((old_width != m_width) || (old_height != m_height))
{
/*
wxPrintf( _T("On DoSetSize from ") );
wxPrintf( GetClassInfo()->GetClassName() );
wxPrintf( _T(": %d %d.\n"), m_width, m_height );
*/
gtk_widget_set_usize( m_widget, m_width, m_height );
/* this is the result of hours of debugging: the followomg code
/* this is the result of hours of debugging: the following code
means that if we have a m_wxwindow and we set the size of
m_widget, m_widget (which is a GtkScrolledWindow) does NOT
automatically propagate its size down to its m_wxwindow,
which is its client area. therefore, we have to tell the
client area directly that it has to get resize itself */
GtkAllocation alloc;
alloc.x = m_x;
alloc.y = m_y;
alloc.width = m_width;
alloc.height = m_height;
gtk_widget_size_allocate( m_widget, &alloc );
client area directly that it has to resize itself.
this will lead to that m_widget (GtkScrolledWindow) will
calculate how much size it needs for scrollbars etc and
it will then call XXX_size_allocate of its child, which
is m_wxwindow. m_wxwindow in turn will do the same with its
children and so on. problems can arise if this happens
before all the children have been realized as some widgets
stupidy need to be realized during XXX_size_allocate (e.g.
GtkNotebook) and they will segv if called otherwise. this
emergency is tested in gtk_myfixed_size_allocate. Normally
this shouldn't be needed and only gtk_widget_queue_resize()
should be enough to provoke a resize at the next appropriate
moment, but this seems to fail, e.g. when a wxNotebook contains
a wxSplitterWindow: the splitter window's children won't
show up properly resized then. */
if (m_wxwindow)
{
GtkAllocation alloc;
alloc.x = m_x;
alloc.y = m_y;
alloc.width = m_width;
alloc.height = m_height;
gtk_widget_size_allocate( m_widget, &alloc );
}
}
}
}