while (gtk_events_pending())
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) */
- while ( ProcessIdle() )
- {
- }
+ // 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). But we
+ // call ProcessIdle() only once since this is not meant for longish
+ // background jobs (controlled by wxIdleEvent::RequestMore() and the
+ // return value of Processidle().
+ ProcessIdle();
// let the logs be flashed again
wxLog::Resume();
{
if (!wxTheApp) return TRUE;
- // when getting called from GDK's time-out handler
+ // When getting called from GDK's time-out handler
// we are no longer within GDK's grab on the GUI
- // thread so we must lock it here ourselves
+ // thread so we must lock it here ourselves.
gdk_threads_enter();
- // Sent idle event to all who request them
+ // Sent idle event to all who request them.
wxTheApp->ProcessPendingEvents();
g_pendingTag = 0;
- /* flush the logged messages if any */
+ // Flush the logged messages if any.
#if wxUSE_LOG
wxLog::FlushActive();
#endif // wxUSE_LOG
}
#endif // __WXDEBUG__
- // when getting called from GDK's time-out handler
+ // When getting called from GDK's time-out handler
// we are no longer within GDK's grab on the GUI
- // thread so we must lock it here ourselves
+ // thread so we must lock it here ourselves.
gdk_threads_enter();
- /* Indicate that we are now in idle mode - even so deeply
- in idle mode that we don't get any idle events anymore.
- this is like wxMSW where an idle event is sent only
- once each time after the event queue has been completely
- emptied */
+ // Indicate that we are now in idle mode and event handlers
+ // will have to reinstall the idle handler again.
g_isIdle = TRUE;
wxTheApp->m_idleTag = 0;
- // Sent idle event to all who request them as long as they do
- while (wxTheApp->ProcessIdle())
+ // Sent idle event to all who request them as long as
+ // no events have popped up in the event queue.
+ while (wxTheApp->ProcessIdle() && (gtk_events_pending() == 0))
;
// Release lock again
gdk_threads_leave();
// Return FALSE to indicate that no more idle events are
- // to be sent (single shot instead of continuous stream)
+ // to be sent (single shot instead of continuous stream).
return FALSE;
}
#endif // wxUSE_THREADS
+//-----------------------------------------------------------------------------
+// Access to the root window global
+//-----------------------------------------------------------------------------
+
+GtkWidget* wxGetRootWindow()
+{
+ if (gs_RootWindow == NULL)
+ {
+ gs_RootWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL );
+ gtk_widget_realize( gs_RootWindow );
+ }
+ return gs_RootWindow;
+}
+
//-----------------------------------------------------------------------------
// wxApp
//-----------------------------------------------------------------------------
// 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) {
+ if (m_glVisualInfo != NULL)
+ {
#ifdef __WXGTK20__
- /* seems gtk_widget_set_default_visual no longer exists? */
+ // seems gtk_widget_set_default_visual no longer exists?
GdkVisual* vis = gtk_widget_get_default_visual();
#else
GdkVisual* vis = gdkx_visual_get(
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? */
+ // On some machines, the default visual is just 256 colours, so
+ // we make sure we get the best. This can sometimes be wasteful.
- else if ((gdk_visual_get_best() != gdk_visual_get_system()) &&
- (m_useBestVisual))
+ else
+ if ((gdk_visual_get_best() != gdk_visual_get_system()) && (m_useBestVisual))
{
#ifdef __WXGTK20__
/* seems gtk_widget_set_default_visual no longer exists? */
visual = vis;
}
- /* Nothing to do for 15, 16, 24, 32 bit displays */
+ // Nothing to do for 15, 16, 24, 32 bit displays
if (visual->depth > 8) return TRUE;
- /* initialize color cube for 8-bit color reduction dithering */
+ // initialize color cube for 8-bit color reduction dithering
GdkColormap *cmap = gtk_widget_get_default_colormap();
}
else
{
-#if (GTK_MINOR_VERSION > 0)
- /* assume 8-bit true or static colors. this really
- exists. */
+ // assume 8-bit true or static colors. this really exists
GdkVisual* vis = gdk_colormap_get_visual( cmap );
index = (r >> (5 - vis->red_prec)) << vis->red_shift;
index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
-#else
- wxFAIL_MSG( wxT("Unsupported graphics hardware") );
-#endif
}
m_colorCube[ (r*1024) + (g*32) + b ] = index;
}
return TRUE;
}
+GdkVisual *wxApp::GetGdkVisual()
+{
+ GdkVisual *visual = NULL;
+
+ if (m_glVisualInfo)
+ visual = gdkx_visual_get( ((XVisualInfo *) m_glVisualInfo)->visualid );
+ else
+ visual = gdk_window_get_visual( wxGetRootWindow()->window );
+
+ wxASSERT( visual );
+
+ return visual;
+}
+
bool wxApp::ProcessIdle()
{
wxIdleEvent event;
{
static bool s_inOnIdle = FALSE;
- /* Avoid recursion (via ProcessEvent default case) */
+ // Avoid recursion (via ProcessEvent default case)
if (s_inOnIdle)
return;
s_inOnIdle = TRUE;
- /* Resend in the main thread events which have been prepared in other
- threads */
+ // Resend in the main thread events which have been prepared in other
+ // threads
ProcessPendingEvents();
- /* 'Garbage' collection of windows deleted with Close(). */
+ // 'Garbage' collection of windows deleted with Close()
DeletePendingObjects();
- /* Send OnIdle events to all windows */
+ // Send OnIdle events to all windows
bool needMore = SendIdleEvents();
if (needMore)
#endif // wxUSE_LOG
}
-//-----------------------------------------------------------------------------
-// Access to the root window global
-//-----------------------------------------------------------------------------
-
-GtkWidget* wxGetRootWindow()
-{
- if (gs_RootWindow == NULL) {
- gs_RootWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL );
- gtk_widget_realize( gs_RootWindow );
- }
- return gs_RootWindow;
-}
-
//-----------------------------------------------------------------------------
// wxEntry
//-----------------------------------------------------------------------------
int wxEntryStart( int& argc, char *argv[] )
{
#if wxUSE_THREADS
- /* GTK 1.2 up to version 1.2.3 has broken threads */
- if ((gtk_major_version == 1) &&
+ // GTK 1.2 up to version 1.2.3 has broken threads
+ if ((gtk_major_version == 1) &&
(gtk_minor_version == 2) &&
(gtk_micro_version < 4))
{
}
-
int wxEntry( int argc, char *argv[] )
{
#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
#ifndef __WXUNIVERSAL__
+// XPM hack: make the arrays const
+#define static static const
+
#include "wx/gtk/info.xpm"
#include "wx/gtk/error.xpm"
#include "wx/gtk/question.xpm"
#include "wx/gtk/warning.xpm"
+#undef static
+
wxIcon wxApp::GetStdIcon(int which) const
{
switch(which)