]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
Shouldn't call SetFont(wxNullFont) any more
[wxWidgets.git] / src / gtk / app.cpp
index 3390312177e198bf645b99061fb39a38dc57fed1..7b88bc6f5e8c6247b92403b09a75cae334889d52 100644 (file)
@@ -125,12 +125,13 @@ bool wxApp::Yield(bool onlyIfNeeded)
     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();
@@ -190,17 +191,17 @@ gint wxapp_pending_callback( gpointer WXUNUSED(data) )
 {
     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
@@ -228,28 +229,26 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
     }
 #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;
 }
 
@@ -318,6 +317,20 @@ void wxapp_uninstall_thread_wakeup()
 
 #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
 //-----------------------------------------------------------------------------
@@ -369,9 +382,10 @@ bool wxApp::OnInitGui()
 
     // 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( 
@@ -385,12 +399,11 @@ bool wxApp::OnInitGui()
         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? */
@@ -406,10 +419,10 @@ bool wxApp::OnInitGui()
         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();
 
@@ -446,16 +459,11 @@ bool wxApp::OnInitGui()
                 }
                 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;
             }
@@ -465,6 +473,20 @@ bool wxApp::OnInitGui()
     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;
@@ -478,20 +500,20 @@ void wxApp::OnIdle( 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)
@@ -669,19 +691,6 @@ void wxApp::CleanUp()
 #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
 //-----------------------------------------------------------------------------
@@ -690,8 +699,8 @@ GtkWidget* wxGetRootWindow()
 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))
     {
@@ -768,7 +777,6 @@ void wxEntryCleanup()
 }
 
 
-
 int wxEntry( int argc, char *argv[] )
 {
 #if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT