X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55ca41b1ea89c0e6ccf84973091bea8b936eee06..c3e433b15929171af57df3c9c3c63d6ab8aa720b:/src/gtk/toplevel.cpp diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp index b83113197f..5d04f3bcb3 100644 --- a/src/gtk/toplevel.cpp +++ b/src/gtk/toplevel.cpp @@ -442,6 +442,7 @@ void wxTopLevelWindowGTK::Init() m_gdkFunc = 0; m_grabbed = false; m_deferShow = true; + m_deferShowAllowed = true; m_updateDecorSize = true; m_urgency_hint = -2; @@ -780,7 +781,7 @@ bool wxTopLevelWindowGTK::Show( bool show ) { wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); - bool deferShow = show && !m_isShown && m_deferShow; + bool deferShow = show && !m_isShown && m_deferShow && m_deferShowAllowed; if (deferShow) { deferShow = false; @@ -896,6 +897,8 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si { wxCHECK_RET( m_widget, wxT("invalid frame") ); + m_deferShowAllowed = true; + // deal with the position first int old_x = m_x; int old_y = m_y; @@ -940,9 +943,9 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si void wxTopLevelWindowGTK::DoSetClientSize(int width, int height) { - if (m_deferShow && !m_isShown) - // Since client size is being explicitly set, don't change it later - m_deferShow = false; + // Since client size is being explicitly set, don't change it later + m_deferShowAllowed = false; + wxTopLevelWindowBase::DoSetClientSize(width, height); } @@ -1247,10 +1250,11 @@ void wxTopLevelWindowGTK::RequestUserAttention(int flags) bool new_hint_value = false; // FIXME: This is a workaround to focus handling problem - // If RequestUserAttention is called for example right after a wxSleep, OnInternalIdle hasn't - // yet been processed, and the internal focus system is not up to date yet. - // wxYieldIfNeeded ensures the processing of it, but can have unwanted side effects - MR - ::wxYieldIfNeeded(); + // If RequestUserAttention is called for example right after a wxSleep, OnInternalIdle + // hasn't yet been processed, and the internal focus system is not up to date yet. + // YieldFor(wxEVT_CATEGORY_UI) ensures the processing of it (hopefully it + // won't have side effects) - MR + wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI); if(m_urgency_hint >= 0) g_source_remove(m_urgency_hint);