From ab0c1a3c15d1da4733f87660b6fdc1a162c43816 Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Sun, 1 Feb 2009 06:20:54 +0000 Subject: [PATCH] fix drawing from Update() being overwritten, fixes wxBusyInfo not drawing properly without wxYield git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58583 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/generic/busyinfo.cpp | 8 -------- src/gtk/window.cpp | 17 ++++++++++------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/generic/busyinfo.cpp b/src/generic/busyinfo.cpp index 26c875b..ca53631 100644 --- a/src/generic/busyinfo.cpp +++ b/src/generic/busyinfo.cpp @@ -124,14 +124,6 @@ wxBusyInfo::wxBusyInfo(const wxString& message, wxWindow *parent) m_InfoFrame->Show(true); m_InfoFrame->Refresh(); m_InfoFrame->Update(); - -#ifdef __WXGTK20__ - // FIXME: this is pretty bad, as any call to Yield(), but without it, the - // static text is never shown and neither gdk_display_flush() nor - // gdk_display_sync() nor gdk_window_process_updates() helps - wxMilliSleep(100); - wxYield(); -#endif } wxBusyInfo::~wxBusyInfo() diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 830bfe0..e0d7ae0 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -3570,13 +3570,16 @@ void wxWindowGTK::Refresh(bool WXUNUSED(eraseBackground), void wxWindowGTK::Update() { - GtkUpdate(); - - // when we call Update() we really want to update the window immediately on - // screen, even if it means flushing the entire queue and hence slowing down - // everything -- but it should still be done, it's just that Update() should - // be called very rarely - gdk_flush(); + if (m_widget) + { + GdkDisplay* display = gtk_widget_get_display(m_widget); + // Flush everything out to the server, and wait for it to finish. + // This ensures nothing will overwrite the drawing we are about to do. + gdk_display_sync(display); + GtkUpdate(); + // Flush again, but no need to wait for it to finish + gdk_display_flush(display); + } } void wxWindowGTK::GtkUpdate() -- 2.7.4