]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
don't compare invalid iterators/node pointers
[wxWidgets.git] / src / gtk / app.cpp
index c3e76d41581f8558cb79bb4dc56cbf878b6adf71..286164ca96f27436a2f4fed2685452f2826aa7c6 100644 (file)
 
 #include "wx/unix/private.h"
 #include "wx/gtk/win_gtk.h"
+#include "wx/gtk/private.h"
 
 #include <gtk/gtk.h>
 
+//-----------------------------------------------------------------------------
+// link GnomeVFS
+//-----------------------------------------------------------------------------
+
+#if wxUSE_LIBGNOMEVFS
+#include "wx/html/forcelnk.h"
+FORCE_LINK(gnome_vfs)
+#endif
+
 //-----------------------------------------------------------------------------
 // global data
 //-----------------------------------------------------------------------------
@@ -90,8 +100,6 @@ static GtkWidget *gs_RootWindow = (GtkWidget*) NULL;
 // idle system
 //-----------------------------------------------------------------------------
 
-extern bool g_isIdle;
-
 void wxapp_install_idle_handler();
 
 #if wxUSE_THREADS
@@ -249,17 +257,18 @@ static gint wxapp_idle_callback( gpointer WXUNUSED(data) )
         wxTheApp->m_idleTag = 0;
     }
 
+    bool moreIdles;
+
     // Send 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))
+    while ( (moreIdles = 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).
-    return FALSE;
+    // Return FALSE if no more idle events are to be sent
+    return moreIdles;
 }
 
 #if wxUSE_THREADS
@@ -374,14 +383,14 @@ void wxapp_install_idle_handler()
     g_isIdle = FALSE;
 
     if (g_pendingTag == 0)
-        g_pendingTag = gtk_idle_add_priority( 900, wxapp_pending_callback, (gpointer) NULL );
+        g_pendingTag = g_idle_add_full( 900, wxapp_pending_callback, NULL, NULL );
 
     // This routine gets called by all event handlers
     // indicating that the idle is over. It may also
     // get called from other thread for sending events
     // to the main thread (and processing these in
     // idle time). Very low priority.
-    wxTheApp->m_idleTag = gtk_idle_add_priority( 1000, wxapp_idle_callback, (gpointer) NULL );
+    wxTheApp->m_idleTag = g_idle_add_full( 1000, wxapp_idle_callback, NULL, NULL );
 }
 
 //-----------------------------------------------------------------------------
@@ -431,9 +440,11 @@ wxApp::wxApp()
 
 wxApp::~wxApp()
 {
-    if (m_idleTag) gtk_idle_remove( m_idleTag );
+    if (m_idleTag)
+        g_source_remove( m_idleTag );
 
-    if (m_colorCube) free(m_colorCube);
+    if (m_colorCube)
+        free(m_colorCube);
 }
 
 bool wxApp::OnInitGui()
@@ -695,7 +706,7 @@ void wxApp::RemoveIdleTag()
 #endif
     if (!g_isIdle)
     {
-        gtk_idle_remove( wxTheApp->m_idleTag );
+        g_source_remove( wxTheApp->m_idleTag );
         wxTheApp->m_idleTag = 0;
         g_isIdle = TRUE;
     }