Added intermediate state (m_showOnIdle) indicating that

time must be given to a window to get placed correctly
    before it is shown. The avoids jumping windows.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40745 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2006-08-22 12:26:22 +00:00
parent cea0869cdf
commit f46ad98f0d
2 changed files with 47 additions and 9 deletions

View File

@@ -2457,6 +2457,8 @@ void wxWindowGTK::Init()
m_hasVMT = false;
m_needParent = true;
m_isBeingDeleted = false;
m_showOnIdle= false;
m_noExpose = false;
m_nativeSizeEvent = false;
@@ -2973,6 +2975,21 @@ void wxWindowGTK::OnInternalIdle()
m_needsStyleChange = false;
}
if (IsShown() && m_showOnIdle && !GTK_WIDGET_VISIBLE (m_widget))
{
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 );
gtk_widget_show( m_widget );
wxShowEvent eventShow(GetId(), true);
eventShow.SetEventObject(this);
GetEventHandler()->ProcessEvent(eventShow);
m_showOnIdle = false;
return;
}
// Update invalidated regions.
GtkUpdate();
@@ -3182,14 +3199,22 @@ bool wxWindowGTK::Show( bool show )
}
if (show)
gtk_widget_show( m_widget );
{
if (!m_showOnIdle)
{
gtk_widget_show( m_widget );
wxShowEvent eventShow(GetId(), show);
eventShow.SetEventObject(this);
GetEventHandler()->ProcessEvent(eventShow);
}
}
else
{
gtk_widget_hide( m_widget );
wxShowEvent eventShow(GetId(), show);
eventShow.SetEventObject(this);
GetEventHandler()->ProcessEvent(eventShow);
wxShowEvent eventShow(GetId(), show);
eventShow.SetEventObject(this);
GetEventHandler()->ProcessEvent(eventShow);
}
return true;
}
@@ -3427,6 +3452,12 @@ bool wxWindowGTK::Reparent( wxWindowBase *newParentBase )
if (newParent)
{
if (GTK_WIDGET_VISIBLE (newParent->m_widget))
{
m_showOnIdle = true;
gtk_widget_hide( m_widget );
}
/* insert GTK representation */
(*(newParent->m_insertCallback))(newParent, this);
}
@@ -3661,6 +3692,8 @@ void wxWindowGTK::Refresh( bool eraseBackground, const wxRect *rect )
if (m_wxwindow)
{
if (!GTK_PIZZA(m_wxwindow)->bin_window) return;
GdkRectangle gdk_rect,
*p;
if (rect)