+ // 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();
+
+
+ // delayed destruction
+ // -------------------
+
+ // If an object may have pending events for it, it shouldn't be deleted
+ // immediately as this would result in a crash when trying to handle these
+ // events: instead, it should be scheduled for destruction and really
+ // destroyed only after processing all pending events.
+ //
+ // Notice that this is only possible if we have a running event loop,
+ // otherwise the object is just deleted directly by ScheduleForDestruction()
+ // and IsScheduledForDestruction() always returns false.
+
+ // schedule the object for destruction in the near future
+ void ScheduleForDestruction(wxObject *object);
+
+ // return true if the object is scheduled for destruction
+ bool IsScheduledForDestruction(wxObject *object) const;
+
+
+ // wxEventLoop-related methods
+ // ---------------------------
+
+ // all these functions are forwarded to the corresponding methods of the
+ // currently active event loop -- and do nothing if there is none
+ virtual bool Pending();
+ virtual bool Dispatch();
+
+ virtual int MainLoop();
+ virtual void ExitMainLoop();