]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/app.h
check that the conversion to wxDateTime was really successful
[wxWidgets.git] / include / wx / app.h
index 10a99bf981e0f59e74b1117b0f899c0b1e86556c..f754a7b117f5b524c47362e8e01f836c11dfef11 100644 (file)
@@ -277,14 +277,49 @@ public:
 #endif // wxUSE_EXCEPTIONS
 
 
 #endif // wxUSE_EXCEPTIONS
 
 
-    // wxEventLoop redirections
-    // ------------------------
-
-    virtual void SuspendProcessingOfPendingEvents();
-    virtual void ResumeProcessingOfPendingEvents();
+    // pending events
+    // --------------
+
+    // IMPORTANT: all these methods conceptually belong to wxEventLoopBase
+    //            but for many reasons we need to allow queuing of events
+    //            even when there's no event loop (e.g. in wxApp::OnInit);
+    //            this feature is used e.g. to queue events on secondary threads
+    //            or in wxPython to use wx.CallAfter before the GUI is initialized
+
+    // process all events in the m_handlersWithPendingEvents list -- it is necessary
+    // to call this function to process posted events. This happens during each
+    // event loop iteration in GUI mode but if there is no main loop, it may be
+    // also called directly.
     virtual void ProcessPendingEvents();
     virtual void ProcessPendingEvents();
+
+    // check if there are pending events on global pending event list
     bool HasPendingEvents() const;
 
     bool HasPendingEvents() const;
 
+    // temporary suspends processing of the pending events
+    void SuspendProcessingOfPendingEvents();
+
+    // resume processing of the pending events previously stopped because of a
+    // call to SuspendProcessingOfPendingEvents()
+    void ResumeProcessingOfPendingEvents();
+
+    // called by ~wxEvtHandler to (eventually) remove the handler from the list of
+    // the handlers with pending events
+    void RemovePendingEventHandler(wxEvtHandler* toRemove);
+
+    // adds an event handler to the list of the handlers with pending events
+    void AppendPendingEventHandler(wxEvtHandler* toAppend);
+
+    // moves the event handler from the list of the handlers with pending events
+    //to the list of the handlers with _delayed_ pending events
+    void DelayPendingEventHandler(wxEvtHandler* toDelay);
+
+    // deletes the current pending events
+    void DeletePendingEvents();
+
+
+    // wxEventLoop redirections
+    // ------------------------
+
     virtual bool Pending();
     virtual bool Dispatch();
 
     virtual bool Pending();
     virtual bool Dispatch();
 
@@ -300,7 +335,6 @@ public:
     // debugging support
     // -----------------
 
     // debugging support
     // -----------------
 
-#ifdef __WXDEBUG__
     // this function is called when an assert failure occurs, the base class
     // version does the normal processing (i.e. shows the usual assert failure
     // dialog box)
     // this function is called when an assert failure occurs, the base class
     // version does the normal processing (i.e. shows the usual assert failure
     // dialog box)
@@ -320,7 +354,6 @@ public:
                           int line,
                           const wxChar *cond,
                           const wxChar *msg);
                           int line,
                           const wxChar *cond,
                           const wxChar *msg);
-#endif // __WXDEBUG__
 
     // check that the wxBuildOptions object (constructed in the application
     // itself, usually the one from IMPLEMENT_APP() macro) matches the build
 
     // check that the wxBuildOptions object (constructed in the application
     // itself, usually the one from IMPLEMENT_APP() macro) matches the build
@@ -388,6 +421,27 @@ protected:
     // been started yet or has already terminated)
     wxEventLoopBase *m_mainLoop;
 
     // been started yet or has already terminated)
     wxEventLoopBase *m_mainLoop;
 
+
+    // pending events management vars:
+
+    // the array of the handlers with pending events which needs to be processed
+    // inside ProcessPendingEvents()
+    wxEvtHandlerArray m_handlersWithPendingEvents;
+
+    // helper array used by ProcessPendingEvents() to store the event handlers
+    // which have pending events but of these events none can be processed right now
+    // (because of a call to wxEventLoop::YieldFor() which asked to selectively process
+    // pending events)
+    wxEvtHandlerArray m_handlersWithPendingDelayedEvents;
+
+#if wxUSE_THREADS
+    // this critical section protects both the lists above
+    wxCriticalSection m_handlersWithPendingEventsLocker;
+#endif
+
+    // flag modified by Suspend/ResumeProcessingOfPendingEvents()
+    bool m_bDoPendingEventProcessing;
+
     friend class WXDLLIMPEXP_FWD_BASE wxEvtHandler;
 
     // the application object is a singleton anyhow, there is no sense in
     friend class WXDLLIMPEXP_FWD_BASE wxEvtHandler;
 
     // the application object is a singleton anyhow, there is no sense in