#include "wx/module.h"
#include "wx/image.h"
+#ifdef __WXUNIVERSAL__
+ #include "wx/univ/theme.h"
+ #include "wx/univ/renderer.h"
+#endif
+
#if wxUSE_THREADS
#include "wx/thread.h"
#endif
#include <unistd.h>
+#include "wx/gtk/win_gtk.h"
-#include <glib.h>
-#include <gdk/gdk.h>
#include <gtk/gtk.h>
-#include "wx/gtk/win_gtk.h"
//-----------------------------------------------------------------------------
// global data
// wxYield
//-----------------------------------------------------------------------------
-static bool gs_inYield = FALSE;
-
-bool wxYield()
+bool wxApp::Yield(bool onlyIfNeeded)
{
+ // MT-FIXME
+ static bool s_inYield = FALSE;
+
+ if ( s_inYield )
+ {
+ if ( !onlyIfNeeded )
+ {
+ wxFAIL_MSG( wxT("wxYield called recursively" ) );
+ }
+
+ return FALSE;
+ }
+
#if wxUSE_THREADS
if ( !wxThread::IsMain() )
{
}
#endif // wxUSE_THREADS
-#ifdef __WXDEBUG__
- if (gs_inYield)
- wxFAIL_MSG( wxT("wxYield called recursively" ) );
-#endif
-
- gs_inYield = TRUE;
+ s_inYield = TRUE;
if (!g_isIdle)
{
// We need to remove idle callbacks or the loop will
// never finish.
- gtk_idle_remove( wxTheApp->m_idleTag );
- wxTheApp->m_idleTag = 0;
+ gtk_idle_remove( m_idleTag );
+ m_idleTag = 0;
g_isIdle = TRUE;
}
/* 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) */
- while (wxTheApp->ProcessIdle()) { }
+ while ( ProcessIdle() )
+ {
+ }
// let the logs be flashed again
wxLog::Resume();
- gs_inYield = FALSE;
+ s_inYield = FALSE;
return TRUE;
}
-//-----------------------------------------------------------------------------
-// wxYieldIfNeeded
-// Like wxYield, but fails silently if the yield is recursive.
-//-----------------------------------------------------------------------------
-
-bool wxYieldIfNeeded()
-{
- if (gs_inYield)
- return FALSE;
-
- return wxYield();
-}
-
//-----------------------------------------------------------------------------
// wxWakeUpIdle
//-----------------------------------------------------------------------------
#endif
m_colorCube = (unsigned char*) NULL;
+
+ // this is NULL for a "regular" wxApp, but is set (and freed) by a wxGLApp
+ m_glVisualInfo = (void *) NULL;
}
wxApp::~wxApp()
GdkVisual *visual = gdk_visual_get_system();
+ // if this is a wxGLApp (derived from wxApp), and we've already
+ // chosen a specific visual, then derive the GdkVisual from that
+ if (m_glVisualInfo != NULL) {
+#ifdef __WXGTK20__
+ /* seems gtk_widget_set_default_visual no longer exists? */
+ GdkVisual* vis = gtk_widget_get_default_visual();
+#else
+ GdkVisual* vis = gdkx_visual_get(
+ ((XVisualInfo *) m_glVisualInfo) ->visualid );
+ gtk_widget_set_default_visual( vis );
+#endif
+
+ GdkColormap *colormap = gdk_colormap_new( vis, FALSE );
+ gtk_widget_set_default_colormap( colormap );
+
+ visual = vis;
+ }
+
/* on some machines, the default visual is just 256 colours, so
we make sure we get the best. this can sometimes be wasteful,
of course, but what do these guys pay $30.000 for? */
- if ((gdk_visual_get_best() != gdk_visual_get_system()) &&
+ else if ((gdk_visual_get_best() != gdk_visual_get_system()) &&
(m_useBestVisual))
{
#ifdef __WXGTK20__
// wxEntry
//-----------------------------------------------------------------------------
-
-int wxEntryStart( int argc, char *argv[] )
+// NB: argc and argv may be changed here, pass by reference!
+int wxEntryStart( int& argc, char *argv[] )
{
#if wxUSE_THREADS
/* GTK 1.2 up to version 1.2.3 has broken threads */
return retValue;
}
+#ifndef __WXUNIVERSAL__
+
#include "wx/gtk/info.xpm"
#include "wx/gtk/error.xpm"
#include "wx/gtk/question.xpm"
#include "wx/gtk/warning.xpm"
-wxIcon
-wxApp::GetStdIcon(int which) const
+wxIcon wxApp::GetStdIcon(int which) const
{
switch(which)
{
return wxIcon(error_xpm);
}
}
+#else
+wxIcon wxApp::GetStdIcon(int which) const
+{
+ return wxTheme::Get()->GetRenderer()->GetStdIcon(which);
+}
+#endif // !__WXUNIVERSAL__
+
#ifdef __WXDEBUG__