]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed gtk 1.2.x wxYield() problem (tested).
authorKarsten Ballüder <ballueder@usa.net>
Thu, 8 Apr 1999 20:51:00 +0000 (20:51 +0000)
committerKarsten Ballüder <ballueder@usa.net>
Thu, 8 Apr 1999 20:51:00 +0000 (20:51 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2072 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/app.h
include/wx/gtk1/app.h
src/gtk/app.cpp
src/gtk1/app.cpp

index ac36884cfe6c8302d6bbc9c4072b011d8fe7d5e3..38f8a5a5d7fc15a779233b4d17260e35a4c3cbe9 100644 (file)
@@ -120,6 +120,10 @@ class wxApp: public wxEvtHandler
 #endif
     void DeletePendingObjects();
 
+    /// This can be used to suppress the generation of Idle events.
+    inline void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
+    inline bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
+    
     bool            m_initialized;
     bool            m_exitOnFrameDelete;
     bool            m_wantDebugOutput;
@@ -136,7 +140,9 @@ class wxApp: public wxEvtHandler
     wxString        m_className;
 
     static wxAppInitializerFunction m_appInitFn;
-    
+ private:
+    /// Set to TRUE while we are in wxYield().
+    bool m_suppressIdleEvents;
   DECLARE_EVENT_TABLE()
 };
 
index ac36884cfe6c8302d6bbc9c4072b011d8fe7d5e3..38f8a5a5d7fc15a779233b4d17260e35a4c3cbe9 100644 (file)
@@ -120,6 +120,10 @@ class wxApp: public wxEvtHandler
 #endif
     void DeletePendingObjects();
 
+    /// This can be used to suppress the generation of Idle events.
+    inline void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
+    inline bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
+    
     bool            m_initialized;
     bool            m_exitOnFrameDelete;
     bool            m_wantDebugOutput;
@@ -136,7 +140,9 @@ class wxApp: public wxEvtHandler
     wxString        m_className;
 
     static wxAppInitializerFunction m_appInitFn;
-    
+ private:
+    /// Set to TRUE while we are in wxYield().
+    bool m_suppressIdleEvents;
   DECLARE_EVENT_TABLE()
 };
 
index e37f422742a07d78efc95078dbbe0e75b3853f02..584837f9c7015402912d5393faaf41dd5b0c5f5b 100644 (file)
@@ -135,6 +135,9 @@ void wxExit()
     gtk_main_quit();
 }
 
+// forward decl
+gint wxapp_idle_callback( gpointer WXUNUSED(data) );
+
 bool wxYield()
 {
     // it's necessary to call ProcessIdle() to update the frames sizes which
@@ -148,9 +151,14 @@ bool wxYield()
         win->OnInternalIdle();
     }
 
-    while (gtk_events_pending() > 0)
+    // We need to temporarily remove idle callbacks or the loop will
+    // never finish.
+    gtk_idle_remove( wxTheApp->m_idleTag );
+    
+    while (gtk_events_pending())
         gtk_main_iteration();
 
+    wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
     return TRUE;
 }
 
index e37f422742a07d78efc95078dbbe0e75b3853f02..584837f9c7015402912d5393faaf41dd5b0c5f5b 100644 (file)
@@ -135,6 +135,9 @@ void wxExit()
     gtk_main_quit();
 }
 
+// forward decl
+gint wxapp_idle_callback( gpointer WXUNUSED(data) );
+
 bool wxYield()
 {
     // it's necessary to call ProcessIdle() to update the frames sizes which
@@ -148,9 +151,14 @@ bool wxYield()
         win->OnInternalIdle();
     }
 
-    while (gtk_events_pending() > 0)
+    // We need to temporarily remove idle callbacks or the loop will
+    // never finish.
+    gtk_idle_remove( wxTheApp->m_idleTag );
+    
+    while (gtk_events_pending())
         gtk_main_iteration();
 
+    wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
     return TRUE;
 }