X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c2c0dabfa61fc435265f3dc71122592d359f0119..e7300ec6d9ebbd1cfa2fcf12c0ce6e5aee85a152:/src/x11/toplevel.cpp?ds=sidebyside diff --git a/src/x11/toplevel.cpp b/src/x11/toplevel.cpp index d1a58623b7..c9babe3825 100644 --- a/src/x11/toplevel.cpp +++ b/src/x11/toplevel.cpp @@ -264,7 +264,10 @@ void wxTopLevelWindowX11::OnInternalIdle() { wxWindow::OnInternalIdle(); - if (m_needResizeInIdle) + // Do this only after the last idle event so that + // all windows have been updated before a new + // round of size events is sent + if (m_needResizeInIdle && !wxTheApp->Pending()) { wxSizeEvent event( GetClientSize(), GetId() ); event.SetEventObject( this ); @@ -280,31 +283,15 @@ void wxTopLevelWindowX11::OnInternalIdle() bool wxTopLevelWindowX11::Show(bool show) { - // Nano-X has to force a size event, - // else there's no initial size. -#if wxUSE_NANOX if (show) -#else - if (show && m_needResizeInIdle) -#endif { wxSizeEvent event(GetSize(), GetId()); + event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); m_needResizeInIdle = FALSE; } - if (show) - { - // This does the layout _before_ the - // window is shown, else the items are - // drawn first at the wrong positions, - // then at the correct positions. - if (GetAutoLayout()) - { - Layout(); - } - } bool ret = wxWindowX11::Show(show); @@ -452,13 +439,29 @@ void wxTopLevelWindowX11::DoGetClientSize( int *width, int *height ) const *height = m_height; } +void wxTopLevelWindowX11::DoGetSize( int *width, int *height ) const +{ + // TODO add non-client size + + if (width) + *width = m_width; + if (height) + *height = m_height; +} + void wxTopLevelWindowX11::DoSetClientSize(int width, int height) { - // wxLogDebug("DoSetClientSize: %s (%ld) %dx%d", GetClassInfo()->GetClassName(), GetId(), width, height); - + int old_width = m_width; + int old_height = m_height; + m_width = width; m_height = height; + if (m_width == old_width && m_height == old_height) + return; + + // wxLogDebug("DoSetClientSize: %s (%ld) %dx%d", GetClassInfo()->GetClassName(), GetId(), width, height); + #if !wxUSE_NANOX XSizeHints size_hints; size_hints.flags = PSize; @@ -472,7 +475,10 @@ void wxTopLevelWindowX11::DoSetClientSize(int width, int height) void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags) { - // wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height); + int old_x = m_x; + int old_y = m_y; + int old_width = m_width; + int old_height = m_height; if (x != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) m_x = x; @@ -485,7 +491,12 @@ void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int siz if (height != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) m_height = height; + + if (m_x == old_x && m_y == old_y && m_width == old_width && m_height == old_height) + return; + // wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height); + #if !wxUSE_NANOX XSizeHints size_hints; size_hints.flags = 0;