]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxYieldIfNeeded
authorJulian Smart <julian@anthemion.co.uk>
Thu, 22 Feb 2001 12:09:06 +0000 (12:09 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 22 Feb 2001 12:09:06 +0000 (12:09 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9410 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/utils.h
src/gtk/app.cpp
src/gtk1/app.cpp
src/mac/app.cpp
src/mac/carbon/app.cpp
src/motif/app.cpp
src/msw/app.cpp

index 81941fe6f0613ec63e0957f5ad45eb285fdecb21..4c834988903c44bcaa190cf2d43df57862947a70 100644 (file)
@@ -302,6 +302,9 @@ WXDLLEXPORT wxWindow* wxFindWindowAtPoint(const wxPoint& pt);
 // Yield to other apps/messages
 WXDLLEXPORT bool wxYield();
 
+// Like wxYield, but fails silently if the yield is recursive.
+WXDLLEXPORT bool wxYieldIfNeeded();
+
 // Yield to other apps/messages and disable user input
 WXDLLEXPORT bool wxSafeYield(wxWindow *win = NULL);
 
index e29797d061470572dbe7d4d4f45f64411b7754dd..14935b2780bc3155e927eb2dee26c5e540d67457 100644 (file)
@@ -80,6 +80,8 @@ void wxExit()
 // wxYield
 //-----------------------------------------------------------------------------
 
+static bool gs_inYield = FALSE;
+
 bool wxYield()
 {
 #if wxUSE_THREADS
@@ -90,14 +92,12 @@ bool wxYield()
     }
 #endif // wxUSE_THREADS
 
-#ifdef __WXDEBUG__
-    static bool s_inYield = FALSE;
-    
-    if (s_inYield)
+#ifdef __WXDEBUG__    
+    if (gs_inYield)
         wxFAIL_MSG( wxT("wxYield called recursively" ) );
-    
-    s_inYield = TRUE;
 #endif
+    
+    gs_inYield = TRUE;
 
     if (!g_isIdle)
     {
@@ -123,13 +123,24 @@ bool wxYield()
     // let the logs be flashed again
     wxLog::Resume();
 
-#ifdef __WXDEBUG__
-    s_inYield = FALSE;
-#endif
+    gs_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
 //-----------------------------------------------------------------------------
index e29797d061470572dbe7d4d4f45f64411b7754dd..14935b2780bc3155e927eb2dee26c5e540d67457 100644 (file)
@@ -80,6 +80,8 @@ void wxExit()
 // wxYield
 //-----------------------------------------------------------------------------
 
+static bool gs_inYield = FALSE;
+
 bool wxYield()
 {
 #if wxUSE_THREADS
@@ -90,14 +92,12 @@ bool wxYield()
     }
 #endif // wxUSE_THREADS
 
-#ifdef __WXDEBUG__
-    static bool s_inYield = FALSE;
-    
-    if (s_inYield)
+#ifdef __WXDEBUG__    
+    if (gs_inYield)
         wxFAIL_MSG( wxT("wxYield called recursively" ) );
-    
-    s_inYield = TRUE;
 #endif
+    
+    gs_inYield = TRUE;
 
     if (!g_isIdle)
     {
@@ -123,13 +123,24 @@ bool wxYield()
     // let the logs be flashed again
     wxLog::Resume();
 
-#ifdef __WXDEBUG__
-    s_inYield = FALSE;
-#endif
+    gs_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
 //-----------------------------------------------------------------------------
index 6d077eb60d705d047774462800a4c5e6c4184611..97c3590a5e426afb2a463763be5412a0d5f1f51e 100644 (file)
@@ -855,12 +855,22 @@ void wxCYield()
 }
 
 // Yield to other processes
+
+static bool gs_inYield = FALSE;
+
 bool wxYield()
 {
+#ifdef __WXDEBUG__    
+    if (gs_inYield)
+        wxFAIL_MSG( wxT("wxYield called recursively" ) );
+#endif
+
+    gs_inYield = TRUE;
+    
 #if wxUSE_THREADS
-  YieldToAnyThread() ;
+    YieldToAnyThread() ;
 #endif
-  EventRecord event ;
+    EventRecord event ;
 
        long sleepTime = 0 ; //::GetCaretTime();
 
@@ -870,7 +880,19 @@ bool wxYield()
        }
 
        wxMacProcessNotifierAndPendingEvents() ;
-  return TRUE;
+
+    gs_inYield = FALSE;
+    
+    return TRUE;
+}
+
+// Yield to incoming messages; but fail silently if recursion is detected.
+bool wxYieldIfNeeded()
+{
+    if (gs_inYield)
+        return FALSE;
+        
+    return wxYield();
 }
 
 // platform specifics
index 6d077eb60d705d047774462800a4c5e6c4184611..97c3590a5e426afb2a463763be5412a0d5f1f51e 100644 (file)
@@ -855,12 +855,22 @@ void wxCYield()
 }
 
 // Yield to other processes
+
+static bool gs_inYield = FALSE;
+
 bool wxYield()
 {
+#ifdef __WXDEBUG__    
+    if (gs_inYield)
+        wxFAIL_MSG( wxT("wxYield called recursively" ) );
+#endif
+
+    gs_inYield = TRUE;
+    
 #if wxUSE_THREADS
-  YieldToAnyThread() ;
+    YieldToAnyThread() ;
 #endif
-  EventRecord event ;
+    EventRecord event ;
 
        long sleepTime = 0 ; //::GetCaretTime();
 
@@ -870,7 +880,19 @@ bool wxYield()
        }
 
        wxMacProcessNotifierAndPendingEvents() ;
-  return TRUE;
+
+    gs_inYield = FALSE;
+    
+    return TRUE;
+}
+
+// Yield to incoming messages; but fail silently if recursion is detected.
+bool wxYieldIfNeeded()
+{
+    if (gs_inYield)
+        return FALSE;
+        
+    return wxYield();
 }
 
 // platform specifics
