X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/60acb9473f3e488fa4ced557489dd48149dd510c..aeab6775d8db7da3b52c16ae6f2f8e3604f6f101:/src/gtk/app.cpp?ds=sidebyside diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index c6fc8d44d9..afe49ce3c1 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -8,7 +8,7 @@ ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ -#pragma implementation "app.h" + #pragma implementation "app.h" #endif #include "wx/app.h" @@ -20,35 +20,24 @@ #include "wx/font.h" #include "wx/settings.h" #include "wx/dialog.h" + #if wxUSE_WX_RESOURCES -#include "wx/resource.h" + #include "wx/resource.h" #endif + #include "wx/module.h" #include "wx/image.h" -#if wxUSE_THREADS + #include "wx/thread.h" -#endif + #include "unistd.h" -// many versions of Unices have this function, but it is not defined in system -// headers - please add your system here if it is the case for your OS. -// SunOS < 5.6 (i.e. Solaris < 2.6) and DG-UX are like this. -#if (defined(__SUN__) && !defined(__SunOs_5_6) && \ - !defined(__SunOs_5_7) && !defined(__SUNPRO_CC)) || \ - defined(__osf__) - extern "C" - { - void usleep(unsigned long usec); - }; -#endif // Unices without usleep() +#include +#include +#include -#include "glib.h" -#include "gdk/gdk.h" -#include "gtk/gtk.h" #include "wx/gtk/win_gtk.h" -#include // usleep() on solaris - //----------------------------------------------------------------------------- // global data //----------------------------------------------------------------------------- @@ -144,7 +133,20 @@ void wxExit() bool wxYield() { - while (gtk_events_pending() > 0) gtk_main_iteration(); + // it's necessary to call ProcessIdle() to update the frames sizes which + // might have been changed (it also will update other things set from + // OnUpdateUI() which is a nice (and desired) side effect) + for ( wxNode *node = wxTopLevelWindows.GetFirst(); + node; + node = node->GetNext() ) + { + wxWindow *win = ((wxWindow*)node->GetData()); + win->OnInternalIdle(); + } + + while (gtk_events_pending() > 0) + gtk_main_iteration(); + return TRUE; } @@ -160,14 +162,17 @@ END_EVENT_TABLE() gint wxapp_idle_callback( gpointer WXUNUSED(data) ) { - if (wxTheApp) while (wxTheApp->ProcessIdle()) {} -#if wxUSE_THREADS + if (wxTheApp) + { + while (wxTheApp->ProcessIdle()) + { + } + } + wxMutexGuiLeave(); -#endif - usleep(10000); -#if wxUSE_THREADS + wxUsleep(10); wxMutexGuiEnter(); -#endif + return TRUE; }