index d1899f78a65165d5c4444905d590114e2b620bf0..fa1fd15f66d814f5f548ab8b5aa2ecf2f55cd137 100644 (file)
@@ -736,8 +736,18 @@ void wxExit()
 }
 
 // Yield to other processes
+
+static bool gs_inYield = FALSE;
+
 bool wxYield()
 {
+#ifdef __WXDEBUG__    
+    if (gs_inYield)
+        wxFAIL_MSG( wxT("wxYield called recursively" ) );
+#endif
+    
+    gs_inYield = TRUE;
+
     while (wxTheApp && wxTheApp->Pending())
         wxTheApp->Dispatch();
 
@@ -746,9 +756,21 @@ bool wxYield()
     XtAppProcessEvent((XtAppContext) wxTheApp->GetAppContext(), XtIMAll);
 #endif
 
+    gs_inYield = FALSE;
+
     return TRUE;
 }
 
+// Yield to incoming messages; but fail silently if recursion is detected.
+bool wxYieldIfNeeded()
+{
+    if (gs_inYield)
+        return FALSE;
+        
+    return wxYield();
+}
+
+
 // TODO use XmGetPixmap (?) to get the really standard icons!
 
 #include "wx/generic/info.xpm"
index 399e734e84ed96bc1b1a7b982d2fd430af7ee2a9..36dedf86274f91f679c2c1f192dc4153b49c3f08 100644 (file)
@@ -1280,12 +1280,22 @@ void wxExit()
 }
 
 // Yield to incoming messages
+
+static bool gs_inYield = FALSE;
+
 bool wxYield()
 {
     // disable log flushing from here because a call to wxYield() shouldn't
     // normally result in message boxes popping up &c
     wxLog::Suspend();
 
+#ifdef __WXDEBUG__    
+    if (gs_inYield)
+        wxFAIL_MSG( wxT("wxYield called recursively" ) );
+#endif
+    
+    gs_inYield = TRUE;
+
     // we don't want to process WM_QUIT from here - it should be processed in
     // the main event loop in order to stop it
     MSG msg;
@@ -1307,9 +1317,20 @@ bool wxYield()
     // let the logs be flashed again
     wxLog::Resume();
 
+    gs_inYield = FALSE;
+
     return TRUE;
 }
 
+// Yield to incoming messages; but fail silently if recursion is detected.
+bool wxYieldIfNeeded()
+{
+    if (gs_inYield)
+        return FALSE;
+        
+    return wxYield();
+}
+
 bool wxHandleFatalExceptions(bool doit)
 {
 #if wxUSE_ON_FATAL_EXCEPTION